---
title: "Web page listings pulled into Google Sheets with Jina and AI"
kind: "Kit"
category: "Research"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/54453915-6f26-44e7-90dd-c4a86fcbf585"
updated: "2026-11-12"
---

# Web page listings pulled into Google Sheets with Jina and AI

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that reads a web page through Jina, asks an OpenAI chat model to pick out each listing on it, and adds one Google Sheets row for each. It comes set to a practice bookshop page.

Web page listings pulled into Google Sheets with Jina and AI is an n8n workflow in the Research category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-12. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow turns a web page of listings into rows in Google Sheets. Jina’s Reader fetches the page as text, an OpenAI chat model picks out each listing with its title, price, availability and links, and every listing is added to your sheet as a row. It comes set to a practice bookshop page. Six nodes run it, beside one sticky note.

### Who it suits

People who copy prices or listings from a page into a sheet by hand, such as shop owners watching a competitor’s catalogue, researchers, buyers and students. Skip it for pages that need a login, for pages whose rules forbid automated reading, and for figures you cannot check afterwards.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Retail | Shop owners | Pull a competitor’s catalogue page into a sheet | An owner reads the titles and prices from one category page and sorts them by price. |
| Research | Analysts | Collect the listings of one page for a comparison | An analyst gathers a page of listings into a sheet and checks them against the source. |
| Procurement | Buyers | Copy a supplier’s public price list into rows | A buyer pulls a published price list into a sheet and sets it beside a quote. |
| Education | Students | Learn how scraping with AI works on a safe page | A student runs the practice page and reads the rows it makes. |

You need a little n8n and a Google Sheet: import a file, add two credentials, set a sheet ID and write five headers.

### Where to use it

Any n8n that can reach Jina, OpenAI and Google will run it. The rows land in the sheet you name.

- n8n Cloud: import the file there and click Test workflow
- Your own n8n server: the same file and steps
- Google Sheets: the sheet that receives the rows
- Any public web page: the one whose address you put in \`Jina Fetch\`

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Setup takes two credentials, a sheet and a header row, and Jina’s key is optional.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Google Sheets | A sheet with the headers \`title\`, \`price\`, \`availability\`, \`product\_url\` and \`image\_url\` in row 1 of \`Sheet1\` |
| OpenAI | An API key, and a model to choose |
| Jina | A key is optional |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add a Google Sheets OAuth2 credential and select it in `Save to Google Sheets`. Replace `YOUR_SHEET_ID` with your sheet’s ID, the long string in its address between `/d/` and `/edit`.
3. Add an OpenAI credential and select it in `OpenAI Chat Model`, then choose a model.
4. In `Jina Fetch`, add a Header Auth credential with your Jina key, or set Authentication to None to run without one.
5. Check that row 1 of your sheet holds the five headers.
6. Click Test workflow.

### How to use it

Click Test workflow. A few moments later, one row for each listing on the page is in your sheet. To read another page, replace the address in `Jina Fetch` and keep `https://r.jina.ai/` in front of it. Each run adds rows, so clear the old ones first if you do not want duplicates.

What to change for a different result

| To change | Where |
| --- | --- |
| The page | The URL in \`Jina Fetch\` |
| What is picked out | The system prompt and the schema in \`Information Extractor\`, and your sheet’s headers |
| The model | \`OpenAI Chat Model\` |
| The sheet and its tab | \`Save to Google Sheets\` |
| How it starts | Swap the manual trigger for a Schedule Trigger |

### Example

A shop owner points the workflow at a competitor’s category page of books and clicks Test workflow. Jina returns the page as text, and the chat model finds each book with its title, price, availability, link and picture link.

One row appears in her sheet for each book. She sorts the rows by price and checks a few against the page, because the model reads the text and can slip.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Jina’s Reader turns a web page into plain text, the chat model reads that text the way you would, and n8n writes the rows. Start with the practice page the file comes set to.

**For experts.** An Information Extractor node with a manual JSON schema sits between the HTTP Request node and a Split Out node. Its result is one object with a `results` list.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Jina Fetch\` | A GET to \`https://r.jina.ai/\` followed by the page address | The text lands in \`data\`, and the node expects a Header Auth credential for Jina’s key |
| \`Information Extractor\` | Pulls a list of books out of the text with a system prompt and a JSON schema | Every property is optional, so the model may leave a value out |
| \`Split Out\` | Turns \`output.results\` into one item for each book | An empty list gives no rows |
| \`Save to Google Sheets\` | Appends each item as a row | Fields go to the headers with the same name, and a field with no header becomes a new column on the right |

### Good to know

Every run appends rows, so a second run on the same page repeats the first run’s rows.

- Duplicates: clear the old rows first, or point the workflow at a new sheet
- One page: there is no paging, and a page whose text is longer than the model accepts will fail
- Repairs: the extractor’s schema lacked its outer \`type\` and \`properties\`, the sheet’s column list named fields the extractor does not return, and \`Jina Fetch\` ignored SSL issues. Mindket’s copy fixes all three
- Headers: a field with no matching header becomes a new column on the right by default, in n8n’s current source read on 12 November 2026, so keep them spelled as above
- Accuracy: the model reads text and can slip, and every value is text. Check some rows against the page
- Model: the OpenAI Chat Model node names none, and at the version this file uses it defaults to \`gpt-5-mini\` in n8n’s current source, read on 12 November 2026. OpenAI’s deprecations page gives 11 December 2026 for it and names \`gpt-5.6-terra\` as the replacement
- The practice page: \`books.toscrape.com\` calls itself a fictional bookstore made to be scraped, with prices that have no real meaning. Check a site’s rules before you point the workflow at another one
- Jina’s key: its Reader page, read on 12 November 2026, says a key is optional and that without one the limit is 20 requests a minute for each IP address. That page does not show the header’s name, so take it from Jina’s documentation
- Your data: the page’s text goes to OpenAI, and Jina sees the address you ask for
- Credentials: the JSON holds none

## README

```markdown
# Web page listings pulled into Google Sheets with Jina and AI

An n8n workflow that reads one web page through Jina's Reader, asks an OpenAI chat model to pick out every listing on it
and adds one row for each listing to a Google Sheet. The file comes set to a category page of a practice bookshop.

## What is inside

- `workflow.json`: the workflow as n8n exports it, seven nodes: six that do the work and one sticky note. It holds no
  credential.
- `README.md`: these notes.

## What we changed from the original copy

- The credential links are gone: the Google Sheets account, the OpenAI key and the Header Auth credential on
  `Jina Fetch`. Select your own.
- `Save to Google Sheets` pointed at the author's own sheet and its `Sheet2` tab. It now has `YOUR_SHEET_ID` and the tab
  `Sheet1`.
- The schema in `Information Extractor` held only the `results` list, with no outer `type` and `properties`, so it was
  not a complete JSON Schema. Mindket's copy wraps the same fields in them.
- The column list in `Save to Google Sheets` named `name`, `price`, `availability`, `image` and `link`, while the
  extractor returns `title`, `price`, `availability`, `product_url` and `image_url`. It now names the extractor's own
  fields, and it no longer lists a matching column.
- `Jina Fetch` had its option to ignore SSL issues turned on. It is off now, so the request checks the server's
  certificate.
- The large note at the top, with the author's tutorial video and a link to a sample sheet, is now a title.
- Nothing else.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A Google Sheet with these headers in row 1 of its first tab: `title`, `price`, `availability`, `product_url` and
  `image_url`. The tab is called `Sheet1` unless you renamed it.
- An OpenAI API key.
- Optional: a Jina key. See Good to know.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add a Google Sheets OAuth2 credential and select it in `Save to Google Sheets`. Replace `YOUR_SHEET_ID` with your
   sheet's ID, the long string in its address between `/d/` and `/edit`. Change the tab name if yours is not `Sheet1`.
3. Add an OpenAI credential and select it in `OpenAI Chat Model`. The node names no model, so choose one.
4. In `Jina Fetch`, either add a Header Auth credential with your Jina key, or set Authentication to None to run without
   one. The node asks for a credential until you do one or the other.
5. Check that row 1 of your sheet holds the five headers above.
6. Click Test workflow. A row for each listing on the page appears in your sheet.

To read another page, replace the address in the URL of `Jina Fetch`. Keep `https://r.jina.ai/` in front of it.

## How a run goes

1. `When clicking "Test workflow"` starts it by hand.
2. `Jina Fetch` asks Jina's Reader for the page. It comes back as plain text, which n8n keeps in `data`.
3. `Information Extractor` sends that text to the chat model with a system prompt and the schema. It returns `output`,
   an object with a `results` list. Each book in it has a title, price, availability, product link and image link.
4. `Split Out` turns `output.results` into one item for each book.
5. `Save to Google Sheets` appends each item as a row. Fields go to the headers with the same name.

## Change the look

- The page: the URL in `Jina Fetch`.
- What is picked out: the system prompt and the schema in `Information Extractor`, and the headers in your sheet to
  match.
- The model: `OpenAI Chat Model`.
- The sheet and its tab: `Save to Google Sheets`.
- How it starts: replace the manual trigger with a Schedule Trigger to run it on a timer. Each run adds rows.

## Good to know

- Every run appends. A second run on the same page adds the same rows again, so clear the old ones first if you do not
  want duplicates.
- It reads one page. There is no paging, and a page whose text is longer than the model accepts will fail.
- A field that has no matching header becomes a new column on the right, by default, in n8n's current source read on
  12 November 2026. Keep the headers spelled as above.
- The model reads the text and can slip, and every value is text. Check some rows against the page before you rely on
  them.
- The OpenAI Chat Model node, at the version this file uses, names no model and defaults to `gpt-5-mini` in n8n's current
  source, read on 12 November 2026. OpenAI's deprecations page gives 11 December 2026 for `gpt-5-mini` and names
  `gpt-5.6-terra` as its replacement.
- The page the file reads, `books.toscrape.com`, calls itself a fictional bookstore made to be scraped, and its prices
  have no real meaning. Check a site's rules before you point the workflow at another one.
- Jina's Reader page, read on 12 November 2026, says a key is optional and that without one the limit is 20 requests a
  minute for each IP address. That page does not show the header's name, so take it from Jina's documentation.
- The page's text goes to OpenAI, and Jina sees the address you ask for.
```

## What is in it

3 files, 12 KB, downloaded as a zip.

```text
NOTICE.md  694 B
README.md  5 KB
workflow.json  6 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 5 steps, starting by hand
- AI: 1 step calls an AI model: Information Extractor
- Sign-ins: Signs in to: r.jina.ai, Google Sheets and OpenAI
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 5 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/54453915-6f26-44e7-90dd-c4a86fcbf585)
- [Its page on Mindket](https://mindket.com/p/54453915-6f26-44e7-90dd-c4a86fcbf585)
