Skip to main content
For most scraping workloads you don’t want raw HTML - you want clean JSON with the fields that matter. Pass parsed_data=true to /getPageSource and ScrapeUnblocker extracts structured data using the best available method for that page.

Request

Response shape

page_type

Detected category of the page:
  • product_detail - a single product (also films, books, apps)
  • listing_detail - a single classified listing: vehicle, property, job, event, place
  • recipe_detail - a recipe
  • article_detail - a news story, blog post or wiki article
  • search_list - search results or a listing grid
  • article_list - a list of articles or posts (news front page, forum)
  • category_index - a category navigation page
  • homepage - a site’s home page
  • review_list - a page of reviews (Trustpilot, G2, Yelp, …)
  • social_profile / social_post - a creator or brand profile, a single post
  • not_found - the target answered 404 / 410 (see below)
  • unknown - the page could not be classified

data

The extracted fields. Field names are English snake_case whatever the language of the page, and every price is normalized to { "value": <number>, "currency": "<code>" }. List pages (search_list, article_list, …) return the results as items, plus total and next_page (the URL of the next results page, or null on the last one). Detail pages (*_detail) return the item’s fields at the top level, filled from the page’s own spec table, its labelled values and the Schema.org data it publishes (price, brand, rating, mileage, ingredients, salary, …). Next to them: Use the top-level fields for values you read across many sites; use specifications when you need a row the page shows that has no top-level field.

When nothing can be extracted

If the page exists and renders (a call without parsed_data would return 200 with its HTML) but no structured data can be extracted from it, the answer is still 200. The body keeps the usual data envelope with an empty data, says that nothing was extracted, and carries the rendered HTML so you can parse it yourself:
Check data_extracted (present only in this case) or an empty data.data. The call is billed like a call without parsed_data, since you receive the same page. Retrying returns the same result; if you expected data from this page, retry once with refresh_rules=true and a rules_hint. A dead URL is different: when the target itself answers 404 / 410, you get that status with {"data": {"page_type": "not_found", "data": {}}} - see Dead URLs.

When parsed data is the right choice

Use it when you’re scraping a known page type at scale - products, listings, articles, recipes, jobs. Saves you from writing per-site parsers.
Skip it when you need a field the extractor doesn’t expose, or when you need raw HTML for downstream tooling. Fetch the HTML and parse it yourself instead.

Combining with get_cookies

get_cookies=true takes precedence over parsed_data=true: with both set, you get the html + cookies + proxy JSON of a cookies call, without data. If you need structured data and cookies for the same page, make two calls. See cookies and sessions.