Skip to main content
Search results and category pages hold a full row per item: name, price, URL, image, SKU. Send one to Extract with extract=auto and you get every row as JSON, plus the page’s pagination details, so you can walk every page and merge the results into one dataset. Uses: Extract (extract=auto, extract_fields), Adaptive Stealth Mode (mode=auto) and Batch for many pages

Ask your AI agent

With the Zenrows MCP server connected to Claude, Cursor or any MCP client, paste this prompt. Your agent picks the right Zenrows tools and settings on its own.
The same prompt works on whole categories with hundreds of pages: ask for “every page of this category in one batch”.

Extract one search results page

Point Extract at the search URL. parsed.products holds one object per result and parsed.page_context tells you which page you’re on and how many there are. Add extract_fields to keep the list fields you need: a dot path such as products.price applies to every item in the list.
The CLI prints every field in parsed. Its zenrows extract command sends extract=auto with mode=auto by default, and when a domain isn’t prepared yet it retries the page with autoparse, so you always get JSON back. See the CLI guide.
Output (trimmed)

Follow every page and merge the results

Read page_context.total_pages from the first page, build the URL of every other page, and extract each one. Keying rows by product_url merges them into one dataset and drops any item that shows up on two pages.
Output
Every site has its own page URL pattern (/page/2/, ?page=2, &p=2). Open page 2 in your browser, copy its URL, and put the page number where it changes.

Extract a search page from a major retailer

The same request works on search pages of major retailers such as Walmart, Amazon, eBay and Best Buy. Field names follow each website, so run one request without extract_fields first and read what parsed offers.
cURL
Output (parsed, trimmed)

Hand many listing pages to Batch

Once you know the page count, put every page URL in one Batch job with extract=auto in zenrows_params. Zenrows runs the pages in parallel and stores each result as JSON with the same parsed field, ready to merge. This example uses the full catalog’s 12 listing pages.
Python (Requests)
Output
To discover listing pages without a URL pattern, let Crawl find them first, as in Turn a whole catalog into a structured dataset.

Example output

The first entries of jackets.json, written by the pagination script above (21 products from 2 search pages):

Customize it

Troubleshooting

  • 400 with REQS004 naming extract_fields: none of the names exist on this page. The error lists the fields the page offers; copy names from there.
  • 403 with REQS007: the domain needs preparing for Extract. Prepare it with the search URL in example_urls, then retry.
  • Page 2 returns the same items as page 1: the page URL pattern is different on this site. Open page 2 in your browser and copy its exact URL format.
  • The dataset has fewer rows than total_results: merging by product_url removed items listed twice, such as sponsored results. Key by another field, such as item_id, to keep them.
  • The request takes long to return: set your HTTP client timeout to 180 seconds or more so mode=auto has time to escalate.

Get structured JSON from any page

How extract=auto works on a single page.

Turn a whole catalog into a structured dataset

Crawl a store, then extract every listing page with Batch.

Validate extracted data with a schema

Type, normalize and check every row before you store it.

Prepare any website for Extract

Add a new domain’s search and product pages to Extract.