extract=auto to your Fetch call, and Zenrows identifies the meaningful data on the page and returns it as clean JSON, together with the raw HTML. There are no selectors to write, no schema to define, and no parser to maintain. The extraction adapts automatically when a website changes its layout.
Extract is in Beta and works on domains Zenrows has prepared. Any active Zenrows API key can use it on those, with no extra setup needed, and you can ask for a new domain to be prepared yourself.
How Extract works
Unlike general-purpose parsing rules that apply the same logic to every website, Extract builds and maintains an extraction that’s tailored to each individual site. Zenrows analyzes a domain’s pages, identifies its meaningful data points, and keeps that extraction working as the site evolves, so you get richer and more complete fields than a one-size-fits-all approach can offer. That tailoring is per domain, so a domain has to be prepared before Extract can serve it. Any domain can be: see Domain coverage.Basic usage
Enable Extract by adding theextract=auto parameter to your Zenrows request:
Parameters
Extract adds two parameters to a Fetch request. Every other Fetch parameter keeps working alongside them.Response
A request withextract=auto returns Content-Type: application/json with two fields:
JSON
parsedcontains the structured data extracted from the page.htmlcontains the raw HTML of the scraped page. It’s included during the beta so you can validate the extracted data against the source.
parsed stays stable across requests for a given website, and new fields may be added over time as extraction improves, so treat unknown fields as additive rather than breaking. The html field is included for validation during the beta, and the overall response shape may evolve once the beta ends, so build your data pipeline around parsed and treat html as a validation aid rather than a permanent contract.
Selecting the fields you need
parsed carries every field Extract found on the page. Add extract_fields with a comma-separated list to get back only the ones your pipeline reads:
Response
- A bare name selects a whole group.
extract_fields=productsreturns every product with all of its fields. - A dot path selects inside a group, element by element.
products.namereturns thenameof every product in the list, not only the first one. - Spaces after commas are ignored.
products.name, products.priceselects the same fields asproducts.name,products.price. - Only
parsedis filtered. Thehtmlfield always comes back in full. - Filtering never adds a field. Naming something the page doesn’t provide doesn’t produce an empty field, it just isn’t there.
standard request can be narrowed with the canonical field names: extract=standard&extract_fields=listings.title,listings.price.
Field names come from each website, so they differ from site to site in the default mode. Send one request without
extract_fields first, read the names in parsed, then pin the ones you want.When none of the requested fields exist
A name that matches nothing is ignored as long as at least one other name in the list does match, so a typo costs you that field quietly. When no name matches, the request fails with400 (REQS004) rather than returning an empty object, and the message lists the fields the page does offer:
Response
Extraction modes
The value ofextract also picks which extraction resolves for the page:
Stay on
auto unless you’re merging pages from several websites into one table, which is the job standard exists for. The trade is richness for uniformity: a native extraction returns everything a given site exposes, and a standard one returns the agreed set.
The mode is an API-level parameter. The playground in your dashboard runs the default extraction and lists
standard as coming soon, so pick a mode from a direct API request or from an SDK, which passes the parameter straight through.construction_area_m2 and the other area_sqm, one splitting the price into price and price_currency, the other into price_amount and price_currency. In standard, both return the same field names:
Response
400 (REQS004) and the message Invalid value "..." for 'extract' parameter. Supported values: auto, native, standard.
Domain coverage
Extract works on any domain, once that domain has been prepared: Zenrows learns the shapes of its pages and checks that extraction returns the right data. A prepared domain then works for every Zenrows API key, so coverage is per domain and never per account, and there is no allowlist to manage on your side. Many domains are prepared already, and the set grows as people ask for the sites they need.Checking whether a domain is ready
GET /v1/extract/domains returns everything Extract serves right now:
cURL
Response
Asking for a domain
If the domain you need isn’t there, ask for it:cURL
GET /v1/extract/prepared-domains/{domain} until status is ready, then send your extract=auto request as normal. Example URLs are worth including: they tell Zenrows exactly which kinds of page you care about.
Each account can prepare a set number of new domains per month; the endpoint reference covers how to check what’s left.
If you send extract=auto for a domain that isn’t prepared, the request fails with a 403 error (REQS007) naming the domain, and the message tells you how to get it prepared. Nothing about your plan or your account changes that: preparation is per domain.
Combining with other features
Extract works on the final HTML of the page, so it combines with the scraping features you already use. For JavaScript-heavy websites, add JavaScript Rendering with a short wait so dynamic content finishes loading before extraction. For protected websites, add Premium Proxy:When
extract=auto is set, it takes precedence over other output formats. autoparse, css_extractor, response_type, and outputs are ignored on that request.Extract vs. Autoparse vs. CSS Extractor
Pricing
Extract is free during Beta. You only pay the standard Fetch cost of the underlying request, including JavaScript Rendering or Premium Proxy if you use them.Frequently Asked Questions (FAQ)
How is Extract different from Autoparse?
How is Extract different from Autoparse?
Autoparse (
autoparse=true) applies general-purpose extraction rules that work the same way on every website, and it is deprecated. Extract (extract=auto) builds an extraction tailored to each website, which returns richer, more complete fields and adjusts itself when the website’s layout changes. Extract needs a domain to be prepared first, which you can request; see Migrate to Extract for the parameter swap.What happens on a domain that isn't prepared yet?
What happens on a domain that isn't prepared yet?
The request fails with a
403 error (REQS007) naming the domain, and the message tells you how to get it prepared: POST /v1/extract/prepared-domains, then retry once it reports ready. Nothing about your plan or your account changes the outcome, since preparation is per domain.Can I get only some of the fields back?
Can I get only some of the fields back?
Yes. Add
extract_fields with a comma-separated list, using dot paths for fields inside a group: extract_fields=products.name,products.price. A dot path applies to every element of a list, so that example returns the name and price of every product. Omit the parameter to receive every field the page provides.What is the difference between the native and standard extraction modes?
What is the difference between the native and standard extraction modes?
extract=auto (the default) and extract=native return the website’s own extraction, so field names follow what that particular site exposes and differ from site to site. extract=standard returns a canonical schema shared by every website in the same vertical, so pages from different websites line up without mapping. standard currently covers real estate only, and modes are available on the API, not yet in the dashboard playground. See Extraction modes.Will the extracted fields change over time?
Will the extracted fields change over time?
The response shape for an enabled website stays stable. Your integration keeps receiving the same fields even as Zenrows improves extraction behind the scenes. New fields may be added over time, so treat unknown fields as additive rather than breaking.
Do I need to sign up separately to use Extract?
Do I need to sign up separately to use Extract?
No. Access is per domain, not per account. Any active Zenrows API key can use
extract=auto on a domain once that domain is prepared, and any key can ask for a domain to be prepared. There’s no separate signup or plan change required.Can I rely on the html field long term?
Can I rely on the html field long term?
Treat
html as a validation aid rather than a permanent part of the contract. It’s included during the beta so you can check the extracted data against the source page. Build your data pipeline around parsed, since the surrounding response shape may evolve once the beta ends.Can I combine Extract with other Zenrows features?
Can I combine Extract with other Zenrows features?
Yes. Extract works alongside JavaScript Rendering, Premium Proxy, and other request options. It takes precedence over other output formats, so
autoparse, css_extractor, response_type, and outputs are ignored on a request that sets extract=auto.