Protected Website Scraper avatar

Protected Website Scraper

Pricing

Pay per usage

Go to Apify Store
Protected Website Scraper

Protected Website Scraper

Get the HTML or structured data of pages behind Cloudflare, DataDome, Akamai, PerimeterX and Kasada. Runs through the StealthASF API with your own key; blocked requests are not charged.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Žygimantas Vičkačka

Žygimantas Vičkačka

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Categories

Share

Protected Website Scraper (Cloudflare, DataDome, Akamai, PerimeterX, Kasada)

Give it a list of URLs and get back the page HTML or clean structured data, including from sites behind Cloudflare, DataDome, Akamai, PerimeterX and Kasada. Each URL becomes one row in the dataset, with the site's HTTP status, the engine that fetched it, and the credits it cost.

The Actor runs your requests through the StealthASF scraping API. You do not need an Apify proxy, browser settings or captcha setup. Blocked requests are not charged.

Tested on real protected sites

On 2026-10-08 our production tests returned real pages for:

ProtectionSites
PerimeterXZillow, Walmart, StockX
AkamaiNike, Lowe's, Home Depot
DataDomeTripadvisor, Allegro
CloudflareGlassdoor, WhoScored
KasadaHyatt, realestate.com.au

What you need

A StealthASF API key. Sign up at stealthasf.com: you get 200 free credits, no card needed. Copy your key from the dashboard and paste it into the StealthASF API key field. The key is stored encrypted by Apify.

How to use it

  1. Paste your API key.
  2. Add the URLs you want, one per line, or upload a text file with one URL per line.
  3. Leave Engine on Auto unless you know the site needs a specific mode.
  4. Pick an Extract option if you want structured data instead of raw HTML.
  5. Start the run and download the results as JSON, CSV, Excel or HTML from the Output tab.

Engines

EngineWhat it doesBase credits
auto (default)Starts with a plain request and steps up to protected mode only when the site blocks it. Remembers sites that needed protected mode. You pay only for the engine that succeeded.depends on the result
httpPlain HTTP request1
browserRenders JavaScript5
stealthProtected request for anti-bot sites25
ultraOur strongest mode, for the hardest protected sites50

Use browser when a page loads its content with JavaScript and auto returns an empty page shell.

Extract options

ValueReturns in data
noneNothing extra; use includeHtml to get the page
linksEvery link with its text
textClean readable page text
metaTitle, description and Open Graph tags
imagesImage URLs with alt text
headingsH1 to H3 outline
tableThe first data table on the page

Input example

{
"apiKey": "YOUR_STEALTHASF_API_KEY",
"urls": [
{ "url": "https://www.example.com/" },
{ "url": "https://www.example.com/products" }
],
"engine": "auto",
"extract": "meta",
"includeHtml": false,
"maxConcurrency": 3
}
FieldTypeDefaultNotes
apiKeystringrequiredYour StealthASF API key
urlsarrayrequiredURLs, or a link to a text file with one URL per line
enginestringautoauto, http, browser, stealth, ultra
extractstringnonenone, links, text, meta, images, headings, table
countrystringemptyTwo-letter country code such as US or de. Pro and Scale plans
includeHtmlbooleanfalseStore the full HTML in each row
maxConcurrencyinteger31 to 20 URLs at a time

Output example

One dataset item per URL:

{
"url": "https://www.example.com/",
"ok": true,
"status": 200,
"engine": "http",
"creditsCharged": 1,
"jobId": "cm2x8k1q40001",
"data": {
"kind": "table",
"columns": ["field", "value"],
"rows": [["title", "Example Domain"]]
},
"error": null
}
FieldMeaning
urlThe URL you asked for
oktrue when the page was fetched
statusThe site's own HTTP status (for example 200 or 404)
engineThe engine that produced the result
creditsChargedCredits this URL cost; 0 when it was blocked or rejected
jobIdThe job ID, also visible in your StealthASF dashboard
dataStructured result when extract is set
htmlFull page HTML, only when includeHtml is on
errorWhat went wrong, when ok is false

A page the site blocked looks like this and costs nothing:

{
"url": "https://www.example.com/",
"ok": false,
"status": null,
"engine": null,
"creditsCharged": 0,
"jobId": "cm2x8k1q40002",
"data": null,
"error": "HTTP 422: blocked by the target's anti-bot protection (not charged)"
}

At the end of the run the log and the run status show a summary: pages fetched, pages blocked, credits used and the balance left on your account.

Credits and pricing

Credits come from your StealthASF account. Apify bills only its normal platform usage for the run, which stays low because the Actor only sends API requests and waits for the answers.

WhatCredits
HTTP request1 (+1 per 2 MB of response)
Browser request5
Stealth request25
Ultra request50
Transfer beyond the first MB (browser, stealth, ultra)+10 per MB
Blocked request0

Every row shows the exact creditsCharged, so you always see what each page cost.

Plans start at $17/month, and one-time credit packs start at $12. See stealthasf.com for all plans.

Good to know

  • Out of credits: the run stops with a clear message and keeps every row already saved. Top up and run again.
  • Invalid API key: the run stops at the first rejected request instead of repeating the same error for every URL.
  • Concurrency: each StealthASF plan has its own limit of parallel requests. If maxConcurrency is higher, the Actor lowers it to your plan's limit automatically and retries. Requests over the limit are never charged.
  • Rate limits: when the API asks the Actor to slow down, it waits and retries up to 3 times.
  • Large pages: a page bigger than the Apify dataset item limit keeps its row and data, but html is left out. Use an extract option for those pages.

Use it from code

The Actor works with the Apify API, scheduler, webhooks and integrations like any other Actor. If you would rather call the scraping API directly from your own code, the same features are available at stealthasf.com.