Skip to main content
The official Python client wraps the ScrapeUnblocker API in a small, fully typed package - sync and async, with typed errors and automatic retries.
Requires Python 3.8+. The only dependency is httpx.
Prefer no dependencies? The API is plain HTTP, so you can skip the package and call it with requests / httpx directly - see Raw HTTP at the bottom.
Store your API key in an environment variable so the client picks it up automatically:

Quickstart

Get parsed JSON instead of HTML

The killer feature: get_parsed() returns structured data extracted using Schema.org, __NEXT_DATA__, or AI-generated rules - no per-site parsers to maintain.
If a parse ever comes back wrong, force a fresh set of rules:
When the page loads but nothing can be extracted from it, get_parsed() does not raise: it returns a result with page type unknown and empty data, together with the rendered HTML (the API’s data_extracted: false and html fields). The call is billed like a page-source call. See when nothing can be extracted. See the parsed data guide for response shapes.

Scrape a Google SERP

Force a country

proxy_country works on every method.

Capture cookies and the proxy used

Fetch an image

Drive the browser with steps

Pass a native list of actions to run in a real browser after the page loads. You get back the HTML of the resulting state.
Discover the selectors first with list_elements(), which returns the page’s interactive elements as parsed JSON:
Each element’s selector drops straight into a steps action. Full action reference in the browser steps guide.

Amazon

Product and search data as JSON, priced in the marketplace’s own currency:
proxy_country defaults to the marketplace’s home country (amazon.com -> US, amazon.de -> DE), so prices come back in the right currency with no configuration. Full field list on the Amazon plugin page. Listings from any of the 19 regional eBay marketplaces as JSON:
exactMatches is False when eBay found nothing for the keyword and answered with its own loosely-related suggestions instead. Full field list on the eBay Search plugin page.

Skyscanner plugins

Flights, hotels and car hire as JSON. Resolve a place name to entity IDs, then search:

Every other plugin

The SDK has a method for every plugin (0.10.0 and later) - the plugin’s main input goes in positionally, everything else as keyword options, and options you leave out are not sent, so the API’s defaults apply. Each plugin page shows its method next to cURL.

Async

Every method has an async twin on AsyncClient. For high-throughput crawls, cap concurrency to your plan’s limit with a semaphore.

Error handling

Non-2xx responses raise typed exceptions, all subclasses of ScrapeUnblockerError. Transient failures (429, 502, 503, 504 and network errors) are retried automatically with exponential backoff.
The 402 and 404-422 exceptions were added in 0.1.6; before that they arrived as a bare APIError. Nothing was removed, so except APIError handlers written against earlier versions keep working. See all status codes in Errors.
Tune the retry count and timeout on the client:
See handling failures for what each status code means.

Raw HTTP (without the package)

The API is plain HTTP, so you can call it with requests or httpx directly - no SDK required.
The endpoints are getPageSource, serpApi, and getImage; every parameter shown above maps to a query parameter of the same name.