Skip to main content
Add extract=auto to a Fetch request and Zenrows returns the page’s data as JSON: names, prices, availability, images, breadcrumbs and more, with no selectors to write or maintain. Reach for it whenever you want fields, not HTML. Uses: Extract (extract=auto, extract_fields), the Extract endpoints and Adaptive Stealth Mode (mode=auto)

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.

Extract a page as JSON

Set extract=auto and pair it with mode=auto, so Zenrows renders JavaScript and switches to premium proxies when the page needs them. The response is JSON with two fields: parsed holds the structured data, html holds the raw page for validation.
The CLI prints parsed directly. 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.

Example output

The parsed field for the catalog page, trimmed to two products:
A field the page leaves empty comes back as null. Field names follow what each website exposes and stay stable for that website. New fields arrive as extraction grows, so read the fields you use and let the rest pass through.

Keep just the fields you need

Add extract_fields with a comma-separated list. A bare name (products) keeps a whole group, and a dot path (products.price) keeps one field inside a group, on every element of a list. Run one request without it first to read the field names the page offers.
Output (trimmed)

Extract a page from a major store

The same request works on the hundreds of domains Zenrows has prepared, including Amazon, Walmart, eBay, Best Buy, Zillow and Booking.com. This Walmart product page returns pricing, fulfillment, features and media:
cURL
Output (parsed, trimmed)

Check a domain before you send traffic

GET /v1/extract/domains lists every domain Extract serves right now. It’s free, so check it before you send traffic to a new site:
Python (Requests)
Output

Prepare a new domain

For a domain that isn’t on the list yet, ask Zenrows to prepare it. Send one example URL per kind of page you care about, such as a product page and a search page, then poll until status is ready. Preparation usually takes minutes, and every Zenrows API key can use the domain once it’s ready.
Python (Requests)
Branch on status: preparing, ready or failed. A failed preparation carries failure.code, and the endpoint reference maps each code to the next step.

Use the Zenrows SDKs

Both SDKs have an extract() method that sends extract=auto plus mode=auto for you. Pass extract_fields like any other parameter. When a domain isn’t prepared yet, extract() retries with autoparse; turn that off with fallback_to_autoparse=False (Python) or fallbackToAutoparse: false (Node.js) to get the REQS007 response instead.
Output (trimmed)

Customize it

Troubleshooting

  • 403 with REQS007: the domain, or that kind of page on it, isn’t prepared yet. The request isn’t charged. Prepare the domain with that URL in example_urls, then retry once it reads ready.
  • 400 with REQS004 naming extract_fields: none of the names you asked for exist on this page. The error lists the fields the page offers; copy names from there, or omit extract_fields.
  • 422 with no_data_extracted: Extract knows the page type, and the fields came back empty, usually because the page hadn’t finished loading. The request isn’t charged. Retry with js_render=true&wait=3000 (and premium_proxy=true for protected sites), or drop extract_fields to see every field.
  • A preparation ends failed with unpreparable: the example URLs returned no usable HTML. Send other example URLs from the same site.
  • The request takes long to return: set your HTTP client timeout to 180 seconds or more so mode=auto has time to escalate.

Extract real estate listings and property data

One schema for Zillow, Redfin and Idealista, from search to every listing.

Extract data with CSS selectors

Pick exact elements with css_extractor, or parse the HTML yourself.

Scrape a list of URLs

Run Extract on thousands of pages as one Batch job.

Turn any web page into LLM-ready markdown

Get the whole page as clean markdown instead of fields.