curl --request POST \
--url https://api.scrapeunblocker.com/getPageSource \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/getPageSource"
headers = {"x-scrapeunblocker-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-scrapeunblocker-key': '<api-key>'}};
fetch('https://api.scrapeunblocker.com/getPageSource', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Fetch the HTML (or parsed JSON) for any URL
Routes the URL through the appropriate anti-bot bypass chain (site-specific handlers, real-browser rendering, rotating proxies). Returns the prettified HTML by default. Set markdown=true to receive the page as clean Markdown (text/markdown) for LLMs and agents: by default only the main content, with absolute links (main_content_only=false keeps the whole page). Set parsed_data=true to receive a structured JSON payload extracted via Schema.org / NEXT_DATA / AI-generated rules; the response body becomes { "data": { page_type, source, data } } instead of HTML. Use get_cookies=true to receive JSON with the HTML, the cookies and proxy, the country of the exit that served the request.
curl --request POST \
--url https://api.scrapeunblocker.com/getPageSource \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/getPageSource"
headers = {"x-scrapeunblocker-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-scrapeunblocker-key': '<api-key>'}};
fetch('https://api.scrapeunblocker.com/getPageSource', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Authorizations
Your ScrapeUnblocker API key. Apply on every request.
Query Parameters
Return the page as clean Markdown (text/markdown) instead of HTML: headings, lists, tables, absolute links and images with alt text, without scripts, styles or markup. Built for LLMs, agents and RAG pipelines. Billed like an HTML call.
With markdown=true: keep only the main content, without navigation, site header, footer and sidebars. Set to false for the whole page.
Return the page's interactive elements (buttons, inputs, selects, links, forms) with ready-to-use selectors instead of HTML, to help build steps.
JSON array of browser actions to run after the page loads (wait_for, wait_for_text, wait, click, type, select, press_key, scroll). The request is rendered in a real browser and runs once.
Response
Success — body is HTML (Markdown with markdown=true, JSON with parsed_data=true / get_cookies=true). With parsed_data=true a page that rendered but yielded no structured data is still a 200: data.data is empty, data_extracted is false and html carries the rendered page. Also a dead-origin 5xx page, as served (can be empty): then the X-Origin-Status header carries the target's status. The same for the target's own 401, 451 or empty 500, confirmed from more than one exit. A target that answers 204 (or another 2xx with no body) comes back as an empty 200. Billed.

