Web scraping API for LLMs — converts any website to clean markdown. Current version is 4.21.0 (Mar 2026). Two separate PyPI packages: firecrawl-py (official SDK) and firecrawl (different package). Class renamed from FirecrawlApp to Firecrawl in v2. Method names changed: scrape_url() → scrape(), crawl_url() → crawl(). Extreme API churn — 0.x to 4.x in one year.
pip install firecrawl-pyVerified import paths — ran on the pinned version, not inferred.
v2+ API. scrape() for single URLs, crawl() blocks until done, start_crawl() for async.
Replace: from firecrawl import FirecrawlApp → from firecrawl import Firecrawl. Replace: FirecrawlApp(api_key=...) → Firecrawl(api_key=...)
Update all method calls: app.scrape_url(url) → firecrawl.scrape(url, formats=[...]), app.crawl_url(url, params) → firecrawl.crawl(url, ...)
Pin exact version in requirements.txt. Check GitHub releases before upgrading.
Always use pip install firecrawl-py. The import is still from firecrawl import Firecrawl.
Use SDK snake_case field names: result.metadata.source_url not result.metadata.sourceURL.
Ensure the `FIRECRAWL_API_KEY` environment variable is set with your Firecrawl API key, or pass the API key directly when initializing the client: `firecrawl = Firecrawl(api_key='YOUR_API_KEY')`.
Ensure the `FIRECRAWL_API_KEY` environment variable is set with a valid API key, or pass the `api_key` argument directly to the `Firecrawl` constructor: `Firecrawl(api_key='YOUR_API_KEY')`.