Can an AI agent use Firecrawl?

As of 6 Oct 2026, an AI agent gets into Firecrawl on its own and does 100% of the core work.

Level 4 · Runs on its ownAn agent does the core work and can stop paying on its own.
  • Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
  • Access: No key needed.
  • Use: 100% of the work.
  • Pay: Reaches the checkout: A billing API, none made yet.
  • Leave: Nothing to cancel: Can't delete its account.

To reach L5 · Autonomous: pay without a person.

What the levels mean

Driven 6 Oct 2026Same level in 2 drives in a rowRules of 15 Oct 2026Claim this page

Written and checked by our agents from this drive's record. How we write.

Who gets in

  • Agents on a serverGet in on their own.
  • Signed agentsThe site opens.
  • Agents in a person's browserNot measured yet.

Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from

What an agent can do in Firecrawl.

On its own

  • Pull clean text, screenshots, and structured data from web pages, even without signing up for an account
  • Crawl a whole website and read the results back
  • Search the web and get full page content
4 more
  • Fill out structured questions about a page and get a direct answer
  • Run small browser actions like clicking a link or taking a screenshot
  • Upload and read a PDF
  • Get a key for full account access, but only after clicking through a sign-up page and an email link in a browser

What it can't, and why

  • Sign up or get a key without a browserno anonymous or email sign-up offered; the only automatic option needs a partner account the agent lacked
  • Pay for a paid plan or cancel oneno payment method was available to the agent (no card, no Stripe account)
  • Confirm the account was fully deletedthe web delete form logged it out, but the drive could not confirm the deletion went through
1 more
  • Use some data-provider add-ons (Alexandria)a human administrator has to accept the provider's terms on a web page first
On its own, in a browser

Can an AI agent sign up for Firecrawl on its own?

Yes, in a browser, without a human. No headless sign-up we could use: auth.md offers only WorkOS ID-JAG identity_assertion (no anonymous); Stripe Projects needs a Stripe account. Web form (email+password) worked in our agent's browser; invisible reCAPTCHA let us through.

Official server · its calls worked

Does Firecrawl have an MCP server, and can an agent connect to it?

Yes. Firecrawl has an official MCP server. The server lists 27 tools and speaks the older 25 Nov 2025 MCP spec.

A new agent can get in on its own: in the drive of 6 Oct 2026, our agent signed up, verified and got its key without a person. Through the MCP server, 5 of our agent's 5 attempts worked.

What the drive found

APIOpenAPIMCP · officialCLISDKllms.txtWebhooks–Sandbox
On its own, in a browser

How does an AI agent get a Firecrawl API key?

In the drive of 6 Oct 2026, our agent got its Firecrawl API key in a browser, without a person. Default key created at sign-up, read from dashboard API Keys; documented cli-auth flow (session_id + PKCE, poll /api/auth/cli/status) returned the key after onboarding + Authorize click in the signed-in browser.

Blocked

Can an AI agent delete its Firecrawl account?

Not on its own: blocked. Deleted in the dashboard (Settings > Account > Delete, DELETE typed, password re-entered); login stopped working afterward. We could not confirm the deletion took effect.

Reaches the checkout

Can an AI agent pay for Firecrawl?

Reaches the checkout: a billing API, none made yet.

  • Stripe Projects on its own domain

It has a free plan.

What would let agents pay on their own
  1. Accept x402 or MPP on your API. Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card.

No 402 anywhere (keyless paid paths answer 401 + resource_metadata); no x402./mpp./agents. hosts; x402 Bazaar and mpp.dev list only third-party resellers. First-party: Stripe Projects upgrades to Hobby/Standard/Growth from the CLI against the payment method on the Stripe account (docs). Not confirmed live: we have no Stripe account or card.

From the drive of 6 Oct 2026.

For the team behind Firecrawl.

Where agents stop in Firecrawl today, and the fixes that get them further, highest impact first.

Wall at delete

The fixes, highest impact first

  1. Offer anonymous or email-code agent registrationStep-by-step guide
  2. Add an API route to delete the account
  3. Add key create/revoke endpointsStep-by-step guide
3 more fixes
  1. Fix product format picking the wrong item
  2. Implement MCP (the 28 Jul 2026 spec) server/discover
  3. Publish OpenAPI 3.1+ with a server card Step-by-step guide
  • Claim it free and reply next to the result.
  • A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
  • Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
See the example report
Details

Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.

Already claimed it? Open it in your dashboard.

Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.

Embed the badge on your site

Driven · L4 · Runs on its own badge

Behind the level.

The part scores and the measures behind them.

Part scores and the measures · level history · paid plans

Part scores

Agent-ready setup

  • llms.txt: found
  • OpenAPI: found
  • MCP server: found
  • CLI: found

Not measured in this drive: Holds up, Docs match (part of an Audit).

Security: reported privately to the owner

The measures

  1. Work done100
  2. Reliability88
  3. Crash test–

Level history

  1. 1 Oct 2026L3Does the work
  2. 1 Oct 2026new driveL4Runs on its own
  3. 6 Oct 2026L4Runs on its own

Needs a paid plan

Not counted in the level. Our drive used free plan.

Needs a paid plan
CapabilityPlan
Monthly pay-as-you-go spend cappaid (Smart Upgrade / Hobby+)
IP restrictionsEnterprise
Key restrictionsEnterprise

For agents and builders.

The drive as data, every checkpoint and all 60 attempts.

How an agent connects · 7 tips
  • No key? Use the keyless tier: MCP https://mcp.firecrawl.dev/v2/mcp, or POST https://api.firecrawl.dev/v2/scrape without Authorization (scrape/search/parse/research only).
  • With a key, send Authorization: Bearer to /v2/mcp to get 27 tools instead of 3.
  • executeJavascript wraps your script; do not use a top-level return (use an expression or an IIFE).
  • Free plan rate limits are low (scrape ~10/min, monitor run ~3/min); 429 bodies say how many seconds to wait.
  • Research papers search has no 'limit' param (400 'Unrecognized key'); full-text passages may be empty.
  • Alexandria tools need an admin to accept provider terms in the dashboard first.
  • cli-auth: wait for the page to finish loading before clicking through onboarding, or the clicks are lost.
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlessllms.txt (www and docs), /auth.md, /SKILL.md (agent onboarding paths A-G), docs pages as markdown via .md and Accept: text/markdown, OpenAPI 3.0.0 at docs.firecrawl.dev/api-reference/v2-openapi.json
  2. Sign upIn a browserNo headless sign-up we could use: auth.md offers only WorkOS ID-JAG identity_assertion (no anonymous); Stripe Projects needs a Stripe account. Web form (email+password) worked in our agent's browser; invisible reCAPTCHA let us through.
  3. VerifyIn a browserConfirmation mail arrived in under a minute; the link is a Supabase PKCE link that only completes in the browser that signed up.
  4. KeyIn a browserDefault key created at sign-up, read from dashboard API Keys; documented cli-auth flow (session_id + PKCE, poll /api/auth/cli/status) returned the key after onboarding + Authorize click in the signed-in browser.
  5. First callHeadlessGET /v2/team/credit-usage 200 (1000 credits). Keyless: POST /v2/scrape, MCP firecrawl_scrape/search/parse also work without any account.
  6. First actionHeadlessPOST /v2/crawl created a job, read back completed with 4 pages.
  7. PayNot triedNo 402 anywhere (keyless paid paths answer 401 + resource_metadata); no x402./mpp./agents. hosts; x402 Bazaar and mpp.dev list only third-party resellers. First-party: Stripe Projects upgrades to Hobby/Standard/Growth from the CLI against the payment method on the Stripe account (docs). Not confirmed live: we have no Stripe account or card.
  8. CancelNot neededNothing to cancel: our agent used the free plan.
  9. DeleteBlockedDeleted in the dashboard (Settings > Account > Delete, DELETE typed, password re-entered); login stopped working afterward. We could not confirm the deletion took effect.
The attempt log · 60 attempts
Attempt log
CapabilityRouteResultEvidence
llms.txt / auth.md / SKILL.md: Fetch agent docsapidone ✓www.firecrawl.dev/llms.txt 200 text/plain; docs.firecrawl.dev/llms.txt 200; /auth.md 200 text/markdown (ID-JAG only, no anonymous); /SKILL.md 200 text/markdown (paths A-G incl. keyless MCP/CLI tier, Stripe Projects, cli-auth browser flow)
robots / cards: robots.txt, ai-catalog, agent-card, ucpapidone ✓robots.txt 200: 'Content-Signal: ai-train=yes, search=yes, ai-input=yes' (Cloudflare Content-signal scheme, no aipref Content-Usage); /.well-known/ai-catalog.json, agent-card.json, ucp -> 404 HTML; api.firecrawl.dev/.well-known/oauth-protected-resource 404 JSON
MCP server/discover: POST server/discover 2026-07-28 to https://mcp.firecrawl.dev/v2/mcpmcpdone ✓HTTP 400 JSON-RPC -32000 'Unsupported protocol version: 2026-07-28 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)' -- not -32022; legacy server
MCP initialize fallback: initialize offering 2026-07-28mcpdone ✓200 text/event-stream; protocolVersion 2025-11-25; serverInfo firecrawl-fastmcp 3.27.3; keyless session exposes firecrawl_search, firecrawl_scrape, firecrawl_parse
OAuth metadata: PRM + AS metadataapidone ✓www.firecrawl.dev/.well-known/oauth-protected-resource 200 JSON (resource api.firecrawl.dev); mcp.firecrawl.dev/.well-known/oauth-protected-resource/v2/mcp-oauth 200; AS metadata: client_id_metadata_document_supported true, registration_endpoint (DCR), grants authorization_code+refresh_token, S256; agent_auth block identity_assertion id-jag only. /v2/mcp-oauth 401 with WWW-Authenticate resource_metadata. Server card /v2/mcp/server-card 404
Sign up: Find a documented headless sign-up routenoneblockedauth.md: only identity_assertion ID-JAG (WorkOS, iss auth.workos.bot, Firecrawl-trusted client_id), we cannot mint one; no anonymous/verified-email registration; SKILL.md Path D = human browser sign-in; Stripe Projects needs Stripe CLI project (no Stripe account here)
Sign up: Create account with email+password at /signin?view=signupbrowserdone ✓Form submitted; redirected to /signin/confirm-email?email=the agent's inbox. reCAPTCHA script present (invisible, visible_challenge false), let us through
Verify email: Confirm signup link from inboxbrowserdone ✓Mail 'Confirm Your Signup - Firecrawl' from auth@auth.firecrawl.dev arrived <1 min; link service.firecrawl.dev/auth/v1/verify?token=pkce_… (Supabase PKCE, verifier lives in the browser that signed up) -> /onboarding 'Email Verified CLAIMED'
API key: Documented agent flow: SKILL.md Path D cli-auth (session_id + PKCE, poll /api/auth/cli/status)browserfailedPOST /api/auth/cli/status -> {status:pending}. Opening /cli-auth?code_challenge=…#session_id=… in the signed-in browser redirects to /onboarding?redirect=…; 5-step onboarding; final 'Get Started' (with an endpoint selected) does nothing, and reopening /cli-auth loops back to onboarding step 1. Authorize page never reached.
API key: Read the Default key on dashboard /app/api-keys (eye button)browserdone ✓/app/t/<team>/api-keys lists 'Default' key fc-f02b2…b5429294 created at signup; revealed via eye icon; GET /v2/team/credit-usage with it -> 200 remainingCredits 1000
First API call: GET /v2/team/credit-usage with Bearer keyapidone ✓200 {remainingCredits:1000, planCredits:1000, billingPeriodEnd 2026-11-06}; bad token -> 401 {success:false,error:'Unauthorized: Invalid token'}
Scrape a single URL: Scrape docs.firecrawl.dev/features/scrape to markdown+htmlapidone ✓POST /v2/scrape 200 success true; markdown 53553 chars, html 630885 chars, metadata.statusCode 200, title 'Scrape | Firecrawl', creditsUsed 1
Map a website: Map docs.firecrawl.dev (limit 50)apidone ✓POST /v2/map 200 success; 50 links[] all under docs.firecrawl.dev (e.g. /features/scrape with title/description)
Search the web: Search 'firecrawl changelog parse endpoint' with markdown scrapeapidone ✓POST /v2/search 200; data.web 3 results with url/title + markdown (73902, 17535, 118414 chars); creditsUsed 5
First real action: Create a crawl job (POST /v2/crawl)apidone ✓POST /v2/crawl 200 {success:true,id:01a11021-e3b1-…}; job readable at GET /v2/crawl/{id}
Extract structured JSON: Extract pricing plans with a JSON schema from firecrawl.dev/pricingapidone ✓POST /v2/scrape formats[{type:json,schema}] 200; data.json.plans = Free $0/1000, Hobby $16/5000, Standard $83/100000, Growth $333/500000, Scale $599/1000000, Enterprise
Interact via browser actions: scrape example.com with click + executeJavascript ('return …') + screenshotapifailedPOST /v2/scrape actions -> 500 SCRAPE_ACTION_ERROR 'Error in action 3: Javascript execution failed … SyntaxError: Illegal return statement'
Interact via browser actions: Retry: click link on example.com, run JS in IIFE, screenshotapidone ✓POST /v2/scrape actions 200; actions.javascriptReturns[0].value 'https://www.iana.org/help/example-domains | Example Domains' (click navigated); actions.screenshots[0] GCS URL -> 200 image/png 121744 bytes
Crawl a website: Crawl docs.firecrawl.dev/features (limit 4) and read job backapidone ✓GET /v2/crawl/{id} 200 status completed, completed 4/total 4, data[] sourceURLs /features, /features/llm-extract, /features/ask#…, /features/pii-redaction (beyond start URL); creditsUsed 4
Agent: POST /v2/agent: Hobby plan price+credits from firecrawl.dev/pricing with schemaapidone ✓GET /v2/agent/{id} 200 status completed, model spark-2, data {plan:'Hobby',price_usd_month:19,credits_month:5000}; message notes $19 monthly / $16 annual (consistent with annual figure 16); creditsUsed 0
Parse a document: Upload a 1-page PDF to POST /v2/parse (multipart)apidone ✓200 success; data.markdown 'AgentDrives parse test: invoice 4711 total 42 EUR' (exact text of the uploaded PDF), numPages 1, contentType application/pdf, creditsUsed 1
MCP tools/list: tools/list keyless vs Bearer key on /v2/mcpmcpdone ✓No Mcp-Session-Id issued (stateless in practice). Keyless: firecrawl_scrape, firecrawl_search, firecrawl_parse. With Authorization: Bearer key: 27 tools (scrape, map, search, find_tools, crawl, agent, interact, parse, monitor_* x8, research_* x4, developer_search, credit_usage…); no billing/upgrade tool
Scrape a single URL: MCP firecrawl_scrape keyless on example.commcpdone ✓tools/call result content[0].text JSON with markdown of example.com, no key
Map a website: MCP firecrawl_map with key on www.firecrawl.dev limit 10mcpdone ✓tools/call result: id + links[] under www.firecrawl.dev
Question format: Ask 'How many credits does the Free plan include?' about firecrawl.dev/pricingapidone ✓POST /v2/scrape formats[{type:question}] 200; data.answer '1,000 credits / month' (matches extraction and credit-usage planCredits 1000)
Highlights: Highlights for 'screenshot expiry' on docs.firecrawl.dev/features/scrapeapidone ✓200; data.highlights = string with the exact source line '- Screenshot (`screenshot`, …): screenshot URLs expire after 24 hours'
Batch scrape: Batch-scrape example.com + iana example-domains pageapidone ✓POST /v2/batch/scrape 200 id; GET /v2/batch/scrape/{id} status completed 2/2, data sourceURLs both submitted URLs
deterministicJson: deterministicJson schema (title/price/availability) on two books.toscrape.com product pagesapidone ✓200 data.json {title:'A Light in the Attic',price:'£51.77',availability:'In stock (22 available)'}; second page same fields {'Tipping the Velvet','£53.74','In stock (20 available)'} in 3.0 s; creditsUsed 10 each
Product format: formats:['product'] on books.toscrape.com 'A Light in the Attic' product pageapifailed200 but data.product absent; data.warning 'No product found on this page; it does not appear to be a product page.' (page has title, price £51.77, availability)
Product format: Retry formats:['product'] on scrapeme.live/shop/Bulbasaur/apipartial200; metadata title 'Bulbasaur: ScrapeMe', sourceURL /shop/Bulbasaur/, but data.product.title 'Pidgeot', url scrapeme.live/shop/Pidgeot/, price 185 GBP, '90 in stock'a different product than the page
Screenshot: Full-page screenshot of example.comapidone ✓POST /v2/scrape formats[{type:screenshot,fullPage:true}] 200; data.screenshot GCS signed URL -> 200 image/png 82244 bytes
PDF action: actions:[{type:pdf,format:A4}] on example.comapidone ✓200; actions.pdfs[0] GCS URL -> 200 application/pdf 51018 bytes, starts %PDF-1.4
Mobile emulation: mobile:true vs default on example.com, read viewport via executeJavascriptapidone ✓mobile:true -> innerWidth 360; default -> 1920 (UA string unchanged: Linux desktop Chrome/154)
Location/language: location {country:DE, languages:[de-DE]} on example.com, read navigator.language + timezoneapidone ✓DE -> lang 'de-DE', tz 'Europe/Berlin'; default -> 'en-US', 'America/New_York'
Redact PII: redactPII:true on firecrawl.dev/privacy-policy vs plain scrapeapipartial200; output has <PRIVATE_PERSON> x2 and <PRIVATE_DATE>; but 'Alexandria' (a product name) was tagged PRIVATE_PERSON, a heading was replaced, and the email help@firecrawl.com stayed unredacted (also in raw scrape)
Change tracking: Second scrape of httpbin.org/uuid (new UUID each load) with changeTracking git-diffapifailedfirst call 200 changeStatus 'new'; second call 429 'Rate limit exceeded. Consumed (req/min): 11, Remaining (req/min): 0 … retry after 16s, resets at …'
Change tracking: Retry after 25 s: third scrape of httpbin.org/uuid with changeTracking git-diffapidone ✓200 changeTracking.changeStatus 'changed', previousScrapeAt 07:37:44, diff.text unified diff '- "uuid": "ccc17a80…" / + "uuid": "3861c9a5…"'
Lockdown mode: lockdown:true on cached example.com and on an uncached example.com pathapidone ✓cached URL -> 200 with markdown; uncached https://example.com/agentdrives-uncached-<ts> -> 404 SCRAPE_LOCKDOWN_CACHE_MISS 'Lockdown mode only serves previously cached responses and never makes outbound requests…'
Audio extraction: formats:['audio'] on a YouTube video (jNQXAC9IVRw)apidone ✓200 on the free plan; data.audio signed GCS URL youtube-jNQXAC9IVRw.mp3 -> ranged GET 206 audio/mpeg; creditsUsed 5
Monitor: Create monitor with schedule as string and email as arrayapifailedPOST /v2/monitor 400 BAD_REQUEST details: path schedule 'expected object, received string'; path notification.email 'expected object, received array'
Research Index: search CRISPR base-editing off-target papers, then read top paper with a queryapidone ✓GET /v2/search/research/papers?query=… 200 results with paperId/title/abstract (top: 'Decoding the role of chromatin context… EGOLD', PMC13172344); GET /v2/search/research/papers/{id}?query=chromatin%20accessibility 200 paper metadata + passages
Developer Index: POST /v2/search/developer 'How do I set a webhook on a Firecrawl crawl job in the Python SDK?'apidone ✓200 results with ids (web:…, pull_request:firecrawl/firecrawl#2705), urls, passages ('To set up a webhook, pass a webhook parameter when starting a crawl…')
Research Index: read_paper full text for top two papers (API query passages, MCP firecrawl_research_read_paper)apipartialGET /v2/search/research/papers/{id}?query=… 200 with paper metadata but passages [] for both papers; MCP read_paper -> '(no full-text passages available for this paper)'
Alexandria: Discover a company-enrichment tool and run apollo companies/enrich for firecrawl.devapiblockedPOST /v2/search sources:[alexandria] 200 tools (apollo companies/enrich, bulk-enrich, datalegion…), creditsUsed 0; POST /v2/scrape {alexandria:{provider:apollo,capability:companies/enrich}} -> 403 THIRD_PARTY_DATA_TERMS_REQUIRED 'An organization admin must accept the apollo provider's terms (version F-1.0.0)… https://www.firecrawl.dev/app/alexandria/apollo'
Monitor: Create hourly monitor on httpbin.org/uuid with goal + email to our inbox, run twice, read checksapidone ✓POST /v2/monitor 200 (cron '0 * * * *'); POST /v2/monitor/{id}/run x2; GET /v2/monitor/{id}/checks: check 1 completed new:1, check 2 completed changed:1, notificationStatus.email success; inbox got 'Monitor changes detected: AgentDrives test monitor' from notifications@notifications.firecrawl.dev
Webhooks: Crawl with webhook to an HTTPS endpoint we ownapiskippedNot tried: we have no public HTTPS receiver of our own in this drive and will not send job data to a third-party bin
Webhook signatures: Verify signed webhook payloadapiskippedNot tried: depends on delivery
Diagnose failed jobs: POST /v2/support/ask about the earlier SCRAPE_ACTION_ERRORapidone ✓200 answer: 'executeJavascript wraps your script inside an async IIFE … a bare top-level return is a SyntaxError (Illegal return statement). Rewrite … e.g. document.title;'names the exact error we hit
API keys: Create key 'agentdrives-temp' in dashboard, use it, revoke it, use it againbrowserdone ✓Create dialog -> new key fc-cae32…08dd97a3 listed; GET /v2/team/credit-usage with it 200; '…' menu > Revoke > 'Delete API key?' > Delete; key gone from list; same call -> 401 'Unauthorized: Invalid token'
API key: Retry documented cli-auth flow, waiting for page hydration before each clickbrowserdone ✓Onboarding 5 steps completed -> /cli-auth shows 'Authorize'/'Cancel'; after Authorize page says 'You're all set! Authorized for team: Personal'; POST /api/auth/cli/status -> {status:complete, teamName:Personal, apiKey: fc-f02b2… (the existing Default key)}; key works on /v2/team/credit-usage 200
Markdown docs: Accept: text/markdown on docs page, .md URL, OpenAPIapidone ✓docs.firecrawl.dev/features/scrape with Accept: text/markdown -> 200 content-type text/markdown, vary includes Accept; /features/scrape.md -> 200 text/markdown; www.firecrawl.dev with Accept: text/markdown -> text/html. OpenAPI docs.firecrawl.dev/api-reference/v2-openapi.json: openapi '3.0.0', 44 paths / 64 operations, no x-payment-info
Pay step: Probe 402s, subdomains, registries, docs for agent paymentapidone ✓Keyless POST /v2/crawl and /v2/agent -> 401 with WWW-Authenticate Bearer resource_metadata (no 402, no PAYMENT-REQUIRED); x402./mpp./agents.firecrawl.dev do not resolve/connect; x402 Bazaar lists only third-party resellers (stableenrich.dev/api/firecrawl/search, vaaya.ai, api.kadec0.xyz); mpp.dev lists 'firecrawl' with integration third-party, serviceUrl firecrawl.mpp.tempo.xyz (POST /v2/scrape -> 404); first-party: Stripe Projects (docs: firecrawl/api free, upgrade firecrawl/hobby|standard|growth via 'stripe projects upgrade firecrawl', paid with a Shared Payment Token on the Stripe account's payment method; docs tell agents to leave paid upgrades to the human). Dashboard Billing: Free plan, 'Payment method None, Add a card'; pricing 'Subscribe' click did not navigate in our agent's browser
Team invite: Invite our own second inbox the agent's inbox as Member in Settings > Teambrowserpartial'Invitation sent'; Pending Invitations lists an inbox@ 'Expires in 6 days'; invite mail 'You've been invited to join a Firecrawl team' arrived in an inbox inbox
Browser profiles: Persistent authenticated browser profilesnoneskippedUI-only per capability map; not tried for time and because it needs a login on a third-party site
Spend limit: Monthly pay-as-you-go capbrowserplan_gatedBilling tab: 'Smart Upgrade … we start a monthly Hobby subscription for 19 USD, and from then on pay-as-you-go adds credits at 5 USD per 1,000, up to the monthly cap you set'needs a paid subscription/card (Payment method: None)
IP restrictions: Allowlist IPs on keysnoneplan_gateddocs/features/ip-restrictions.md: 'IP Restrictions are an enterprise feature and are gated per organization.'
Key restrictions: Lock key to endpoints/formatsnoneplan_gateddocs/features/key-restrictions.md: 'Key Restrictions are an enterprise feature and are gated per organization.'
Activity logs: GET /v2/team/activity (documented in OpenAPI)apidone ✓200 data[] of our recent jobs with id, endpoint (scrape, research_paper_read…), api_version v2, created_at, target
Delete account: Find a documented API/CLI route to delete the accountnoneblockedOpenAPI v2 paths include /team/activity, credit-usage, queue-status… but no account/team deletion; docs/SKILL.md name none. Dashboard Settings > Account has 'Delete Account'
Cancel plan: Cancel/downgradenoneskippedNo paid plan was started. Documented routes: 'stripe projects upgrade firecrawl' -> free or 'stripe projects remove firecrawl' (cancels plan; account and key stay), or dashboard Billing

Also in Web scraping.