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. Common values:
  • product - e-commerce product detail page
  • listing - search results or category page
  • article - news, blog, or editorial content
  • job - job posting
  • real_estate - property listing
  • social_profile - a creator/brand profile on TikTok or Instagram
  • social_post - a single TikTok video or Instagram post/reel
  • unknown - extractor could not classify the page

source

Which extraction strategy produced the data:

data

The extracted fields. Schema depends on page_type. Field names are normalized across sources - a product always has title and price regardless of whether source is schema_org or ai_rule.

Social pages: TikTok and Instagram

TikTok and Instagram build their pages in the browser from a JSON payload embedded in the HTML, so there is very little in the markup to read. Both are handled by dedicated extractors that read that payload directly, which means the engagement numbers come back as exact integers rather than the rounded, prose-formatted values the page eventually paints (36K likes). TikTok - a video URL returns page_type: "social_post":
A profile URL returns page_type: "social_profile" with username, nickname, bio, verified, avatar_url, followers, following, likes and videos. Instagram - a post or reel URL returns page_type: "social_post" with shortcode, caption, likes, comments, posted_at, media_type (image / video / carousel), thumbnail_url, video_url, hashtags and an author block. A profile URL returns page_type: "social_profile" with username, full_name, biography, followers, following, verified, external_urls and a recent_posts array.
Instagram does not include per-post engagement in the payload it serves on a profile page, so recent_posts[].likes and .comments are null there rather than guessed at. Each entry carries a post url - fetch that for the exact counts. TikTok profiles are the same: the profile carries account totals, and per-video numbers come from the video URL.Verified against live payloads: a profile timeline node carries only code, caption, display_uri, media_type and the author - Instagram serves engagement for exactly one media per page, the one the page is about. Both shapes also carry counts_hidden: on a post it is true when the creator has turned like counts off, which tells a null you can act on apart from one you cannot. On a profile grid it is null along with the counts, because Instagram sends neither. posts_count is null on a logged-out profile fetch for the same reason - the field is in the payload, sent empty.

When parsed data is the right choice

Use it when you’re scraping a known page type at scale - products, articles, listings, 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

You can set both parsed_data=true and get_cookies=true on the same request. The response gains a cookies field and a proxy field alongside data:
See cookies and sessions.