# Tool: Website Unblocker (Cloudflare, DataDome, Akamai) (`scrapers_lat/gen5-website-unblocker`) Actor

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.

- **URL**: https://apify.com/scrapers\_lat/gen5-website-unblocker.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.04 / page unblocked

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Tool: Website Unblocker and Anti-Bot Bypass (Cloudflare, DataDome, Akamai)

> A universal web unblocker and anti-bot bypass. Paste any URL from anywhere in the world and get the real page HTML back, even when the site sits behind Cloudflare, DataDome, Akamai Bot Manager, AWS WAF, PerimeterX or Incapsula, or when the content is geo restricted or region locked. Optional AI turns the page into structured JSON.

**📥 [Input](https://apify.com/scrapers_lat/gen5-website-unblocker/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/gen5-website-unblocker/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/gen5-website-unblocker/pricing)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Unblocker](https://img.shields.io/badge/Data-Real%20page%20HTML-blue)
![Coverage](https://img.shields.io/badge/Coverage-Worldwide-blue)
![Output](https://img.shields.io/badge/Output-HTML%20%7C%20JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>Real page HTML</strong><br>protection cleared</td>
<td align="center"><strong>Anti-bot bypass</strong><br>Cloudflare · DataDome · Akamai · AWS WAF</td>
<td align="center"><strong>Geo aware</strong><br>region locked content</td>
<td align="center"><strong>Optional AI to JSON</strong><br>structured output</td>
</tr></table>

<br>

This is the flagship web unblocker: one scraping API endpoint that detects whatever protection a page uses and returns the real HTML. Use it as the universal fallback when a normal request returns a challenge page, a 403, or an empty body. It works on public pages worldwide and can target a specific country so you see the content a local visitor would see.

### What you get

For every URL you pass, one clean record with:

- **success**: whether the real page was returned
- **html**: the full unblocked page HTML
- **protectionDetected**: the anti-bot system the site uses (`cloudflare`, `datadome`, `akamai`, `aws-waf`, `perimeterx`, `incapsula` or `none`)
- **statusCode**: the final HTTP status
- **finalUrl**: the URL after any redirects
- **pageTitle**: the page title
- **contentLength**: size of the returned HTML
- **attempts**: how many tries it took
- **errorReason**: a plain-language reason when a page cannot be unblocked
- **json**: structured data, when the AI extraction add-on is enabled
- **generatedSchema**: the schema the AI used, when you do not supply your own
- **observedAt**: when the page was fetched

One run can process many URLs at once, with GET or POST, custom headers, a target country for geo specific content, and an optional JavaScript render mode for single-page apps.

### How pricing works

You pay a small fee per request, charged once for every URL whether it succeeds or fails. You pay a higher fee only when the page is successfully unblocked and real HTML comes back. Pages that cannot be cleared are only charged the small request fee, never the unblock fee. The optional AI extraction add-on is billed separately and only when you turn it on. See the [pricing page](https://apify.com/scrapers_lat/gen5-website-unblocker/pricing) for exact amounts.

### Optional AI to JSON add-on

Off by default. Turn on **Extract to JSON with AI** to convert the unblocked HTML into structured JSON. Pass your own **jsonSchema** to get an exact shape, or leave it empty and the AI infers the main entities, returns clean JSON, and hands back the schema it used in **generatedSchema**. The add-on is billed separately and only fires when enabled, so plain HTML fetches are never charged for AI.

### Supported protections

- **Cloudflare** (Just a Moment, Turnstile, 403 and 1020 challenge pages)
- **DataDome** (device check and block screens)
- **Akamai Bot Manager** (Access Denied bot walls)
- **AWS WAF**
- **PerimeterX / HUMAN**
- **Incapsula / Imperva**

The **protectionDetected** field always tells you which one the site was using.

### Use cases

| Use case | Who benefits |
|---|---|
| Reliable page fetching behind bot protection | Developers who need the real HTML, not a challenge page |
| One fallback for a whole scraping pipeline | Teams whose scrapers keep getting blocked on some domains |
| Reading region locked or geo restricted pages | Analysts checking prices or listings as a local visitor sees them |
| Feeding clean HTML or JSON to AI agents | Apps that need ready-to-use content from any public page |
| Bulk collection of public pages at scale | Researchers gathering pages across many sites |

### Frequently Asked Questions

**Which sites and protections does it work on?**
It works on public web pages worldwide and handles the common anti-bot systems: Cloudflare, DataDome, Akamai Bot Manager, AWS WAF, PerimeterX and Incapsula. The `protectionDetected` field reports what each site was using. Pages guarded by an interactive human-verification puzzle (for example a reCAPTCHA or hCaptcha you have to click through) cannot be cleared automatically.

**Can it read geo restricted or region locked content?**
Yes. Set a target country and the tool retrieves the page as a visitor from that region would see it, which is useful for prices, catalogs and listings that change by location.

**What happens if a page cannot be unblocked?**
The record has `success: false` with a plain-language `errorReason`, and you are only charged the small per-request fee, never the unblock fee.

**Can I get JSON instead of raw HTML?**
Yes. Turn on the AI extraction add-on. Provide your own JSON schema for an exact shape, or leave it empty and the AI infers the structure and returns the schema it used in `generatedSchema`.

**Do I need to configure anything special?**
No. Just pass URLs. Everything needed to retrieve the page is handled for you, and you can optionally set an HTTP method, headers, a POST body, a target country, or JavaScript rendering for app-like pages.

### Related tools

Prefer a variant tuned for one anti-bot system? Same engine, marketed per protection:

- [Tool: Cloudflare Bypass and Website Unblocker](https://apify.com/scrapers_lat/cloudflare-bypass-scraper): unblock Cloudflare protected pages
- [Tool: DataDome Bypass and Website Unblocker](https://apify.com/scrapers_lat/datadome-bypass-scraper): unblock DataDome protected pages
- [Tool: Akamai Bypass and Bot Manager Unblocker](https://apify.com/scrapers_lat/akamai-bypass-scraper): unblock Akamai Bot Manager protected pages

### More scrapers at scrapers.lat

This tool is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for public platforms: finance, news, real estate, jobs, e-commerce and government data. Browse the full catalog or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> This tool fetches publicly available web pages. Use the results in accordance with the source website's terms and applicable law.

# Actor input Schema

## `urls` (type: `array`):

One or more page URLs to fetch. One run can process many URLs. You can also paste a single URL.

## `httpMethod` (type: `string`):

The request method to use for every URL.

## `headers` (type: `object`):

Optional. Extra request headers to send with every URL, as key/value pairs (for example an Accept-Language or a custom header).

## `payload` (type: `string`):

Optional. The request body to send when HTTP method is POST (for example JSON or form-encoded data).

## `renderJavaScript` (type: `boolean`):

Turn on for JavaScript-heavy pages and single-page apps whose content is built in the browser. Off is faster for normal HTML pages.

## `country` (type: `string`):

Country to view the page from, for geo-specific content. Leave on Auto to pick the best match for each URL automatically.

## `waitForMs` (type: `integer`):

Optional. Extra settle time in milliseconds for JavaScript pages before the HTML is captured.

## `maxUrls` (type: `integer`):

Maximum number of URLs to process in this run.

## `extractToJson` (type: `boolean`):

Optional add-on. When on, the unblocked page is converted to structured JSON with AI. Billed separately and only for pages that were successfully unblocked.

## `jsonSchema` (type: `object`):

Optional. A JSON schema for the AI extraction to follow exactly. Leave empty and the AI infers the structure and returns the schema it used in generatedSchema. Only used when Extract to JSON is on.

## Actor input object example

```json
{
  "urls": [
    "https://www.scrapingcourse.com/cloudflare-challenge"
  ],
  "httpMethod": "GET",
  "renderJavaScript": false,
  "country": "auto",
  "maxUrls": 25,
  "extractToJson": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.scrapingcourse.com/cloudflare-challenge"
    ],
    "maxUrls": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/gen5-website-unblocker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.scrapingcourse.com/cloudflare-challenge"],
    "maxUrls": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/gen5-website-unblocker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.scrapingcourse.com/cloudflare-challenge"
  ],
  "maxUrls": 25
}' |
apify call scrapers_lat/gen5-website-unblocker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapers_lat/gen5-website-unblocker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/amWl74PVXwcCZZxB2/builds/zJydhT6ffJqDnrhAW/openapi.json
