JavaScript Scraper
Web scraping in JavaScript and Node.js, in one call
A JavaScript web scraper API: send a URL, get the page back. JavaScript-rendered pages come back as clean markdown, HTML or links. No Puppeteer, no proxies, no retries to maintain. You only pay for pages that succeed.
- ✓ No credit card to try
- ✓ Failed pages are free
- ✓ Works in serverless
result.markdown
waiting
The page is rendered in a real browser, then converted to markdown.one request → rendered page → clean markdown
The problem
Web scraping with Node.js: why fetch + cheerio breaks on JavaScript sites
Puppeteer is a second job
Sites block bots
The difference
Scraping JavaScript-rendered pages: fetch vs headless browser
A plain request gets the HTML the server sent. The scraper API gets what a visitor sees after the JavaScript has run.
fetch() + cheerio
0 products<!doctype html>
<html>
<head><title>Acme Store</title></head>
<body>
<div id="root"></div>
<script src="/static/app.4f9a.js"></script>
</body>
</html>The products are drawn by JavaScript after load. A plain HTTP request never sees them.
client.scrape()
24 products# Acme Store: Products
## Trail Runner X — $129
Lightweight shoe, 24 sizes in stock.
## Summit Jacket — $249
Waterproof shell, packs into its pocket.
…22 more productsSame URL, rendered in a real browser first. You get the content a visitor sees.
How it works
How the JavaScript scraper works: one call, one page
1. Send a URL
Callclient.scrape()orPOST /v2/scrapewith aurland theoutput_formatsyou want.2. We render it
The page loads in a real browser. Retries, proxies and anti-bot handling run on our side.3. Get the content back
The response hasmarkdown,raw_contentorlinks. No job to poll. Need async? Read about async requests.
Shape the output
Change the settings and watch the Node.js code update.
output_formats
respect_robots_txt
Your Node.js code
import webcrawlerapi from "webcrawlerapi-js";
const client = new webcrawlerapi.WebcrawlerClient("YOUR_API_KEY");
const result = await client.scrape({
url: "https://shop.acme.com/products",
output_formats: ["markdown"],
});
console.log(result.markdown);| Param | What it does |
|---|---|
| url | The page to scrape. Required. |
| output_formats | Any of markdown, html, links, images. Default markdown. |
| clean_selectors | CSS selectors to remove from the output. |
| respect_robots_txt | Return an error if robots.txt disallows the URL. Default false. |
| prompt | Ask for specific fields. Returns structured_data. Billed per token. |
Full reference in the POST /scrape docs.
Code
How to scrape a website with Node.js (code example)
import webcrawlerapi from "webcrawlerapi-js";
const client = new webcrawlerapi.WebcrawlerClient("YOUR_API_KEY");
const result = await client.scrape({
url: "https://shop.acme.com/products",
output_formats: ["markdown", "links"],
});
console.log(result.markdown);The response
{
"success": true,
"status": "done",
"markdown": "# Acme Store: Products\n\n## Trail Runner X — $129 ...",
"links": [
"https://shop.acme.com/products/trail-runner-x",
"https://shop.acme.com/products/summit-jacket"
],
"page_status_code": 200,
"page_title": "Acme Store: Products"
}Works in TypeScript too: webcrawlerapi-js ships its own types. See the JavaScript SDK docs. Also available for __SDK__.
Formats
Output formats for every scraped page
markdown
html
links
images
Need fields and not text? Add a prompt and get structured data back.
Use cases
What developers build with the JavaScript scraper
Price and product monitoring
Before: prices load after the page does, so your parser sees nothing.
After: scrape the rendered page, or ask for name and price fields directly.
prompt + response_schemaContext for AI agents
Before: your agent gets menus and cookie banners instead of the answer.
After: hand it clean markdown of exactly the page it asked for.
output_formats: ["markdown"]Product catalogs and media
Before: every site needs its own selectors for text and images.
After: one call returns the markdown and every image URL on the page.
output_formats: ["markdown", "images"]SEO and competitor checks
Before: a headless browser farm just to read titles and links.
After: get HTML and links for any page from a serverless function.
output_formats: ["html", "links"]By the numbers
Reliable infrastructure, proven in production.
Tracking usage, crawl success rates, average response times, uptime percentages, quality scores, cost metrics, API performance, reliability data, and live trends for all your requests.
Active builders
Teams building in production
Extraction quality
Success rate
Fast turnaround
Average crawling time
Platform stability
Uptime
Which one
Puppeteer alternative: WebCrawlerAPI vs Puppeteer vs Cheerio
| WebCrawlerAPI | Puppeteer / Playwright | fetch + cheerio | |
|---|---|---|---|
| Renders JavaScript | Yes | Yes | No |
| Setup | npm install, one API key | Install browsers, manage versions | npm install |
| Runs in serverless | Yes, it is just an HTTP call | Hard, large binaries | Yes |
| Proxies and retries | Handled for you | You build them | You build them |
| Cost model | Per successful page | Servers and your time | Servers and your time |
Need a whole site and not one page? Crawl a whole site with the JavaScript web crawler or the crawl API. Using Python? See the Python web scraper. Comparing providers? Read all crawler APIs compared.
Built for sites that fight back
Skip browser maintenance. See rate limits.
Pricing
Simple, transparent pricing
Start with pay-per-request, or save with a monthly subscription. Top-up credits are always available when your included allowance runs out.
Pay as you go
No monthly commitment — pay only for what you use
$0/month
- From $0.002 / page
- LLM-cleaned markdown: $0.006 / page
- Unlimited proxy included
- Up to 5 parallel requests
- Pay only for successful requests
- Webcrawler agent
Starter
Great for small projects
$29/month
- From $0.002 / page
- LLM-cleaned markdown: $0.006 / page
- Unlimited proxy included
- Up to 10 parallel requests
- Pay only for successful requests
- Webcrawler agent
Professional
Best for growing teams
$99/month
- From $0.0015 / page
- LLM-cleaned markdown: $0.0055 / page
- Unlimited proxy included
- Up to 20 parallel requests
- Pay only for successful requests
- Webcrawler agent
Business
For high-volume crawling
$499/month
- From $0.001 / page
- LLM-cleaned markdown: $0.005 / page
- Unlimited proxy included
- Up to 50 parallel requests
- Pay only for successful requests
- Webcrawler agent
JavaScript Scraper FAQ
Common questions about scraping websites from Node.js
What is a JavaScript scraper API?
A JavaScript scraper API loads a page in a real browser, waits for the JavaScript to run, and returns the final content. With WebCrawlerAPI that is one POST /v2/scrape request, or one client.scrape() call in Node.js.
Can it scrape JavaScript-rendered pages, like React or Next.js sites?
Yes. The page is rendered in a real browser before the content is extracted, so content that a plain fetch() never sees (client-rendered lists, lazy-loaded sections) is part of the result.
Do I need Puppeteer or Playwright?
No. You send a URL and get the content back. Browsers, retries, proxies and anti-bot handling run on our side, so there is nothing to install, patch or scale.
How do I scrape a website with Node.js?
Install webcrawlerapi-js, create a WebcrawlerClient with your API key, and call client.scrape({ url, output_formats: ["markdown"] }). The result has a markdown field. You can also call the REST endpoint with fetch() on Node 18 or later.
Which output formats can I get?
Set output_formats to any of markdown, html, links and images. Add a prompt to get structured data back.
Is the scrape synchronous?
Yes. client.scrape() waits and returns the result in the same call. For long-running work use scrapeAsync() and getScrape() to poll by id.
How much does scraping cost?
You pay per successful page: $0.002 on Starter, $0.0015 on Professional and $0.001 on Business. Failed requests are not charged. Some sites are priced separately, see the pricing docs.
Can I scrape many pages, or a whole site?
Scrape is for a URL you already know. To discover and fetch many pages from one seed URL, use the crawl API.
Does the scraper respect robots.txt?
Only if you set respect_robots_txt to true. The default is false. If the URL is disallowed, you get an error back.
Can I try it before paying?
Yes. Use the playground on this page or sign up in the dashboard. No credit card required.
Scrape your first page in five minutes
Get an API key, run the Node.js snippet above, and read the rendered page as markdown. Or try it in the playground.