Tool: Website Unblocker (Cloudflare, DataDome, Akamai) avatar

Tool: Website Unblocker (Cloudflare, DataDome, Akamai)

Pricing

from $0.04 / page unblocked

Go to Apify Store
Tool: Website Unblocker (Cloudflare, DataDome, Akamai)

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

6 days ago

Last modified

Share

Tool: Website Unblocker (Cloudflare, DataDome, Akamai)

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
urlsstring[]yes(example URL)One or more page URLs to fetch. One run can process many URLs.
httpMethodenumnoGETRequest method for every URL: GET or POST.
headersobjectno(none)Extra request headers sent with every URL, as key/value pairs.
payloadstringno(none)Request body to send when httpMethod is POST.
renderJavaScriptbooleannofalseRender JavaScript for SPA/heavy pages. Off is faster for normal HTML.
countryenumnoautoCountry to view the page from for geo-specific content. auto picks the best match per URL.
waitForMsintegerno(none)Extra settle time in ms for JavaScript pages before HTML is captured (0 to 30000).
maxUrlsintegerno25Maximum URLs to process in this run.
extractToJsonbooleannofalsePaid add-on. Convert each unblocked page to structured JSON with AI. Billed only for pages that were unblocked.
jsonSchemaobjectno(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.

FieldTypeDescription
urlstringThe requested URL.
finalUrlstringThe URL after any redirects.
successbooleantrue when the real page HTML was returned.
statusCodeintegerFinal HTTP status code, or null.
protectionDetectedstringDetected protection vendor (for example cloudflare, none).
pageTitlestringTitle of the unblocked page, or null on failure.
contentLengthintegerLength of the returned HTML in characters.
htmlstringFull page HTML on success, else null.
jsonobjectAI-extracted structured JSON when extractToJson succeeded, else null.
generatedSchemaobjectSchema the AI used when none was supplied, else null.
attemptsintegerNumber of attempts made to unblock the URL.
errorReasonstringnull on success; on failure, why the page could not be retrieved.
sourcestringHost of the requested URL.
observedAtstringISO 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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-requested fee whether or not it is unblocked. The page-unblocked fee 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-unblock instead of page-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-requested is charged when the AI add-on runs on an unblocked page; ai-json-delivered is charged only when it returns valid structured JSON.
  • No unblock charge on failure. If a page cannot be unblocked, success is false and neither the page-unblocked nor the premium-unblock fee is charged. You pay only the small page-requested fee for the attempt.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.