Reads every page you list, pulls out the details you asked for with AI, and adds one row per page to your sheet.

UsesGoogle SheetsJina AIOpenAI

Turn a list of web pages into spreadsheet rows

Give it a list of web pages and the details you want off each one, and run it. Every page is fetched once, exactly as you listed it, and read as clean text, then an AI step pulls out the details you asked for and they are written across one row per page in your Google Sheet.

You end up with one appended row per page: the page address first, then your details in the order you listed them, with 'n/a' wherever the page does not say. Nothing crawls, follows links or wanders onto other pages. Values are written exactly as extracted, so nothing off a page can turn into a spreadsheet formula, and rows are only ever added, so running it again with a new list never disturbs what is already there. A page that will not load, or that comes back with no readable text, is named in the run log and the remaining pages carry on.

Before the first run you need a sheet whose header row reads 'Page' followed by your fields in the same order, since the workflow cannot name the columns for you.

ValuesSet pageUrls to blank.Set pageUrls to blank.
ValuesSet fieldsToExtract to blank.Set fieldsToExtract to blank.
ValuesSet spreadsheetUrl to blank.Set spreadsheetUrl to blank.
ValuesSet sheetName to Sheet1.Set sheetName to Sheet1.
ValuesSet maxPageCharacters to 12000.Set maxPageCharacters to 12000.
ValuesSet columnSeparator to |||.Set columnSeparator to |||.
TextSplit pageUrls by , and save it as pages.Split pageUrls by , and save it as pages.
ValuesSet rowsWritten to 0.Set rowsWritten to 0.
ValuesSet pagesWithoutRows to an empty list.Set pagesWithoutRows to an empty list.
Decisions & LoopsFor each listedPage in pages:For each listedPage in pages:
TextTrim listedPage and save it as webPage.Trim listedPage and save it as webPage.
Decisions & LoopsIf webPage doesn't start with httpIf webPage doesn't start with http
Yes
ListsAdd webPage to the end of pagesWithoutRows and save it as pagesWithoutRows.Add webPage to the end of pagesWithoutRows and save it as pagesWithoutRows.
ValuesShow in the output: Skipped '@webPage' - each page in the 'pageUrls' step has to be a full web address starting with http.Show in the output: Skipped '@webPage' - each page in the 'pageUrls' step has to be a full web address starting with http.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf a step below fails, save the error as pageErrorIf a step below fails, save the error as pageError
Try
Jina AIJina AIRead the page at webPage with Jina. Save it as page.Read the page at webPage with Jina. Save it as page.
TextTrim page.content and save it as pageText.Trim page.content and save it as pageText.
Decisions & LoopsIf pageText isn't emptyIf pageText isn't empty
Yes
ValuesSet prompt to You are reading one web page and filling in one row of a spreadsheet.Set prompt to You are reading one web page and filling in one row of a spreadsheet. Pull out these details, in this exact order: fieldsToExtract Reply with ONE line and nothing else. Separate the values with columnSeparator in the order listed above. Do not repeat the field names, do not add headings, bullets, numbering or any commentary, and do not wrap values in quotes. Write n/a for anything the page does not say. Page address: webPage Page content: pageText truncated to maxPageCharacters characters.
OpenAIOpenAIAsk OpenAI: prompt. Save it as extraction.Ask OpenAI: prompt. Save it as extraction.
TextTrim extraction.response_text and save it as answerLine.Trim extraction.response_text and save it as answerLine.
ListsCreate a list of [webPage] and save it as row.Create a list of [webPage] and save it as row.
Decisions & LoopsFor each extractedValue in answerLine split by columnSeparator:For each extractedValue in answerLine split by columnSeparator:
Lists Add extractedValue to the end of row and save it as row. Add extractedValue to the end of row and save it as row.
Google SheetsGoogle SheetsAdd a row to sheetName in spreadsheetUrl.Add a row to sheetName in spreadsheetUrl.
ValuesAdd 1 to rowsWritten.Add 1 to rowsWritten.
No
ListsAdd webPage to the end of pagesWithoutRows and save it as pagesWithoutRows.Add webPage to the end of pagesWithoutRows and save it as pagesWithoutRows.
ValuesShow in the output: Read '@webPage' but it had no readable text, so no row was written for it.Show in the output: Read '@webPage' but it had no readable text, so no row was written for it.
On error
ListsAdd webPage to the end of pagesWithoutRows and save it as pagesWithoutRows.Add webPage to the end of pagesWithoutRows and save it as pagesWithoutRows.
ValuesShow in the output: Could not read '@webPage': pageError as text.Show in the output: Could not read '@webPage': pageError as text.
ValuesShow in the output: Finished. Wrote rowsWritten as text row(s) to '@sheetName'.Show in the output: Finished. Wrote rowsWritten as text row(s) to '@sheetName'.
Decisions & LoopsIf pagesWithoutRows isn't emptyIf pagesWithoutRows isn't empty
Yes
ValuesShow in the output: No row was written for: pagesWithoutRows joined by , .Show in the output: No row was written for: pagesWithoutRows joined by , .
No
No steps