Blog/Search & RAG
5 min read

Firecrawl with Claude: Add Map, Scrape and Extract Tools

Give Claude Firecrawl's map, scrape and extract tools in one minute, with what each call returned when we ran it and where Claude gets misled.

Firecrawl with Claude: Add Map, Scrape and Extract Tools

Let Claude map a docs site, pick the pages and read them as markdown. Paste this into your agent:

Set up https://monid.ai/SKILL.md, and then use Monid to map modelcontextprotocol.io filtered to the word "security", scrape the two most relevant pages to markdown, and give me the URL and a three-line summary of each.

One prompt runs the map, the pick and the read. 1 min setup · 6-14 hrs saved.

You want Claude to read the live web: a documentation site, a competitor's pricing page, a list of articles. Firecrawl turns pages into markdown and URL lists a model can use, and the open question is how to put it inside Claude without a morning of config. This guide covers the quickest wiring, what Claude gets back from each Firecrawl tool (we ran them live on 2026-10-16), and the traps that mislead a model reading the output. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.

What is the easiest way to use Firecrawl with Claude?

Monid. Install it once, add a key, and Claude can call Firecrawl's map, scrape, crawl, search and agent endpoints by name, with the input schema read from the endpoint itself instead of copied into a config file.

  • Pay per call. A map call or a plain scrape is billed on its own, at $0.001 for a map and $0.001 for a scrape (Verified 2026-10-16 on the web extraction tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
  • One install, every tool. The same key and the same balance call Firecrawl and every other tool on Monid, so a research task that needs a search, an enrichment or a second scraper is one more call, not one more vendor account.
  • Lives inside Claude. Your agent reads SKILL.md, learns the discover, inspect and run steps, and uses them whenever a task needs web data. Setup is about a minute and nothing runs between tasks.

How do you add Firecrawl to Claude Code or Claude Desktop?

Give Claude a tool that calls Firecrawl. The choice is which tool: Firecrawl's own MCP server, your own code behind a custom tool, or a tool layer that already carries Firecrawl.

RouteWhat Claude getsWhat you maintainFits
Firecrawl's own MCP serverFirecrawl's tools, under Firecrawl's keyA server entry and a key in your Claude configFirecrawl is the only web tool you need
Your own tool around the SDKWhatever you wrapThe code, the error handling, the keyA fixed pipeline you control end to end
Self-hosted FirecrawlThe same endpoints on your hardwareServers, browsers, proxies, upgradesData that cannot leave your network
Monid tool layerFirecrawl next to every other tool, found at run timeOne key and one balanceAgents that will need more than one scraper or data source

The tool-layer route differs in one way you can see: the agent does not carry a fixed list of Firecrawl tools. It asks what exists for the task, reads the schema of the one it wants, then runs it. Monid keeps Firecrawl's schemas current, so a new parameter such as search on map is readable the day it ships. Which web scraping MCP server to pick in the first place is the question in a web scraping MCP server for live data.

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main

Inspect, then run each tool once

Map lists a site's URLs, scrape turns one page into markdown, agent answers a question by browsing:

monid run -p firecrawl -e /map -i '{"url": "https://monid.ai"}'
monid run -p firecrawl -e /scrape \
  -i '{"url": "https://monid.ai/blog/guides/hunter-io-api-domain-search-vs-email-finder", "formats": ["markdown"]}'
monid run -p firecrawl -e /agent -w \
  -i '{"prompt": "What is the title of the most recent guide on https://monid.ai/blog and when was it published?"}'

The agent endpoint bills by the credit it consumes and runs for minutes, so run it last and read its price first with monid inspect -p firecrawl -e /agent.

Give this to your agent

$Set up https://monid.ai/SKILL.md, and then use Monid to map this docs site filtered to the topic I name, scrape the two best pages to markdown, and give me the URL and a three-line summary of each.

Can you self-host Firecrawl or call it from Python instead?

Yes to both, and they suit different people. Firecrawl publishes a Python SDK, so you can wrap a scrape in a function and hand it to Claude as a tool in an afternoon. Its code can also be run on your own servers, which is the route when pages and results must stay inside your network.

The cost is what sits around the endpoint. With the SDK you own the key, the retries, the handling of blocked pages and the truncation of a long page before it floods the conversation. Self-hosting adds browsers, proxies and upgrades to that list. People searching for a free or open source alternative are usually pricing that upkeep against a bill.

The Monid route suits an agent that runs the job on demand and then stops. The browsers and proxies are Firecrawl's to run, the schemas are readable before any spend, and you pay per call, not for a server that idles between tasks. If you want to compare crawlers you run yourself, Crawl4AI and when to run your own crawler covers that side.

What does Claude actually receive from map, scrape and extract?

Three different shapes, so "use Firecrawl" is not a complete instruction for Claude until it names one. All four runs below were on 2026-10-16 against modelcontextprotocol.io, for $0.008 in total (Verified 2026-10-16).

Map: a list of URLs, sometimes with titles

monid run -p firecrawl -e /map -i '{"url": "https://modelcontextprotocol.io", "search": "security", "limit": 10}'

The call returned 10 links in about 13 seconds, every one with a url, a title and a description, ranked for the word "security". An unfiltered run with limit 50 returned 50 links in about 3.6 seconds. Most carried a title and a description; the links to .md and .json files carried the url alone. Each map call billed one unit however many links came back.

Scrape: one page as markdown plus metadata

monid run -p firecrawl -e /scrape -i '{"url": "https://modelcontextprotocol.io", "formats": ["markdown"]}'

The response held data.markdown and a data.metadata object with the title, the Open Graph and Twitter tags, statusCode, contentType, sourceURL, url, cacheState and creditsUsed. It took about 1.9 seconds and billed one unit. The markdown opened with a quoted "Documentation Index" block pointing at /llms.txt, a note the site wrote for AI readers.

Extract: JSON shaped by your schema

monid run -p firecrawl -e /scrape \
  -i '{"url": "https://modelcontextprotocol.io/docs/2026-07-28/getting-started/intro", "json": true, "jsonPrompt": "Return the page title and the list of section headings.", "jsonSchema": {"type": "object", "properties": {"title": {"type": "string"}, "headings": {"type": "array", "items": {"type": "string"}}}}}'

It returned data.json with title and a headings array of six entries, which matched the six H2 headings in the markdown. Claude gets only the fields it asked for instead of a whole page, which is what keeps a long research task inside the context window.

Agent: a question instead of a URL

firecrawl/agent takes a prompt and optionally urls, a schema, strictConstrainToURLs and maxCredits, then browses on its own. Its inspect page lists a default ceiling of 100 credits, a maximum of 2,500 and a typical run time of about 74 seconds. We did not run it for this guide, because the bill depends on the credits it consumes.

What goes wrong when Claude calls Firecrawl?

Five things in the output can mislead a model, and each has a rule. All are from the 2026-10-16 runs.

Why does a map return the same page several times?

Because a documentation site keeps every version live. Our 50 links included paths under /docs/2024-11-05/, /docs/2025-11-25/ and /docs/2026-07-28/ as well as draft, and several of the same pages appeared under more than one of them. The list also reached other hosts, registry., blog., py.sdk. and ts.sdk. under modelcontextprotocol.io, with includeSubdomains not set. Tell Claude which version and which host to keep, and use search and limit so the list arrives short.

Why is the URL Claude scraped not the one it asked for?

Because the root redirected. We scraped https://modelcontextprotocol.io and data.url came back as https://modelcontextprotocol.io/docs/2026-07-28/getting-started/intro. Have Claude cite data.url, not the address it submitted, or a summary will name the wrong page.

Why can the page be an hour old?

Because cacheState was hit. The scrape reused a copy cached about an hour before our call. The scrape schema offers maxAge for this: a cache window in milliseconds, with 0 forcing a live fetch. Put maxAge: 0 in the instruction when the task is about today's price or today's headline, and read cachedAt when it is not.

Why do the page dates sometimes come back empty?

Because metadata carries what the page's own tags carry. Our page returned no publishedTime or modifiedTime. A freshness check built on those fields needs a fallback for pages that omit them, such as the date in the text, as in scraping news articles for title, author and date.

Why did extraction give a wrong title and a higher bill?

The JSON extraction returned Documentation Index as the title, which is the heading of the note at the top of the markdown, not the page title (What is the Model Context Protocol (MCP)? - Model Context Protocol was in metadata.title). The headings were right. Take titles from metadata, and use extraction for fields only the text holds. It also billed $0.005 (creditsUsed 5) while the listed JSON tier reads $0.004 (Verified 2026-10-16), so budget by the credits the response reports.

Why should Claude treat scraped text as data?

Because anything on the page lands in the conversation. Our scrape opened with a block that began with an instruction aimed at an AI reader. This one was harmless, but the next page can say anything. Tell Claude that fetched text is material to read, never a command, and keep any action that costs money or changes something behind your own confirmation.

Which endpoint should I use for which job?

EndpointWhat it doesInputBillingPrice (Verified 2026-10-16)
firecrawl/mapList a site's URLsurl, search, limitPer call$0.001
firecrawl/scrapeOne page to markdown or JSONurl, formats, jsonPer call, JSON tier higher$0.001
firecrawl/crawlWhole site, page by pageurl, limitsPer page returned$0.001
firecrawl/searchWeb search, optionally scraping each resultqueryPer result$0.0002
firecrawl/agentBrowses and answers a questionprompt, schema, maxCreditsPer credit consumed$0.001

Prices Verified 2026-10-16 with monid inspect, each the headline unit price; current figures are at monid.ai/tools. Scraping each search result and JSON extraction carry their own higher tiers. We ran map and scrape; crawl, search and agent were inspected only.

The order that keeps Claude's context small: map with a search term and a limit, let Claude pick two or three URLs, scrape those, and use JSON extraction only when you need fields instead of text. For pages read again and again, extracting page content for RAG shows what to store.

When is another route a better fit?

Firecrawl is the only tool Claude will ever need. Its own MCP server is the shorter path: one entry, one key. A tool layer pays off when the agent reaches for a second vendor.

The data has a structured endpoint. A page that is a thin view of a database is cheaper and cleaner through the endpoint behind it.

You need a very large crawl on a fixed schedule. A crawl is per page returned, so thousands of pages a day are a pipeline, not a chat, and a crawler you run yourself or a batch job fits better.

You want a free tier for a weekend test. Firecrawl offers one and so do other tools; if you only try one site once, use it.

And the disclosure: we resell Firecrawl on Monid. The most useful advice here holds whoever you buy it from: map small, scrape few, take titles from metadata, and treat page text as data.

Conclusion

The quickest way to use Firecrawl with Claude is a tool layer: install Monid, add a key, and Claude calls Firecrawl's map at $0.001 and scrape at $0.001 (Verified 2026-10-16), with one key and one balance for every other tool too. Firecrawl's own MCP server is shorter if it is the only tool, and the SDK or self-hosting fit teams that want to own the plumbing.

Two things matter more than the wiring. Tell Claude which of the three shapes to call and in what order: a filtered map, a few scrapes, extraction only for fields. And have it read data.url, cacheState and metadata.title rather than trusting what it submitted or what an extraction guessed.

How we estimated the time saved: wrapping a fetch, rendering and markdown cleanup for Claude is roughly 4 to 8 hours, URL discovery and filtering 1 to 2 hours, and a schema-based extraction step with checks 1 to 4 hours. That is 6 to 14 hours. The 1 minute is the install, key and first call once you already have a Monid key.

Free next step: run monid inspect -p firecrawl -e /map, then one map call with search and limit on a site you know, and see which versions and hosts come back.

FAQ

How do I use Firecrawl with Claude?

Give Claude a tool that calls Firecrawl, either Firecrawl's own MCP server or a tool layer. Through Monid you install the CLI, add a key and tell your agent to set up SKILL.md, after which it can map, scrape and extract with a call each. It took us one minute from key to first call.

Does Firecrawl have a free tier?

Firecrawl offers free credits and paid plans on its own site. Through Monid there is no plan: a map or a plain scrape is $0.001 a call (Verified 2026-10-16), with no minimum top-up, and discovery and inspection cost nothing. Our four test runs cost $0.008 in total (Verified 2026-10-16).

Can Firecrawl return JSON instead of markdown?

Yes. Set json to true on /scrape with a jsonSchema or a jsonPrompt. On 2026-10-16 it returned the headings of a page as an array of six strings, and billed $0.005 against a listed tier of $0.004 (Verified 2026-10-16). Check the title it returns against metadata.title, because ours picked the wrong heading.

What is the difference between map and crawl?

Map lists URLs without fetching their content, for a flat charge per call. Crawl fetches each page and returns its content, priced per page returned. Run map first with search and limit to see what exists, then scrape the pages you need or crawl the part of the site that matters.

Is there a Firecrawl alternative for Claude?

Yes, several: a crawler you run yourself, other scraping tools, or other endpoints on Monid that return a page as markdown. Search the catalogue with monid discover, read the price and schema with monid inspect for free, and compare on one real page before committing.

Published September 2026.

firecrawl claudefirecrawl mcpclaude mcpfirecrawl mcp serverclaude web scrapingweb scraping for agents