Firecrawl pricing explained: what 1,000 pages really cost
Firecrawl's headline is 1 credit per page. The real bill depends on your plan, your formats and how many of your URLs come back as 404s. Here it is in dollars.

On this page
Firecrawl's pricing page leads with a simple rule: one credit per page. That rule is true, and it is also the least useful number on the page. What you actually pay per 1,000 pages depends on which plan you are on, whether you bill monthly or annually, which output formats you ask for, and how many of your URLs turn out to be 404s.
This post works through all of it in dollars. Every Firecrawl figure below comes from firecrawl.dev/pricing and the Firecrawl billing docs, checked on 21 October 2026. Prices change; if you are reading this much later, check them again.
Disclosure: we build MeshArc, which competes with Firecrawl. We have tried to be fair, and we say plainly where Firecrawl is the cheaper choice.
The plans, converted to dollars per 1,000 credits
Firecrawl sells monthly credit allowances. Converting each plan to a cost per 1,000 credits is the first step, because a credit is a page only in the simplest case.
Plan | Monthly billing | Annual billing (per month) | Credits/month | $ per 1,000 credits (monthly / annual) |
|---|---|---|---|---|
Free | $0 | — | 1,000 | — |
Hobby | $19 | $16 | 5,000 | $3.80 / $3.20 |
Standard | $99 | $83 | 100,000 | $0.99 / $0.83 |
Growth | $399 | $333 | 500,000 | $0.80 / $0.67 |
Scale | $749 | $599 | 1,000,000 | $0.75 / $0.60 |
Two things stand out. First, Hobby is nearly four times dearer per credit than Standard, so anyone doing real volume ends up on Standard or above. Second, the annual discount is worth about 16% and is how most comparisons (including ours on /compare) arrive at "$0.83 per 1,000 pages".
Firecrawl's concurrency also scales with plan: 2 on Free, 5 on Hobby, 25 on Standard, 50 on Growth, 100 on Scale. If you need throughput rather than volume, that can push you up a tier before credits do.
What a credit buys
From the billing docs, the per-page costs that matter for most scraping jobs:
Operation | Credits |
|---|---|
Scrape or crawl, Markdown/HTML | 1 per page |
Enhanced proxy (including | +0 — billed at the base 1 credit |
JSON format (LLM extraction) | +4 per page |
PDF parsing | +1 per PDF page |
Zero Data Retention | +1 per page |
Map | 1 per call |
Search | 2 per 10 results, plus scrape costs for each scraped result |
Monitor | 1 per page per check |
The enhanced-proxy line deserves credit. Firecrawl does not charge extra when a page needs a better proxy, and escalated retries are not billed separately. For a site that needs residential-grade routing on every page, that flat 1 credit is very hard to beat — more on that below.
The JSON line is the one that changes bills. A page with formats: ["json"] costs 5 credits, not 1. Modifiers stack, so JSON plus Zero Data Retention is 6.
The 404 question
This is the line most people miss. From Firecrawl's billing docs: if a document is returned — including a 403 or a 404 — the page costs 1 credit plus any option costs. Only when no document comes back at all (the site never responded) is it free.
The docs suggest checking metadata.statusCode to spot blocked URLs. That is good advice, but by then you have paid. On a crawl driven by an old sitemap, or a list of product URLs scraped six months ago, 404s are not rare. And if you asked for JSON, each 404 costs 5 credits.
Worked examples in dollars
All Firecrawl prices below use Standard at $0.99 per 1,000 credits (monthly) with the annual $0.83 in brackets.
1. 1,000 plain pages, Markdown. 1,000 credits → $0.99 ($0.83).
2. 1,000 product pages, extracted to JSON. 1,000 × 5 = 5,000 credits → $4.95 ($4.15). The model cost is included, which is convenient.
3. The same 1,000 JSON pages, where 80 URLs are now 404s. Still 5,000 credits → $4.95 ($4.15). The 80 dead URLs cost 400 credits between them and returned nothing useful.
4. A 50-page PDF manual. 50 credits for parsing on top of the scrape → about $0.05. Cheap; PDFs are not where Firecrawl bills hurt.
5. Re-checking 2,000 pages weekly with Monitor. 2,000 × 4 checks = 8,000 credits a month → $7.92 ($6.64), whether or not anything changed.
Expiry, rollover and top-ups
Plan credits reset monthly and do not roll over on Free, Hobby, Standard or Growth. Annual Scale rolls unused credits over one month; annual Enterprise, two.
Pay-as-you-go top-ups come in $5 increments: 1,000 credits on Hobby, 2,000 on Standard, 2,500 on Growth, 5,000 on Scale. On Standard that is $2.50 per 1,000 credits — 2.5× the plan rate. Top-ups stay on the account until used, but expire if you cancel the subscription.
Pay-as-you-go needs a paid plan; on Free, requests return HTTP 402 when credits run out.
The practical effect: size your plan to your typical month, not your peak, and treat top-ups as expensive insurance.
The same jobs on MeshArc
MeshArc bills by the rung a page actually needed, and does not bill pages that did not deliver. From mesharc.dev/pricing, on Growth ($99 for 500,000 credits, so $0.198 per 1,000 credits):
Rung | Credits/page | $ per 1,000 pages |
|---|---|---|
Fetch | 1 | $0.20 |
Fetch with session (walled sites, after one render) | 2 | $0.40 |
Render (real Chrome) | 4 | $0.79 |
Render, residential (incl. 1 MB) | 16 | $3.17 |
Refused pages, 404s and 410s, pages served from cache, URLs blocked by robots.txt and pages carried forward unchanged on an incremental run cost nothing. Structured extraction is 1 credit per 1,000 tokens, with the model bill paid to your own provider.
Running the examples again:
1,000 plain pages: $0.20 if they fetch plainly, $0.79 if every one needs a browser.
1,000 JSON pages, 80 of them 404s: the 80 cost 0. The other 920, at about 3,000 tokens each (the example on our pricing page), are 3 credits each for extraction plus the read — but you also pay your model provider. If that model bill matters to you, Firecrawl's all-in 5 credits may well be simpler.
A 100-page Cloudflare-walled site: one render earns a session, then 99 pages read with it: 202 credits, about $0.04.
2,000 pages, 4 runs a month, 20% needing a browser, 2% residential: our pricing page puts that at about 15,200 credits, or roughly $3.01. Firecrawl Monitor on the same pages is $7.92 monthly — though Monitor gives you diffs, and so does MeshArc, so compare like with like.
Where Firecrawl is cheaper
Be honest about the residential case. A page that needs a residential IP costs MeshArc 16 credits ($3.17 per 1,000 on Growth). Firecrawl charges 1 credit with enhanced proxy, so $0.83–$0.99 per 1,000. If your whole job is hard sites that need residential routing on every page and cannot be read with a session, Firecrawl is three to four times cheaper per page. Our Firecrawl alternative page also says Firecrawl is the better pick if you want to self-host an open-source crawler; MeshArc is not open source.
Firecrawl's JSON format also includes the model. If you do not want a model key of your own, that is a real convenience.
Where the maths goes the other way is plain pages (about 4× cheaper on MeshArc), walled sites that a session can read (about 2×), anything with a meaningful 404 rate, and repeat crawls where most pages have not changed.
Estimate your own bill
Here is a small, dependency-free calculator for Firecrawl's side, using the rates above. Change the inputs to your workload.
# Firecrawl monthly cost estimate (rates checked 21 Oct 2026)
PLAN_USD_PER_1K = {"standard_monthly": 0.99, "standard_annual": 0.83,
"growth_monthly": 0.80, "growth_annual": 0.67}
def firecrawl_cost(pages, json_share=0.0, pdf_pages=0, zdr=False,
plan="standard_monthly"):
per_page = 1 + (1 if zdr else 0)
credits = pages * per_page + pages * json_share * 4 + pdf_pages
return credits, round(credits / 1000 * PLAN_USD_PER_1K[plan], 2)
# 10,000 pages, 30% as JSON, 200 PDF pages
print(firecrawl_cost(10_000, json_share=0.3, pdf_pages=200))
# (22200.0, 21.98)
Note that 404s are not discounted in that formula — because Firecrawl does not discount them.
To see what the same URLs cost on MeshArc, run them through the SDK and add up the per-page credits field. Every row tells you the HTTP status, the verdict and what it cost.
pip install mesharc # or: npm install mesharc
from mesharc import MeshArc
arc = MeshArc() # reads MESHARC_API_KEY
urls = [line.strip() for line in open("urls.txt") if line.strip()]
batch = arc.scrape(urls, config={"concurrency": 4})
total = 0
for row in batch["pages"]:
total += row["credits"]
print(row["url"], row["httpStatus"], row["verdict"], row["credits"])
print(f"{len(urls)} URLs, {total} credits, ~${total / 1000 * 0.198:.2f} on Growth")
A 404 or a refused page shows up in that list with credits of 0.
The short version
Firecrawl Standard is $0.99 per 1,000 pages billed monthly, $0.83 billed annually.
JSON extraction makes it $4.95 / $4.15 per 1,000, model included.
403s and 404s are billed. Plan credits do not roll over below Scale. Top-ups cost 2.5× the plan rate on Standard.
Enhanced proxy is free on top, which makes Firecrawl the cheaper choice for hard, residential-only sites.
If you want to compare on your own URLs rather than ours, paste a few into the MeshArc playground and look at the credits column, or see the full vendor table on /compare. Re-crawling the same sites every week? The website change monitoring use case shows how unchanged pages drop to zero.
Try it in the playground · Start free — 1,000 credits, no card
Crawl a site and see what changed.
A one-time 1,000 credits to start, browser tier included, no card. The playground answers in seconds.