Firecrawl turns a URL into clean markdown in one call. This page is about the jobs that do not fit in one call.
Two panels, both true. If the left one describes your workload, stop reading and keep what you have.
Stay on Firecrawl when the job really is "URL in, clean text out". It returns markdown, summary, cleaned HTML, rawHtml, screenshots, links, images, branding, product, audio, video and schema-driven JSON from a single scrape call, plus a natural-language query format that answers a question about the page you just fetched. It auto-detects and parses PDFs and DOCX from a URL, billed at one credit per PDF page. It is genuinely open source — primarily AGPL-3.0, with the SDKs under MIT — and ships a first-party self-hosting guide, so the core engine can run inside your own network. It publishes per-plan, per-endpoint rate limits, concurrency ceilings and queue depths instead of hiding them behind a sales call. It ships official SDKs for Python, Node.js, Go, Rust, Java and Elixir, a CLI, and an MCP server for Cursor, Claude and Windsurf. And it has a free tier: 1,000 credits a month at two concurrent requests, enough to decide before you pay anyone.
Look at Wayfern when the page will not come back from a single fetch. A checkout that needs three interactions and the same cookie jar throughout. A dashboard behind a login you have to walk through. A flow where the identity — fingerprint, cookies, exit IP — has to hold still across twenty navigations, because the twenty-first is the one that matters. Wayfern's answer to that is not a bigger scrape body: it is a real Chrome you connect to over CDP at wss://browser.wayfern.com/ws and drive with Playwright or Puppeteer for as long as you need it, on the same credit balance as its per-page Web Data endpoints.
A request/response scrape discards everything between calls; a held CDP session keeps one browser, one cookie jar and one exit identity for the whole run.
Firecrawl narrows this gap deliberately and it is worth being precise about how. Its scrape endpoint takes an `actions` array — write, press, click, wait, screenshot — so a page can be poked before it is captured. Its Interact endpoint scrapes a page and then interacts with it using AI prompts or code, billed at 2 credits per browser minute, and it documents a Browser Sandbox offering managed browser sessions for interactive workflows. For a login form and a button, that is enough.
It stops being enough when the sequence is long, branching, or written in code you already own. Wayfern inverts the relationship: instead of describing the interaction inside a request body, you connect your own Playwright or Puppeteer client to a browser we hold open, and every line of automation you have already written keeps working. The gateway authenticates a link token on the WebSocket URL, enforces the link concurrency cap, and hands back a live CDP endpoint.
The cost model follows the shape. An open page bills 8 credits per hour, prorated per second with a 60-second minimum per page — so a session is priced by how long you hold it, not by how many pages you managed to squeeze through it.
Firecrawl cells come from the sources listed at the bottom of this page. Wayfern cells describe endpoints and options that exist in the running service. Where their docs do not answer a row, it says so rather than guessing.
| Capability | Wayfern | Them |
|---|---|---|
| Driving your own browser | CDP over WebSocket at wss://browser.wayfern.com/ws?token=…; connect Playwright (connectOverCDP) or Puppeteer and keep the browser for the whole run. | Interact scrapes a page then acts on it with AI prompts or code (2 credits per browser minute); a Browser Sandbox provides managed browser sessions for interactive workflows. |
| Exit-geo control | country / region / city / isp plus a sticky session id on the gateway URL; a 2-letter country on every Web Data endpoint. | A location object taking a country code and a languages array on scrape. |
| What a blocked page costs | Datacenter egress is free; residential is metered per byte at 320 credits/GB, and auto escalates only on a bot wall. | basic / enhanced / auto proxy modes; when auto retries with enhanced and succeeds, the scrape bills 5 credits instead of the regular cost. |
| Cache controls | maxAge in milliseconds on scrape; 0 forces a live fetch. A cache hit still bills as a scraped page. | maxAge (default 172,800,000 ms / 2 days), minAge for cache-only lookups, and storeInCache. |
| Output formats in one call | markdown, html, rawHtml, links, screenshot, pdf, json, summary — with onlyMainContent, includeTags and excludeTags. | markdown, summary, html, rawHtml, screenshot, links, json, images, branding, product, audio, video and query — with onlyMainContent, includeTags, excludeTags and waitFor. |
| Documents at a URL (PDF, DOCX) | No document parser. The pdf format prints the rendered page you scraped; it does not read a PDF you point it at. | Auto-detects and parses PDFs, DOCX and other document types from URLs; PDF parsing bills 1 credit per page. |
| Stored capture lifetime | Screenshots and PDFs are stored privately; the signed link is short-lived and POST /api/v1/artifacts/link re-mints one for 0 credits while the object is retained. | Screenshot outputs are returned as URLs that expire after 24 hours. |
| Client libraries | REST plus a Streamable HTTP MCP server at /mcp; no first-party language SDKs in this repo. | Official SDKs for Python, Node.js, Go, Rust, Java and Elixir plus a CLI; the repository README lists nine languages including Ruby, .NET and PHP. |
| Published limits | Flat per-endpoint limits documented on the API reference (scrape 60/min, map 30/min, extract 20/min, 10 crawl starts/min); the plan sets concurrent sessions, 20 on Developer to 400 on Scale. | Per-plan, per-endpoint RPM published (scrape 10/min Free to 10,000/min Scale), concurrency 2 to 150+, and max queued jobs 50,000 to 300,000+; limits are shared per team and exceeding them returns 429. |
| Running the engine yourself | Not open source. Enterprise offers isolated infrastructure and a choice of regions, which is not the same thing as a build you can run. | Primarily AGPL-3.0 (SDKs MIT) with a first-party self-hosting guide, with the documented caveat that self-hosted instances do not get Fire-engine (IP-block and robot-detection handling) and that engines beyond fetch and Playwright need manual .env configuration. |
| Retention controls and SSO | No per-request retention flag. Enterprise lists SSO/SAML, team RBAC and audit logs, isolated infrastructure and a choice of regions. | zeroDataRetention and redactPII are documented per-request scrape options; ZDR and SSO/advanced security are listed only under the custom-priced Enterprise plan. |
Both sell credits. They are not measuring the same thing, so compare workloads, not rate cards.
Firecrawl meters work done per page and publishes it plainly: scrape, crawl and map are 1 credit per page, Monitor is 1 credit per page per check, Search is 2 credits per 10 results, and Interact is 2 credits per browser minute. A PDF costs a credit per page of the PDF. An auto-mode scrape that needed the enhanced proxy costs 5. That model is easy to forecast, which is a real advantage when you are budgeting a crawl of a known size.
Wayfern meters the same way for the same work — 1 credit per scraped page, 1 per successfully crawled page, 2 per 10 discovered URLs, 1 per uncached source page for extract, 5 per screenshot, 2 per provider result page for search — with add-ons priced rather than bundled: +4 once per page for a screenshot, PDF or JSON output, +2 for an LLM summary. Re-running an extraction over pages already cached is free, so iterating on a schema does not cost anything.
The part with no Firecrawl equivalent is the second meter: 8 credits per open-page hour (60-second minimum), and residential bandwidth at 320 credits per GB debited live from the container's own byte counters as the session spends them. Datacenter egress is free. Both meters draw on one balance, so a run that scrapes 900 pages and then holds a browser open for twenty minutes is one number, not two invoices.
Plans start at $19/month for 1,520 credits and 20 concurrent sessions. Credit packs are one-time and roll over; the monthly grant does not. Firecrawl's published tiers run from a free 1,000 credits a month up to Scale, though note their pricing page renders the annually-billed rate by default, so the monthly-billing number is not the one on screen.
Wayfern tries a datacenter exit first and retries through a residential exit only when the navigation is classified as blocked — every retried byte is metered.
Firecrawl exposes the choice as three proxy modes. basic is fast and usually works. enhanced is slower but more reliable on complex sites while maintaining privacy. auto retries with enhanced when basic fails, and a scrape rescued that way bills 5 credits rather than the regular cost; a scrape that succeeded on basic bills the regular cost.
Wayfern splits the same decision across two axes instead of one. proxy is auto, datacenter or residential: auto goes out through a datacenter exit and retries through a residential one only when the failure is a bot wall — a timeout or a DNS failure is surfaced immediately rather than burned through an expensive retry. country picks the exit geography. The retry is not a flat surcharge: it is the residential bytes it actually moved, at the standard per-GB rate.
That difference matters in both directions. A page that fails on the cheap exit and succeeds on the expensive one has a predictable, capped cost on Firecrawl and a usage-shaped cost on Wayfern. If your blocked pages are small, per-byte is cheaper; if they are heavy and you dislike variance, a flat 5 credits is easier to defend in a budget meeting. On the browser gateway the same bytes are watched by a monitor that samples the container every few seconds and terminates a session that can no longer pay for its own bandwidth, which is the safety valve that makes per-byte tolerable.
The stateless half moves almost mechanically. formats, onlyMainContent, includeTags, excludeTags, waitFor and maxAge keep their names and meanings; a Firecrawl location.country becomes the top-level country field; a proxy mode of auto maps to proxy: "auto", and reaching for enhanced on every request maps to proxy: "residential". The response envelope is { success, data, credits } — the credits the call actually debited come back with the data, so you can meter per call without a separate usage query.
Two things do not port. There is no document parser on this side: if you rely on Firecrawl reading a PDF or DOCX at a URL, keep it for that. And nothing in a Wayfern request body replaces an actions array — the interaction moves out of the request and into your own Playwright script against the CDP gateway, which is more code and a great deal more control.
curl -X POST https://api.wayfern.com/api/v1/scrape \
-H "Authorization: Bearer $WF_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/pricing",
"formats": ["markdown", "links"],
"onlyMainContent": true,
"excludeTags": ["nav", "footer"],
"waitFor": 1200,
"maxAge": 3600000,
"proxy": "auto",
"country": "us"
}'
# { "success": true, "data": { "markdown": "…", "metadata": {…} }, "credits": 1 }
# The half that has no request-body equivalent:
# const browser = await chromium.connectOverCDP(
# "wss://browser.wayfern.com/ws?token=<LINK_TOKEN>&country=US&session=run42"
# );No — they are the same product and the same balance. POST /api/v1/scrape returns markdown, HTML, links and metadata for 1 credit per page, exactly the shape you are used to, and the CDP gateway is there for the jobs that need it. Crawl, map, extract, screenshot, brand, styleguide, fonts and search sit on the same API and the same credits.
For plain page fetching the headline rate is the same on both: 1 credit per page for scrape, crawl and map. Which one is cheaper for you depends on the shape of the work, not the rate card — heavy interaction is browser-minutes on Firecrawl and session-hours plus metered residential bytes on Wayfern, and the crossover depends on how long your sessions run and how much bandwidth they move. Firecrawl also has a free tier of 1,000 credits a month; that is a real advantage for evaluating without a card.
Yes. Wayfern runs a Streamable HTTP MCP server at https://api.wayfern.com/mcp; an API token needs the mcp scope, and the tool set covers scrape_page, extract_data, map_site, crawl_site, crawl_status, capture_screenshot, brand_profile, site_styleguide, site_fonts and search_web. Firecrawl ships an official MCP server too, for Cursor, Claude, Windsurf and other MCP-compatible clients.
On the Web Data endpoints, set country to a 2-letter ISO code and proxy to residential (or auto, which escalates to a residential exit only when a site blocks the datacenter one). On the browser gateway you get finer selectors on the WebSocket URL: country, region, city, isp, and a session id that keeps the same exit across a run. Firecrawl documents a location object with a country code and a languages array.
POST /api/v1/crawl returns a job id immediately and charges nothing at submit time; you are billed 1 credit per successfully crawled page as the pages land. Polling the job and reading its errors is free, and cancelling it stops further pages while the ones already crawled stay readable and stay billed. Results also go out over signed webhooks if you would rather not poll.
Firecrawl can: it is primarily AGPL-3.0 and publishes a self-hosting guide, with the stated caveat that self-hosted instances do not get Fire-engine — the advanced handling for IP blocks and robot detection — and that scraping methods beyond fetch and Playwright must be configured manually in the .env file. Wayfern is not open source; the nearest equivalent is Enterprise, which offers isolated infrastructure and a choice of regions. If running the engine inside your own network is a hard requirement, that is a genuine reason to stay where you are.
Browser sessions, the Web Data API, search and captcha solving all draw on one credit balance. Start on any of them.