Tool: DataDome Bypass and Website Unblocker
Pricing
from $0.04 / page unblocked
Tool: DataDome Bypass and Website Unblocker
Return the real HTML from DataDome protected and geo restricted sites. Get past the device check and block screens. Pay a small fee per request and more only on success. Optional AI converts the page into structured JSON.
Pricing
from $0.04 / page unblocked
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
6 days ago
Last modified
Categories
Share
Tool: DataDome Bypass and Website Unblocker
Here is one real result, with every field the actor returns (html trimmed for length; all other values are exactly as returned):
{"url": "https://www.scrapingcourse.com/","finalUrl": "https://www.scrapingcourse.com/","success": true,"statusCode": 200,"protectionDetected": "cloudflare","pageTitle": "Learn Web Scraping with Challenges & Test Sites - ScrapingCourse.com","contentLength": 8719,"html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> ...[trimmed to 8719 chars total]","json": null,"generatedSchema": null,"attempts": 1,"errorReason": null,"source": "www.scrapingcourse.com","observedAt": "2026-08-15T03:55:12.880Z"}
A website unblocker for pages fronted by DataDome and other common protections. It fetches each URL you pass, detects the protection in front of it, returns the unblocked HTML (or a structured JSON extraction), and reports exactly what happened per URL so you always know whether the page cleared. It gives you method, headers, country, JavaScript rendering and AI extraction controls to fetch exactly the pages you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor fetches each URL you pass, routing the request through a residential-proxy and challenge-solving pipeline, and writes one record per URL to the run's dataset. It detects the protection in front of the page (protectionDetected), returns the fetched HTML with its status code and title, and sets a clear success flag so you can tell cleared pages from blocked ones. You can send custom headers, use POST with a body, render JavaScript for single-page apps, choose a target country for geo-specific content, and optionally convert the unblocked page to structured JSON with AI.
Honest scope: the unblocker clears Cloudflare and AWS-WAF style challenges. It does not clear interactive human-verification challenges (CAPTCHA), and pages behind those are returned with success: false and an errorReason explaining why. You are never charged for a page that did not clear.
Quickstart
Open the actor, paste this into the input, and press Run. It fetches a Cloudflare-fronted test page.
{"urls": ["https://www.scrapingcourse.com/cloudflare-challenge"],"httpMethod": "GET","renderJavaScript": false,"country": "auto","maxUrls": 25}
Add more URLs to process many in one run. Turn on renderJavaScript for single-page apps. Default maxUrls is 25.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
urls | string[] | no | ["https://www.scrapingcourse.com/cloudflare-challenge"] | One or more page URLs to fetch. One run can process many URLs. |
httpMethod | enum | no | GET | Request method for every URL: GET or POST. |
headers | object | no | (none) | Extra request headers to send with every URL, as key/value pairs. |
payload | string | no | (empty) | Request body to send when httpMethod is POST (JSON or form-encoded). |
renderJavaScript | boolean | no | false | Turn on for JavaScript-heavy pages and single-page apps. Off is faster for normal HTML. |
country | enum | no | auto | Country to view the page from, for geo-specific content. auto picks the best match per URL. Supports US, GB, CA, AU, DE, FR, ES, IT, NL, BR, MX, AR, CL, CO, PE, JP, KR, IN, SG, HK, AE, ZA. |
waitForMs | integer | no | (none) | Extra settle time in milliseconds for JavaScript pages before the HTML is captured (max 30000). |
maxUrls | integer | no | 25 | Maximum number of URLs to process in this run. |
extractToJson | boolean | no | false | Add-on. Convert the unblocked page to structured JSON with AI. Billed separately and only for pages that were successfully unblocked. |
jsonSchema | object | no | (none) | Optional JSON schema for the AI extraction to follow. Leave empty and the AI infers the structure and returns it in generatedSchema. Only used when extractToJson is on. |
Output reference
One dataset item per URL. Types: string, integer, boolean, object, or null when the value is absent.
| Field | Type | Description |
|---|---|---|
url | string | The URL you requested. |
finalUrl | string | The final URL after any redirects. |
success | boolean | true when the page was unblocked and returned, false when it could not be cleared. |
statusCode | integer | HTTP status code of the fetched page. |
protectionDetected | string | Protection detected in front of the page, for example cloudflare, none. |
pageTitle | string | The page <title>, else null. |
contentLength | integer | Length of the returned HTML in characters. |
html | string | The unblocked page HTML. null when the page did not clear. |
json | object | AI-structured extraction of the page. null unless extractToJson is enabled and succeeded. |
generatedSchema | object | The JSON schema the AI used, when extractToJson inferred one. Else null. |
attempts | integer | Number of fetch attempts made for this URL. |
errorReason | string | Why a page did not clear, or null on success. |
source | string | Host of the requested URL. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
Example output record
Real record from a live run (input {"urls":["https://www.scrapingcourse.com/"],"maxUrls":2}), with html trimmed for length:
{"url": "https://www.scrapingcourse.com/","finalUrl": "https://www.scrapingcourse.com/","success": true,"statusCode": 200,"protectionDetected": "cloudflare","pageTitle": "Learn Web Scraping with Challenges & Test Sites - ScrapingCourse.com","contentLength": 8719,"html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\"> ...[trimmed]","json": null,"generatedSchema": null,"attempts": 1,"errorReason": null,"source": "www.scrapingcourse.com","observedAt": "2026-08-15T03:55:12.880Z"}
A page behind an interactive CAPTCHA returns success: false, html: null, and a populated errorReason, and is not charged.
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~datadome-bypass-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"urls":["https://www.scrapingcourse.com/"],"renderJavaScript":false,"country":"US"}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~datadome-bypass-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"urls":["https://example.com/a","https://example.com/b"],"extractToJson":true,"maxUrls":50}'
Apify CLI:
apify call scrapers_lat/datadome-bypass-scraper \--input '{"urls":["https://www.scrapingcourse.com/cloudflare-challenge"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per unblocked page. You are charged only when the real page HTML is returned. Most protections (Cloudflare, AWS-WAF and similar) are billed as a standard
page-unblockedevent. See the pricing tab for current prices. - Premium unblock. The most demanding protections, such as DataDome and Akamai, are cleared through a premium last-resort retrieval path and billed as a separate
premium-unblockevent. It is charged instead of the standard unblock fee (never both for the same page) and only when the page is actually returned. - Page request. A small
page-requestedfee is charged once per URL for each retrieval attempt, whether or not the page is returned. - No charge on failure. A page that could not be cleared is returned with
success: falseand anerrorReason, and is not charged any unblock fee (only the small page request fee applies). - AI extraction add-on.
extractToJsonis billed as a separate event and only for pages that were successfully unblocked. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 URLs per run. Upgrade for higher
maxUrls.
FAQ and troubleshooting
Which protections can it clear?
DataDome, Cloudflare, AWS-WAF, Akamai and similar bot-protection and device-check screens. It does not clear interactive human-verification challenges (reCAPTCHA, hCaptcha), login walls, or similar. Pages behind those return success: false with an explanation.
How do I know if a page cleared?
Check success. When true, html and statusCode are populated. When false, html is null and errorReason explains why, and you are not charged.
The page is a single-page app and came back empty. What do I do?
Turn on renderJavaScript and optionally set waitForMs to give the app time to render before the HTML is captured.
Can I get structured data instead of raw HTML?
Yes. Turn on extractToJson. Provide a jsonSchema to control the shape, or leave it empty and the AI infers one and returns it in generatedSchema.
Can I target a specific country?
Yes. Set country to any supported code, or leave it on auto to match each site automatically.
Is bypassing a site legal? This tool fetches publicly reachable pages on your behalf. You are responsible for complying with each site's terms of service and applicable law. Do not use it to access private, paywalled, or login-gated content you are not authorized to view.
Related scrapers
- Cloudflare Bypass Scraper: fetch and unblock Cloudflare-protected pages.
- Akamai Bypass Scraper: fetch and unblock Akamai-protected pages.
- Gen5 Website Unblocker: general-purpose website unblocker and fetcher.
- Website Contacts Scraper: emails, phones and socials from any website.
- Website Tech Stack Scraper: detect the technologies a site runs on.
- Text to JSON Tool: convert any text or HTML into structured JSON.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool. Fetches only publicly reachable pages on your behalf. You are responsible for complying with each site's terms of service and applicable law.



