Tool: Website Unblocker (Cloudflare, DataDome, Akamai)
Pricing
from $0.04 / page unblocked
Tool: Website Unblocker (Cloudflare, DataDome, Akamai)
Fetch the real HTML of any web page, including sites protected by Cloudflare, DataDome, Akamai, AWS WAF, PerimeterX or Incapsula, and geo restricted content. Pay a small fee per request and more only on a successful unblock. Optional AI turns the page into structured JSON.
Pricing
from $0.04 / page unblocked
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
6 days ago
Last modified
Categories
Share
Tool: Website Unblocker (Cloudflare, DataDome, Akamai)
Here is one real result, with every field the actor returns (the html field holds the full page source and is trimmed here for readability):
{"url": "https://www.scrapingcourse.com/cloudflare-challenge","finalUrl": "https://www.scrapingcourse.com/cloudflare-challenge","success": true,"statusCode": 200,"protectionDetected": "cloudflare","pageTitle": "Cloudflare Challenge - ScrapingCourse.com","contentLength": 3854,"html": "<!DOCTYPE html><html lang=\"en\"><head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, ... [full page HTML returned in the actual record]","json": null,"generatedSchema": null,"attempts": 6,"errorReason": null,"source": "www.scrapingcourse.com","observedAt": "2026-08-10T14:33:57.577Z"}
The most capable website unblocker available. It returns the real HTML of any page, including sites behind Cloudflare, AWS WAF and other challenge screens, reports which protection it detected, and gives you per-URL controls (HTTP method, headers, POST body, JavaScript rendering, target country) plus an optional AI step that turns the unblocked page into structured JSON.
📥 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, escalating through a ladder of techniques to get past bot protection and challenge screens, and writes one record per URL to the run's dataset with the final HTML, the HTTP status, the detected protection vendor and the page title. It supports GET or POST with custom headers and body, optional JavaScript rendering for single-page apps, and a chosen target country for geo-specific content. When extractToJson is on, the unblocked HTML is converted to structured JSON with AI, following your schema if you provide one.
It is designed to clear common challenge screens such as Cloudflare and AWS WAF. Some protections (for example hard captcha walls or login walls) cannot always be cleared; on those URLs success is false and errorReason explains why. You are only charged the premium unblock fee when a page is actually returned.
Quickstart
Open the actor, paste this into the input, and press Run. It fetches one Cloudflare-protected test page.
{"urls": ["https://www.scrapingcourse.com/cloudflare-challenge"],"httpMethod": "GET","renderJavaScript": false,"country": "auto","maxUrls": 25,"extractToJson": false}
Pass many URLs in urls to process them in one run. Every input field except urls is optional.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
urls | string[] | yes | (example URL) | 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 sent with every URL, as key/value pairs. |
payload | string | no | (none) | Request body to send when httpMethod is POST. |
renderJavaScript | boolean | no | false | Render JavaScript for SPA/heavy pages. 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. |
waitForMs | integer | no | (none) | Extra settle time in ms for JavaScript pages before HTML is captured (0 to 30000). |
maxUrls | integer | no | 25 | Maximum URLs to process in this run. |
extractToJson | boolean | no | false | Paid add-on. Convert each unblocked page to structured JSON with AI. Billed only for pages that were unblocked. |
jsonSchema | object | no | (none) | JSON schema for the AI extraction to follow. Empty lets the AI infer the structure and return 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 requested URL. |
finalUrl | string | The URL after any redirects. |
success | boolean | true when the real page HTML was returned. |
statusCode | integer | Final HTTP status code, or null. |
protectionDetected | string | Detected protection vendor (for example cloudflare, none). |
pageTitle | string | Title of the unblocked page, or null on failure. |
contentLength | integer | Length of the returned HTML in characters. |
html | string | Full page HTML on success, else null. |
json | object | AI-extracted structured JSON when extractToJson succeeded, else null. |
generatedSchema | object | Schema the AI used when none was supplied, else null. |
attempts | integer | Number of attempts made to unblock the URL. |
errorReason | string | null on success; on failure, why the page could not be retrieved. |
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/cloudflare-challenge"]}). The html field is trimmed here with an explicit note; all values are real:
{"url": "https://www.scrapingcourse.com/cloudflare-challenge","finalUrl": "https://www.scrapingcourse.com/cloudflare-challenge","success": true,"statusCode": 200,"protectionDetected": "cloudflare","pageTitle": "Cloudflare Challenge - ScrapingCourse.com","contentLength": 3854,"html": "[full page HTML returned in the actual record]","json": null,"generatedSchema": null,"attempts": 6,"errorReason": null,"source": "www.scrapingcourse.com","observedAt": "2026-08-10T14:33:57.577Z"}
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~gen5-website-unblocker/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"urls":["https://www.scrapingcourse.com/cloudflare-challenge"]}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~gen5-website-unblocker/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"urls":["https://example.com/a","https://example.com/b"],"renderJavaScript":true,"country":"US"}'
Apify CLI:
apify call scrapers_lat/gen5-website-unblocker \--input '{"urls":["https://www.scrapingcourse.com/cloudflare-challenge"],"extractToJson":true}'
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 request, more per unblock. Each URL is charged a small
page-requestedfee whether or not it is unblocked. Thepage-unblockedfee is charged only when the real page HTML is returned. See the pricing tab for current prices. - Premium unblock. The hardest sites can only be reached through a heavier, last-resort retrieval path. When a page is returned that way, it is charged
premium-unblockinstead ofpage-unblocked(never both for the same page). This fee is higher because those pages cost more to return. Most URLs never trigger it, and it is only ever charged on a successful unblock. - Optional AI extraction.
ai-json-requestedis charged when the AI add-on runs on an unblocked page;ai-json-deliveredis charged only when it returns valid structured JSON. - No unblock charge on failure. If a page cannot be unblocked,
successisfalseand neither thepage-unblockednor thepremium-unblockfee is charged. You pay only the smallpage-requestedfee for the attempt. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops fetching, charging and emitting further URLs. - Free Apify plans are capped at 10 URLs per run. Upgrade for higher
maxUrls.
FAQ and troubleshooting
A URL came back with success: false. Why?
Not every protection can be cleared. Hard captcha walls, some enterprise anti-bot vendors and login walls may block the page; errorReason and protectionDetected explain what happened. You are not charged the premium unblock fee for those URLs.
Which protections does it handle? It is designed to clear common challenge screens such as Cloudflare and AWS WAF. Others are attempted, and you only pay the premium fee on a real unblock, so failed attempts do not cost the unblock price.
How do I fetch JavaScript-heavy pages?
Turn on renderJavaScript, and add waitForMs if the content needs extra settle time.
Can I send POST requests or custom headers?
Yes. Set httpMethod to POST with a payload, and pass any extra headers as key/value pairs.
How do I get structured data instead of raw HTML?
Turn on extractToJson. Provide a jsonSchema to control the shape, or leave it empty and the AI returns the schema it used in generatedSchema.
Is this legal to use? Use it only on pages you are permitted to access, and in accordance with each site's terms of service and applicable law. This tool accesses publicly reachable pages on your behalf.
Related scrapers
- Cloudflare Bypass Scraper: Fetch pages behind Cloudflare challenges.
- DataDome Bypass Scraper: Fetch pages behind DataDome protection.
- Akamai Bypass Scraper: Fetch pages behind Akamai protection.
- Document OCR to JSON Tool: Turn documents into structured JSON.
- Company Research Enrichment Tool: Enrich companies from a domain.
- Contact Enrichment Tool: Enrich contacts from a domain or name.
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 for accessing publicly reachable web pages on your behalf. Use in accordance with each site's terms of service and applicable law.



