Stealth Web Scraper
Pricing
from $3.50 / 1,000 successful pages
Stealth Web Scraper
Get rendered HTML, plain text, and extracted fields from Cloudflare-protected and JavaScript-heavy pages without building your own browser-and-proxy stack.
Pricing
from $3.50 / 1,000 successful pages
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
0
Bookmarked
52
Total users
32
Monthly active users
8 days ago
Last modified
Categories
Share
Scrape websites that block other scrapers. Get the full page content from Cloudflare-protected, anti-bot, and JavaScript-heavy sites — no browser setup, no proxy config, no code required.
Works on sites like Clutch, G2, Capterra, Trustpilot, Cloudflare-protected storefronts, and many more that return "access denied" to standard scrapers.
What you can do with it
1. Monitor competitor pricing on protected shops
In plain English: give the Actor a list of product page URLs → get back a clean table with product name, price, and stock status, ready to drop into Excel or an alert system.
You give:
| Field | What to enter |
|---|---|
| URLs | List of competitor product page links (one per row) |
| Fields | productName, price, availability |
You get back (table you can download as Excel / CSV / JSON):
| Product Name | Price | Availability |
|---|---|---|
| Example Product | $49.00 | In stock |
| Another Product | $29.00 | Out of stock |
| ... | ... | ... |
2. Pull company listings from directories (Clutch, G2, Capterra)
In plain English: point the Actor at a directory category page → get a list of provider cards with company names, locations, ratings, and review counts.
You give:
| Field | What to enter |
|---|---|
| URLs | Category page URLs (e.g. Clutch digital marketing) |
| Wait for | [data-testid='provider-card'] (optional) |
You get back (one row per provider):
| Company | Location | Rating | Reviews | Category |
|---|---|---|---|---|
| Agency One | New York | 4.9 | 42 | Digital Marketing |
| Agency Two | Los Angeles | 4.7 | 31 | Digital Marketing |
3. Extract reviews from Trustpilot / G2 / Capterra
In plain English: provide the review page URL → get a clean list of reviews you can feed into sentiment analysis or a spreadsheet.
You get back:
| Reviewer | Rating | Date | Review |
|---|---|---|---|
| John D. | 5 | 2026-03-15 | Great product, fast shipping... |
| Sarah K. | 2 | 2026-02-28 | Had issues with the packaging... |
4. Feed AI agents with rendered page content
In plain English: your AI agent needs the actual visible content of a page (not a 403 page) → pass the URL, get back readable plain text and HTML. Works natively with LangChain, Make, n8n, and Zapier.
Plug the Actor output straight into:
- Your prompt as context
- A vector database for RAG
- A custom summarization pipeline
5. Watch for content changes
In plain English: run the same URLs on a schedule (daily / weekly) → Actor returns a timestamp and quality signal for each page, so you can diff changes over time.
Useful for tracking:
- Competitor landing page updates
- Pricing page changes
- Legal / Terms of Service updates
- Product launch announcements
How to use (no code required)
- Click "Try for Free" at the top of this page
- Paste your list of URLs (one per line)
- (Optional) Add CSS selectors if you want specific fields like
priceortitle - (Optional) Set
waitForSelectorif the page has content that loads dynamically - Click Start — results appear in the Dataset tab within seconds
Download your results as CSV, Excel, or JSON. That's it.
From May 21, 2026, the free $5 monthly Apify credit gets you around 2,400 successful pages in practice, depending on how many separate runs you use.
What you get back
Every successfully scraped page returns:
- Page title — the
<title>of the page - Text content — clean plain text, ready for analysis
- HTML — full rendered HTML (if you need it)
- Extracted fields — whatever you asked for with CSS selectors
- Quality signal —
full,partial,minimal, orblocked, so you know what you got - Timestamp — when the page was scraped
Two separate datasets:
- ✅ Successful pages go to the main dataset (and count toward billing)
- ❌ Failed or blocked pages go to a
failuresdataset and are not billed as successful pages
You always know exactly what you paid for.
Pricing
Pay only for successful pages written to the default dataset. Blocked pages, failed pages, and pages where your required wait selector never appears go to the failures dataset and are not billed as successful pages.
Scheduled pricing from May 21, 2026:
| What triggers a charge | Price |
|---|---|
| Actor start | $0.005 per run |
| Successful page | $0.002 per page |
| Volume | Estimated cost |
|---|---|
| 100 successful pages | ~$0.205 |
| 1,000 successful pages | ~$2.005 |
| 10,000 successful pages | ~$20.005 |
How this compares:
- Building your own stealth scraper: 20+ hours of dev work, ongoing maintenance
- Bright Data / Zyte scraping API: $500+/month subscription
- This Actor: pay only when you scrape, no subscription
Example: Scrape 500 competitor product pages once a week = about $4.02/month. Scrape 50 Clutch pages once = about $0.105.
From May 21, 2026, the $5 free monthly Apify credit covers around 2,400 successful pages — enough to test whether this fits your workflow before you spend anything.
Apify platform compute/memory is billed separately by Apify, typically pennies per run for small jobs.
Connect to your tools
Use this Actor from your existing stack — no coding needed:
| Platform | How to connect |
|---|---|
| Make.com | Search "Apify" → "Run Actor" → Actor ID: lentic_clockss/stealth-web-scraper |
| n8n | Add Apify node → "Run Actor" action → same Actor ID |
| Zapier | Apify integration → "Run Actor" trigger |
| LangChain | ApifyActorsTool("lentic_clockss/stealth-web-scraper") |
| Python / Node.js | Apify SDK or direct HTTPS call |
API call example
curl "https://api.apify.com/v2/acts/lentic_clockss~stealth-web-scraper/runs" \-X POST \-H "Authorization: Bearer YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://www.clutch.co/it-services"], "outputFormat": "text"}'
Results come back in JSON via the Apify Dataset API:
GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json
When to use something else
This Actor is great for public content on protected sites. It's NOT the right tool for:
| If you need... | Use this instead |
|---|---|
| Login-only pages (your account dashboard) | A custom Actor with session handling |
| Long sessions with complex interactions | Apify's Web Scraper or a custom Actor |
| Guaranteed success on every request | No tool can promise this — websites change |
| Simple non-protected websites | Apify's cheaper Web Scraper handles these fine |
FAQ
Q: What counts as a successful page?
A: A page is successful when it returns status 200, isn't blocked, and (if you set waitForSelector) the element appeared. Only successful pages are billed.
Q: What happens when a page is blocked?
A: It goes to the separate failures dataset with the error details. You're not charged for blocked pages.
Q: Do I need my own proxies?
A: No. The Actor has built-in proxy support. RESIDENTIAL is the default and works best on heavily protected sites. You can also bring your own proxy list if you prefer.
Q: Can I extract specific fields like prices or titles?
A: Yes. Pass extractSelectors with CSS selectors. If the selector matches one element you get a string, if multiple you get a list.
Q: Will this work on LinkedIn / Instagram / Facebook? A: No — those require login sessions. This Actor is for public pages that just happen to be protected by anti-bot systems.
Q: How is this different from Apify's Web Scraper? A: Apify's Web Scraper handles standard sites. This Actor is specifically built for pages blocked by Cloudflare, Akamai, PerimeterX, and similar anti-bot systems. Use the standard Web Scraper for easier targets to save money.
Q: How do I know if my target site needs this Actor? A: Try Apify's standard Web Scraper first. If you get 403 errors or an empty page, switch to this one.
Input reference
For developers who want full control:
| Parameter | Type | Description |
|---|---|---|
urls | array | List of URLs to scrape (required) |
extractSelectors | object | CSS selectors for specific fields, e.g. {"title": "h1", "price": ".price"} |
outputFormat | string | html, text, or both (default: both) |
waitForSelector | string | CSS selector that must appear before extraction completes |
maxConcurrency | integer | Parallel pages, 1-5 (default: 1) |
pageTimeout | integer | Page load timeout in seconds, 30-300 (default: 90) |
proxyGroup | string | auto (datacenter, cheapest), RESIDENTIAL (recommended for protected sites), or BUYPROXIES94952 |
Full output schema is available in the Dataset tab.
Related Actors
- Global Company Search — verify companies across 82 official government registries in 40+ countries
- Global Sanctions Screening — search OFAC, EU, Canada sanctions lists in one call
- US Government Contracts Search — find federal and state procurement opportunities
→ Browse all Actors: apify.com/lentic_clockss