A Firecrawl alternative you can switch to without rewriting your code
Updated 1 Oct 2026 · Tested on 1 Oct 2026
Skryp serves Firecrawl-shaped /v2 endpoints, so most integrations change only the base URL and key. On the same 170 public pages, Firecrawl returned two more usable pages; Skryp returned about half the tokens and verified the exit country on every result. Choose by what you need from each page.
Which to choose
| If you need | Choose | Why |
|---|---|---|
| The most complete Markdown of documentation pages | Firecrawl | It returned 23 of 23 documentation pages usable; Skryp returned 20[1 Oct 2026]. |
| Fewer tokens per page in your agent's context | Skryp | On the 153 pages both read, its Markdown was a median 40% shorter[1 Oct 2026]. |
| Proof of where each request came from | Skryp | Every result carries the verified exit country; strict mode fails rather than use another country. |
| Blocked pages that cost nothing | Skryp | A page Skryp cannot get past costs 0 credits[1 Oct 2026]; Firecrawl charges 1 credit for a page that answers 403[1 Oct 2026]. |
| Credits that stay yours | Skryp | Skryp's top-up credits never expire, even if you cancel[1 Oct 2026]; Firecrawl's bought credits expire at the end of the billing period after you cancel[2 Oct 2026]. |
| A lower bill on a mix of easy and hard pages | Skryp | On the benchmark's pages, $1.20 per 1,000 usable pages on Skryp's $49 Standard plan and $1.82 on Firecrawl's Standard billed annually[1 Oct 2026]. |
| Mostly pages that need a proxy, without proof of where it came from | Firecrawl | Its enhanced proxy costs no extra credits[1 Oct 2026]; on Skryp a residential IP costs 5 credits a page, or 10 in a browser, and the exit is verified. |
| Spending limits on each API key | Either | Both cap a key's credits per period (Firecrawl per day, week or month[2 Oct 2026]); Skryp adds limits for the whole workspace and a maximum per page[2 Oct 2026]. |
| Change tracking, branding, summary or audio formats | Firecrawl | Skryp does not offer these formats. |
| To keep your existing Firecrawl code | Either | Skryp serves Firecrawl's v2 API; both official SDKs ran against it unchanged[1 Oct 2026]. |
| To run it yourself, for free | Neither: see Crawl4AI | Open source and free to host yourself. |
The same 170 pages through both
On 1 October 2026 we ran the same 170 public pages through both services at their default settings: news articles, documentation, shop pages, listings, JavaScript apps, PDFs, bot-protected pages and country-priced pages requested from several countries.
| Measure (170 pages) | Skryp | Firecrawl |
|---|---|---|
| Usable pages | 157 of 170 | 159 of 170 |
| Median completeness | 0.98 | 1.00 |
| Median tokens per page | 1,800 | 3,520 |
| Median time per page | 1.6 s | 3.3 s |
| 95th percentile time | 14.0 s | 12.1 s |
| Right currency on country-priced pages | 21 of 22 | 21 of 22 |
By page type:
| Page type | Pages | Usable: Skryp | Usable: Firecrawl | Median tokens: Skryp | Median tokens: Firecrawl |
|---|---|---|---|---|---|
| News articles | 24 | 24 | 24 | 2,471 | 3,682 |
| Documentation | 23 | 20 | 23 | 1,065 | 2,261 |
| Shop pages (global) | 13 | 13 | 13 | 1,072 | 2,724 |
| Shop pages (South Africa) | 22 | 21 | 22 | 1,760 | 3,713 |
| Country-priced pages | 32 | 32 | 32 | 1,292 | 2,790 |
| Listings and search results | 14 | 10 | 9 | 1,607 | 5,397 |
| JavaScript apps | 5 | 5 | 5 | 6,549 | 15,213 |
| Bot-protected pages | 15 | 12 | 11 | 2,569 | 13,489 |
| PDFs | 7 | 5 | 5 | 17,771 | 15,660 |
| Our own websites | 15 | 15 | 15 | 1,372 | 1,464 |
The misses go both ways. Firecrawl read 6 pages Skryp did not; Skryp read 4 that Firecrawl did not; 7 defeated both. Skryp was faster on two thirds of the pages and at the median[1 Oct 2026], and slower at the 95th percentile: its slowest pages were the ones that needed a browser on a residential IP, a real Chrome window or the unblocker. On country-priced pages, both returned the expected currency on 21 of 22[1 Oct 2026]. The full method, with the token counts per page, is in How many tokens is a web page?.
One page through both, live
This script sends one South African product page to both services at the same moment, with caching off on both, and prints what came back. It ran as shown:
# One product page through Firecrawl and Skryp at the same moment, both fetched live:
# tokens, time, credits, and Skryp's receipt.
# pip install httpx tiktoken export SKRYP_API_KEY=... FIRECRAWL_API_KEY=...
import os
import time
import httpx
import tiktoken
URL = "https://www.takealot.com/ufijmek-mugs-4-pieces/PLID103681206"
SKRYP = os.environ.get("SKRYP_API_URL", "https://api.skryp.dev")
enc = tiktoken.get_encoding("cl100k_base")
def timed(fn):
t0 = time.monotonic()
out = fn()
return out, time.monotonic() - t0
fc, fc_s = timed(lambda: httpx.post(
"https://api.firecrawl.dev/v2/scrape",
headers={"Authorization": f"Bearer {os.environ['FIRECRAWL_API_KEY']}"},
json={"url": URL, "formats": ["markdown"], "maxAge": 0},
timeout=120,
).json()["data"])
sk, sk_s = timed(lambda: httpx.post(
f"{SKRYP}/v1/scrape",
headers={"Authorization": f"Bearer {os.environ['SKRYP_API_KEY']}"},
json={"url": URL, "formats": ["markdown"], "max_age_s": 0},
timeout=120,
).json())
r = sk["receipt"]
print(f"Firecrawl: {len(enc.encode(fc['markdown'])):,} tokens, {fc_s:.1f} s, {fc['metadata'].get('creditsUsed')} credit")
print(f"Skryp: {len(enc.encode(sk['markdown'])):,} tokens, {sk_s:.1f} s, {r['credits']} credit")
print(f"Skryp's receipt: route {r['route']}, exit {r['egress']['country'].upper()} (verified: {r['egress']['verified']}), "
f"attempts: {', '.join(a['route'] + ' ' + a['outcome'] for a in r['attempts'])}")
for name, md in (("Firecrawl", fc["markdown"]), ("Skryp", sk["markdown"])):
print(f"\n--- {name}, first lines ---")
print("\n".join(line[:110] for line in md.splitlines() if line.strip())[:1400])Firecrawl: 3,633 tokens, 4.5 s, 1 credit
Skryp: 2,232 tokens, 8.1 s, 1 credit
Skryp's receipt: route browser:direct, exit ZA (verified: True), attempts: browser:direct ok
--- Firecrawl, first lines ---
[Camping & Outdoors](https://www.takealot.com/camping-outdoor)[Outdoor Kitchen](https://www.takealot.com/campi
Share
Report this product

# Ufijmek Mugs 4 Pieces
R 843
- 90% off
[[Outdoor Kitchen](https://www.takealot.com/campi
Share
Report this product
# Ufijmek Mugs 4 Pieces
R 843
- 90% off
[Ufijmek Mugs 4 Pieces](https://www.takealot.com/ufijmek-mugs-4-pieces/PLID103681206)
+7
# Ufijmek Mugs 4 Pieces
… 28 more linesOn this page Skryp used about 40% fewer tokens, mostly by leaving out the product-image links that Firecrawl keeps, and took longer: its receipt shows it rendered the page in a browser. Both cost 1 credit. Skryp's receipt names the route, the exit country and every attempt, so an agent can tell how the page was fetched without trusting a status code.
Switching: change the URL and the key
Skryp serves Firecrawl-shaped endpoints under /v2. Firecrawl's official Python and JavaScript SDKs ran against Skryp with only the API address and key changed: scrape in every supported format, JSON extraction, actions, country location, map, search, crawl, batch scrape and extract.
# The official Firecrawl Python SDK, unchanged, pointed at Skryp: only the API URL and the key differ.
# pip install firecrawl-py export SKRYP_API_KEY=...
import os
from firecrawl import Firecrawl
app = Firecrawl(api_key=os.environ["SKRYP_API_KEY"], api_url=os.environ.get("SKRYP_API_URL", "https://api.skryp.dev"))
doc = app.scrape("https://quotes.toscrape.com/", formats=["markdown", "links"])
print(f"scrape: {doc.metadata.title!r}, {len(doc.markdown)} characters of Markdown, {len(doc.links)} links")
site = app.map("https://books.toscrape.com/", limit=20)
print(f"map: {len(site.links)} URLs, first {site.links[0].url}")
found = app.search("books to scrape", limit=3)
print(f"search: {[r.url for r in found.web]}")
crawl = app.crawl("https://quotes.toscrape.com/", limit=3, poll_interval=2)
print(f"crawl: {crawl.status}, {len(crawl.data)} pages")
batch = app.batch_scrape(["https://quotes.toscrape.com/page/1/", "https://quotes.toscrape.com/page/2/"], formats=["markdown"], poll_interval=2)
print(f"batch scrape: {batch.status}, {len(batch.data)} pages")
usage = app.get_credit_usage()
print(f"credit usage: {usage.remaining_credits} credits remaining")The endpoint-by-endpoint test results and the differences to know are in Migrate from Firecrawl to Skryp.
Cost per 1,000 usable pages
Prices per credit only mean something next to what a credit buys. This is what the benchmark run cost per usable page on each plan, with Firecrawl's prices read on 1 October 2026[1 Oct 2026]:
| Service and plan | Credits per usable page | Cost per 1,000 usable pages |
|---|---|---|
| Skryp, pay as you go ($0.50 per 1,000 credits) | 3.67 | $1.83 |
| Skryp Hobby ($9/month, 20,000 credits) | 3.67 | $1.65 |
| Skryp Standard ($49/month, 150,000 credits) | 3.67 | $1.20 |
| Skryp Growth ($149/month, 600,000 credits) | 3.67 | $0.91 |
| Skryp Scale ($399/month, 2,000,000 credits) | 3.67 | $0.73 |
| Firecrawl Hobby, billed monthly ($19/month, 5,000 credits) | 2.19 | $8.32 |
| Firecrawl Hobby, billed annually ($16/month, 5,000 credits) | 2.19 | $7.00 |
| Firecrawl Standard, billed annually ($83/month, 100,000 credits) | 2.19 | $1.82 |
| Firecrawl Growth, billed annually ($333/month, 500,000 credits) | 2.19 | $1.46 |
| Firecrawl Scale, billed annually ($599/month, 1,000,000 credits) | 2.19 | $1.31 |
A different page mix changes this comparison. Skryp prices by route: 1 credit on its own network, 5 through a residential proxy (10 with JavaScript rendering) and 25 for advanced unblocking, only when it succeeds[1 Oct 2026]. Firecrawl charges 1 credit a page whatever the proxy, and its JSON format adds 4[1 Oct 2026]. More foreign or blocked pages favour Firecrawl's price; more ordinary pages and failed pages favour Skryp's. See Pricing for Skryp's plans.
Where Firecrawl is the better choice
- Documentation sites. Firecrawl returned all 23 documentation pages in the run usable; Skryp missed three. If you are building a docs index for retrieval, Firecrawl's output was more complete.
- Completeness overall. Firecrawl returned two more usable pages and a median completeness of 1.00 against Skryp's 0.98. Skryp's leaner output occasionally leaves out something a reader needed.
- Its slowest pages. At the 95th percentile, Firecrawl took 12.1 seconds and Skryp 14.0.
- Formats Skryp does not have. Change tracking, branding, summaries and audio.
- Open source. Firecrawl's code is open source under AGPL-3.0 and can be self-hosted[1 Oct 2026]; Skryp is a hosted service only.
Self-hosted and zero-setup options
- Crawl4AI is open source under Apache-2.0. It runs free as a Python library or as your own server, and has a hosted cloud, pay as you go, with the first $10 free[1 Oct 2026]. Choose it when you want to run the browsers yourself and own the cost.
- Jina Reader turns a page into LLM-friendly text when you put
r.jina.ai/in front of its address. It works without an account under per-IP rate limits, and a new API key comes with 10 million free tokens[1 Oct 2026]. Choose it for occasional reads with no setup.
We did not run either through the benchmark, so this page makes no claims about their results.
How this comparison was made
Skryp ran this comparison on its own product, with Firecrawl at its default settings. The pages, the scoring method and every count are published with the token study, where you can download the per-page data. Firecrawl's prices, features and licence were read from its own pages on 1 October 2026 and are listed under Evidence below with their limits. Read them again before you decide: they change.
Questions
- What is Firecrawl?
- Firecrawl is a web data API for AI agents: it turns pages into Markdown or structured data and offers search, crawl and map. It is available as a hosted service and as open-source code under AGPL-3.0.
- Is Firecrawl open source?
- Yes. Firecrawl's code is open source under the AGPL-3.0 licence, and its SDKs under MIT. The hosted service at firecrawl.dev has features the self-hosted version does not, according to Firecrawl's README (read 1 October 2026).
- Crawl4AI or Firecrawl?
- Crawl4AI is open source under Apache-2.0 and free to run yourself as a Python library or a server; Firecrawl is mainly used as a hosted API. Choose Crawl4AI when you want to run and pay for the browsers yourself, and a hosted API such as Firecrawl or Skryp when you don't.
- Is Firecrawl free?
- Firecrawl's Free plan gives 1,000 credits a month without a card, which is about 1,000 basic page scrapes. Paid plans start at $16 a month billed annually (Hobby, 5,000 credits). Running the open-source version yourself costs only your hosting.
Evidence
Firecrawl's official Python SDK (firecrawl-py 4.45.1) and JavaScript SDK (@mendable/firecrawl-js 4.42.1) work against Skryp with only the API URL and key changed: scrape in every format Skryp lists, JSON extraction, actions, country location and proxy modes, map, search, crawl and cancel, batch scrape, extract and credit usage were called on 1 October 2026.
observed test · checked 1 Oct 2026 · The endpoint table in /docs/migrate/firecrawl; the official SDKs against the preview service.
Limits: Change tracking, branding, summary and audio formats are not supported. Responses follow Firecrawl's shapes, but content, credits and timings are Skryp's. A list answer from extract comes back under items.
On the same 170 public pages, Firecrawl returned 159 usable pages and Skryp 157; median completeness was 1.00 for Firecrawl and 0.98 for Skryp; on documentation pages Firecrawl returned 23 of 23 usable and Skryp 20 of 23.
observed test · checked 1 Oct 2026 · 170 public pages across articles, docs, shops, listings, JavaScript apps, PDFs, protected and regional pages.
Limits: One run. Firecrawl at default settings. Skryp's own benchmark; publish the URL list and scoring code with it.
On the same 170 public pages, the median output was 1,800 tokens per page from Skryp and 3,520 from Firecrawl.
observed test · checked 1 Oct 2026 · Same benchmark run; Markdown output.
Limits: Fewer tokens is not automatically better: completeness was slightly lower for Skryp (median 0.98 vs 1.00). PDFs were the exception: on the five PDFs both services read, they returned about the same length (Skryp shorter on three, longer on two; median ratio 0.95).
On the same 170 pages, median time per page was 1.6 s for Skryp and 3.3 s for Firecrawl; at the 95th percentile Firecrawl was faster (12.1 s vs 14.0 s).
observed test · checked 1 Oct 2026 · Same benchmark run.
Limits: Single location and run; includes cache effects as configured in the benchmark.
On 22 country-priced pages, Skryp and Firecrawl each returned the expected country's currency on 21.
observed test · checked 1 Oct 2026 · 22 regional shop pages in the 170-page benchmark.
Limits: Currency is a proxy for the right regional page, not proof that every price is correct.
At Skryp's rate card of 1 October 2026 (1 credit a page on Skryp's own network, 5 through a residential proxy or 10 with JavaScript rendering, 25 for advanced unblocking), the benchmark's 157 usable pages cost 576 credits, 3.67 per usable page: per 1,000 usable pages, $1.20 on Standard ($49 a month for 150,000 credits), $1.65 on Hobby, $0.91 on Growth, $0.73 on Scale and $1.83 at the pay-as-you-go rate. At Firecrawl's list prices read on 1 October 2026 (348 credits for 159 usable pages) the run cost $1.82 per 1,000 usable pages on Standard billed annually, $1.31 on Scale billed annually, $7.00 on Hobby billed annually and $8.32 on Hobby billed monthly.
observed test · checked 1 Oct 2026 · Same benchmark run.
Limits: The run itself was charged 316 credits under earlier rules; re-priced at the current card it is 576. Each side follows its own charging rules: Firecrawl charges 1 credit a page whatever the route, including a page that answers 403 or 404; Skryp charges by route and nothing for blocked pages. The benchmark is weighted towards hard sites: a mix of documentation and articles costs Skryp about 1 credit a page. Firecrawl's extra-credit packs or its +4-credit JSON format change the comparison.
Blocked and failed pages cost 0 credits.
observed test · checked 1 Oct 2026 · All page reads through the API, MCP and dashboard.
Limits: Applies to page reads; a model extraction that runs is charged when it runs.
Firecrawl's pricing page (prices effective 4 September 2026) lists Free (1,000 credits a month), Hobby ($19 a month, or $16 billed annually, 5,000 credits), Standard ($83 a month billed annually, 100,000 credits), Growth ($333, 500,000) and Scale ($599, 1,000,000). One credit is one page on a basic scrape, crawl or map; a page that responds with an error status such as 403 or 404 costs 1 credit, and a scrape that returns no result is not charged.
provider docs · checked 1 Oct 2026 · firecrawl.dev/pricing
Limits: Prices change; re-read on the day a page citing them is published.
Firecrawl is open source under the AGPL-3.0 licence (its SDKs under MIT) and can be self-hosted; the hosted cloud at firecrawl.dev has additional features.
provider docs · checked 1 Oct 2026 · github.com/firecrawl/firecrawl
Limits: Which features the self-hosted version lacks is listed by Firecrawl, not tested here.
Crawl4AI is open source (Apache-2.0): free as a Python library or as your own server, or hosted as Crawl4AI Cloud, pay as you go with the first $10 free.
provider docs · checked 1 Oct 2026 · github.com/unclecode/crawl4ai
Limits: Not run in this comparison.
Jina Reader converts a page to LLM-friendly text when you put r.jina.ai/ in front of its URL; it works without an API key under per-IP rate limits, and a new API key comes with 10 million free tokens, after which it is priced per token.
provider docs · checked 1 Oct 2026 · jina.ai/reader
Limits: Not run in this comparison; the rate-limit numbers per tier were not recorded.
On the 153 public pages both services returned as usable on 1 October 2026, Skryp's Markdown was a median 40% shorter than Firecrawl's, and shorter on 135 of them.
observed test · checked 1 Oct 2026 · Same benchmark run; Markdown output; pages where both services returned usable content.
Limits: Fewer tokens is not automatically better: Skryp kept slightly less of each page's reference text (median completeness 0.98 vs 1.00). PDFs came out about the same length. One run on 170 pages we chose.
Skryp's plans from 1 October 2026: Free (1,000 credits a month), Hobby ($9 a month for 20,000 credits), Standard ($49 for 150,000), Growth ($149 for 600,000) and Scale ($399 for 2,000,000); unused plan credits expire at the end of each month, and top-ups, which never expire (also after a plan is cancelled), cost $10 for 20,000 credits on Free and the plan's rate on a plan. A page costs 1 credit through Skryp's own network, 5 through a residential or mobile proxy (10 with JavaScript rendering) and 25 for advanced unblocking, only when it succeeds; model extraction adds 5; failed, blocked and cached results cost 0, and a missing page (404 or 410) costs at most 1.
observed test · checked 1 Oct 2026 · Skryp's own prices (the service's rate card).
Limits: Prices in US dollars, charged in rand through Paystack at R17 to the US dollar (Chad, 2 Oct 2026).
Firecrawl's billing documentation, read on 2 October 2026, describes spend limits on each API key (a credit limit per day, week or month), plan credits that do not roll over except on annual Scale and Enterprise plans, and bought credits that stay until used but expire at the end of the billing period after you cancel your subscription.
provider docs · checked 2 Oct 2026 · Firecrawl's hosted service, self-serve plans.
Limits: Documentation, not a measured bill; not tested with an account.
Firecrawl's billing documentation lists a scrape at 1 credit a page, its enhanced proxy (or automatic escalation to it) at no extra credits, JSON extraction with an LLM at 4 more credits a page and PDF parsing at 1 more credit a PDF page; pages that come back with an error status such as 403 or 404 are billed.
provider docs · checked 1 Oct 2026 · Firecrawl's scrape billing, as documented.
Limits: Documentation, not a measured bill; Firecrawl's pricing page shorthand can differ, and the documentation governs.
Each Skryp API key can have a daily limit, a monthly limit and a maximum per page, and each workspace a daily and a monthly limit; a request that would pass one is refused with HTTP 402 before it runs and costs nothing. On 2 October 2026 a key limited to 1 credit a day read one page for 1 credit, and its next request was refused.
observed test · checked 2 Oct 2026 · Skryp's API and MCP server; limits set in the dashboard by a workspace owner or admin.
Limits: Days and months are UTC. Requests in progress count at their reserved cost, so a limit can refuse a request that would have cost less. An API key cannot change its own limits.