Skip to main content
Extract turns a web page into structured JSON in a single request. Add 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 the extract=auto parameter to your Zenrows request:
This example extracts structured data from the Scraping Course eCommerce page. Instead of raw HTML alone, you get a JSON response with the meaningful data Zenrows identified on the page, plus the original HTML for reference.

Response

A request with extract=auto returns Content-Type: application/json with two fields:
JSON
  • parsed contains the structured data extracted from the page.
  • html contains the raw HTML of the scraped page. It’s included during the beta so you can validate the extracted data against the source.
Field names are in plain English and reflect the data each website actually exposes, so different websites can return different fields for similar pages. The set of fields inside 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.
Extraction is fully automatic, and a field is only returned when it’s present on the page. Always run test requests on your target pages and verify all the data you need is extracted before using Extract in production.

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
An integration can check this before sending a request instead of handling an error after one. See the endpoint reference for the full response.

Asking for a domain

If the domain you need isn’t there, ask for it:
cURL
Preparation usually takes minutes. Poll 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.
You can monitor your Zenrows usage in multiple ways to stay informed about your account activity and prevent unexpected overages.Dashboard monitoring: View real-time usage statistics, remaining requests, success rates, and request history on your Analytics Page. You can also set up usage alerts in your notification settings to receive notifications when you approach your limits.Programmatic monitoring: For automated monitoring in your applications, call the /v1/subscriptions/self/details endpoint with your API key in the X-API-Key header. This returns real-time usage data that you can integrate into your monitoring systems. Learn more about the usage endpoint.Response header monitoring: Track your concurrency usage through response headers included with each request:
  • Concurrency-Limit: Your maximum concurrent requests
  • Concurrency-Remaining: Available concurrent request slots
  • X-Request-Cost: Cost of the current request

Frequently Asked Questions (FAQ)

Autoparse (autoparse=true) applies general-purpose extraction rules that work the same way on every website. 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; Autoparse works on any website with no preparation.
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.
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.
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.
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.
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.