Firecrawl Review: Markdown Extraction Test (2026)
Strong for full-page extraction on JS-heavy or protected pages, but the Markdown is noisy
Our take
- You need full-page markdown or text from live web search, not just snippets.
- You need to extract public pages without writing selectors or manual DOM mapping.
- You need to reach JavaScript-rendered or anti-bot protected public pages.
- You need near-clean semantic Markdown with boilerplate already removed.
Our take
Firecrawl is strongest when you want a lot of usable page content from live web search or single-URL scraping, especially on JavaScript-hydrated and public anti-bot-protected pages, and you do not want to write selectors. The tradeoff is that the output is often noisy and flattened rather than semantically cleaned, so it works best with a downstream cleanup step. As a search layer, it returned very large rendered-page results, but recall, freshness, and multi-source performance were only middling, and it was the slowest, most credit-hungry tool in the benchmark.
In-Depth Review
Our detailed analysis of Firecrawl — features, performance, and real-world testing.
Feature-by-Feature Breakdown
Live Web Search with Markdown ExtractionReturns full-page markdown from search results, with very large content volume, but retrieval quality is mixed.▾
Feature tested: Live Web Search with Markdown Extraction
Result: Partial
Verdict: Returns full-page markdown from search results, with very large content volume, but retrieval quality is mixed.
Expected behavior: Firecrawl's `/v2/search` mode with `scrapeOptions.formats=[markdown]` returned substantially more usable text than snippet-first search APIs on answerable benchmark queries. The same search behavior also stayed non-fabricating on unanswerable probes such as Serper SOC2 date, Jina ARR, Exa Enterprise pricing, Olostep index size, and Linkup index size.
Test case: Text prompt → Text prompt
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Text prompt): Output
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Text prompt): Output
What changed: Text prompt transformed into Text prompt
Test case: Text prompt → Text/code file
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Text/code file): Returned generic SOC2 explainer content rather than inventing a Serper-specific date. — FIRECRAWL-raw-Q48.json
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Text/code file): Returned generic SOC2 explainer content rather than inventing a Serper-specific date. — FIRECRAWL-raw-Q48.json
What changed: Text prompt transformed into Text/code file
Test case: Text prompt → Text/code file
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Text/code file): Surfaced the same GetLatka artifact seen in other tools, including the '$6.3M Est. ARR' page. — FIRECRAWL-raw-Q49.json
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Text/code file): Surfaced the same GetLatka artifact seen in other tools, including the '$6.3M Est. ARR' page. — FIRECRAWL-raw-Q49.json
What changed: Text prompt transformed into Text/code file
Test case: Text prompt → Text/code file
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Text/code file): Surfaced Exa's real pricing-page content without inventing an Enterprise-specific number. — FIRECRAWL-raw-Q50.json
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Text/code file): Surfaced Exa's real pricing-page content without inventing an Enterprise-specific number. — FIRECRAWL-raw-Q50.json
What changed: Text prompt transformed into Text/code file
Test case: Text prompt → Text/code file
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Text/code file): Surfaced Olostep's own homepage/docs content without inventing a specific page count. — FIRECRAWL-raw-Q51.json
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Text/code file): Surfaced Olostep's own homepage/docs content without inventing a specific page count. — FIRECRAWL-raw-Q51.json
What changed: Text prompt transformed into Text/code file
Test case: Text prompt → Text/code file
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Text/code file): Surfaced Linkup marketing content and an unrelated YouTube interview, not the claimed 'billions of pages a day' detail. — FIRECRAWL-raw-Q52.json
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Text/code file): Surfaced Linkup marketing content and an unrelated YouTube interview, not the claimed 'billions of pages a day' detail. — FIRECRAWL-raw-Q52.json
What changed: Text prompt transformed into Text/code file
Why it matters / Conclusion: Good when the model needs a lot of source text, but not a clear winner on retrieval quality, freshness, or speed.
Firecrawl's `/v2/search` mode with `scrapeOptions.formats=[markdown]` returned substantially more usable text than snippet-first search APIs on answerable benchmark queries. The same search behavior also stayed non-fabricating on unanswerable probes such as Serper SOC2 date, Jina ARR, Exa Enterprise pricing, Olostep index size, and Linkup index size.
Robust Dynamic-Page ScrapingPreviously reported to scrape JS-rendered and bot-protected public pages without manual selectors.▾
Feature tested: Robust Dynamic-Page Scraping
Result: Passed
Verdict: Previously reported to scrape JS-rendered and bot-protected public pages without manual selectors.
Expected behavior: Firecrawl was reported to scrape a static recipe page, a JavaScript-hydrated Nike product page, and a Glassdoor jobs page behind anti-bot protections without manual selectors. The published report also noted that the resulting markdown could be noisy.
Test case: Text prompt → Text prompt
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Text prompt): Output
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Text prompt): Output
What changed: Text prompt transformed into Text prompt
Why it matters / Conclusion: Still a useful published strength, but it was not revalidated in this 2026-09-04 search run.
Firecrawl was reported to scrape a static recipe page, a JavaScript-hydrated Nike product page, and a Glassdoor jobs page behind anti-bot protections without manual selectors. The published report also noted that the resulting markdown could be noisy.
URL-to-Markdown ExtractionAccurate text capture, but poor semantic filtering.▾
Feature tested: URL-to-Markdown Extraction
Result: Partial
Verdict: Accurate text capture, but poor semantic filtering.
Expected behavior: Converts a public URL into Markdown without manual CSS selectors or DOM mapping. The member cards were exercised on recipe-blog pages, where Firecrawl preserved article structure and core text while also carrying along some boilerplate and page chrome.
Test case: Text prompt → Text prompt
Input type: Text prompt
Input used: Input artifact (Text prompt): Recipe blog URL
Observed output: Output artifact (Text prompt): Observed result
Input artifact: Input artifact (Text prompt): Recipe blog URL
Output artifact: Output artifact (Text prompt): Observed result
What changed: Text prompt transformed into Text prompt
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Image): Firecrawl preserved the article's headings, ingredients, and step-by-step baking workflow, but it also scraped the full multi-level navigation tree, sidebar components, thousands of user review nodes, and the footer block. — output1.png
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Image): Firecrawl preserved the article's headings, ingredients, and step-by-step baking workflow, but it also scraped the full multi-level navigation tree, sidebar components, thousands of user review nodes, and the footer block. — output1.png
What changed: Text prompt transformed into Image
Why it matters / Conclusion: Good at flattening page text into Markdown; not good at separating main content from site chrome.
Converts a public URL into Markdown without manual CSS selectors or DOM mapping. The member cards were exercised on recipe-blog pages, where Firecrawl preserved article structure and core text while also carrying along some boilerplate and page chrome.

JavaScript-Rendered Page ExtractionHydration worked, but cleanup did not.▾
Feature tested: JavaScript-Rendered Page Extraction
Result: Partial
Verdict: Hydration worked, but cleanup did not.
Expected behavior: Renders client-side JavaScript before extracting page content. The member cards were exercised on a Nike product page / SPA, where Firecrawl waited for hydration and captured dynamic product details such as title, price, and size availability.
Test case: Text prompt → Text prompt
Input type: Text prompt
Input used: Input artifact (Text prompt): Nike SPA product URL
Observed output: Output artifact (Text prompt): Observed result
Input artifact: Input artifact (Text prompt): Nike SPA product URL
Output artifact: Output artifact (Text prompt): Observed result
What changed: Text prompt transformed into Text prompt
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Image): Firecrawl waited for JavaScript hydration and captured the title, pricing, and full size menu, but it also returned raw backend code artifacts, localization links, and raw media-attachment trees. — firecrawl_output_1.png
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Image): Firecrawl waited for JavaScript hydration and captured the title, pricing, and full size menu, but it also returned raw backend code artifacts, localization links, and raw media-attachment trees. — firecrawl_output_1.png
What changed: Text prompt transformed into Image
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Dynamic product page URL
Observed output: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Nike product page with the rendered product title and key sections such as Size & Fit and Shipping & Retu — firecrawl-firecrawl-nike-scrape-markdown-output.png
Input artifact: Input artifact (Text prompt): Dynamic product page URL
Output artifact: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Nike product page with the rendered product title and key sections such as Size & Fit and Shipping & Retu — firecrawl-firecrawl-nike-scrape-markdown-output.png
What changed: Text prompt transformed into Image
Why it matters / Conclusion: Reliable for pulling data that only appears after hydration, but the returned Markdown is still noisy and messy.
Renders client-side JavaScript before extracting page content. The member cards were exercised on a Nike product page / SPA, where Firecrawl waited for hydration and captured dynamic product details such as title, price, and size availability.


Firecrawl returned a successful Markdown scrape of the Nike product page with the rendered product title and key sections such as Size & Fit and Shipping & Returns. The researcher also observed that the full menu of dynamically loaded size variations was captured, confirming JavaScript execution. However, the output still contained extra localization links, asset references, and raw media-related clutter instead of a tightly cleaned product extract.
Anti-Bot Protected Page AccessIt got through the wall, but not cleanly.▾
Feature tested: Anti-Bot Protected Page Access
Result: Partial
Verdict: It got through the wall, but not cleanly.
Expected behavior: Accesses public pages protected by anti-bot or edge-defense layers and returns the underlying content. The member cards were exercised on a Glassdoor job listing, where Firecrawl got through Cloudflare-style protection and retrieved live job information despite noisy output.
Test case: Text prompt → Text prompt
Input type: Text prompt
Input used: Input artifact (Text prompt): Glassdoor job listing URL
Observed output: Output artifact (Text prompt): Observed result
Input artifact: Input artifact (Text prompt): Glassdoor job listing URL
Output artifact: Output artifact (Text prompt): Observed result
What changed: Text prompt transformed into Text prompt
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Input
Observed output: Output artifact (Image): Firecrawl bypassed the protection layer and recovered the job listing, corporate profile name, salary estimates, and required skill arrays, but the result was interleaved with navigation buttons, search filters, login fields, and internal links. — firecrawl_output_3.png
Input artifact: Input artifact (Text prompt): Input
Output artifact: Output artifact (Image): Firecrawl bypassed the protection layer and recovered the job listing, corporate profile name, salary estimates, and required skill arrays, but the result was interleaved with navigation buttons, search filters, login fields, and internal links. — firecrawl_output_3.png
What changed: Text prompt transformed into Image
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Protected jobs page URL
Observed output: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Glassdoor jobs page, including jobs-page text and navigation links. The researcher reported that it bypas — firecrawl-firecrawl-glassdoor-scrape-markdown-output.png
Input artifact: Input artifact (Text prompt): Protected jobs page URL
Output artifact: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Glassdoor jobs page, including jobs-page text and navigation links. The researcher reported that it bypas — firecrawl-firecrawl-glassdoor-scrape-markdown-output.png
What changed: Text prompt transformed into Image
Why it matters / Conclusion: Strong access layer for protected public pages, but the extracted Markdown still needs post-processing to become usable.
Accesses public pages protected by anti-bot or edge-defense layers and returns the underlying content. The member cards were exercised on a Glassdoor job listing, where Firecrawl got through Cloudflare-style protection and retrieved live job information despite noisy output.


Firecrawl returned a successful Markdown scrape of the Glassdoor jobs page, including jobs-page text and navigation links. The researcher reported that it bypassed the page’s protection layer and pulled active job listings, company names, salary information, and technical skill details, but the resulting text was broken up by navigation controls, filters, internal links, and login-related layout elements.
Single-URL page scraping to MarkdownIt preserved article text and markdown structure, but did not meaningfully filter site boilerplate.▾
Feature tested: Single-URL page scraping to Markdown
Result: Passed
Verdict: It preserved article text and markdown structure, but did not meaningfully filter site boilerplate.
Expected behavior: Firecrawl can take a public URL and return a Markdown version of the page without manual CSS selection. This was tested on Sally’s Baking Addiction’s chewy chocolate chip cookies page, where it preserved the article’s textual structure, including headings, lists, and linked sections, but also pulled large amounts of navigation, sidebar, review, and footer content into the same output.
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Recipe blog URL
Observed output: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Sally’s Baking Addiction recipe page. The output preserved the page title, heading structure, links, ingr — firecrawl-firecrawl-scrape-dashboard-nike-page.png
Input artifact: Input artifact (Text prompt): Recipe blog URL
Output artifact: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Sally’s Baking Addiction recipe page. The output preserved the page title, heading structure, links, ingr — firecrawl-firecrawl-scrape-dashboard-nike-page.png
What changed: Text prompt transformed into Image
Why it matters / Conclusion: Good raw Markdown conversion from a public URL, weak semantic cleanup.
Firecrawl can take a public URL and return a Markdown version of the page without manual CSS selection. This was tested on Sally’s Baking Addiction’s chewy chocolate chip cookies page, where it preserved the article’s textual structure, including headings, lists, and linked sections, but also pulled large amounts of navigation, sidebar, review, and footer content into the same output.

Firecrawl returned a successful Markdown scrape of the Sally’s Baking Addiction recipe page. The output preserved the page title, heading structure, links, ingredients, and recipe flow, but it also included major site-wide navigation items, category links, and other boilerplate instead of isolating only the main article body.
JavaScript-rendered page extractionIt successfully waited for client-side rendering and captured dynamic product details, but the final Markdown remained cluttered.▾
Feature tested: JavaScript-rendered page extraction
Result: Passed
Verdict: It successfully waited for client-side rendering and captured dynamic product details, but the final Markdown remained cluttered.
Expected behavior: Firecrawl can scrape pages that rely on client-side JavaScript hydration. This was tested on a Nike Air Force 1 product page, where it captured dynamic product details and the full size run after rendering, showing that the tool waited for the page’s JavaScript state to load before extracting content.
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Dynamic product page URL
Observed output: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Nike product page with the rendered product title and key sections such as Size & Fit and Shipping & Retu — firecrawl-firecrawl-nike-scrape-markdown-output.png
Input artifact: Input artifact (Text prompt): Dynamic product page URL
Output artifact: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Nike product page with the rendered product title and key sections such as Size & Fit and Shipping & Retu — firecrawl-firecrawl-nike-scrape-markdown-output.png
What changed: Text prompt transformed into Image
Why it matters / Conclusion: Strong JS rendering support, but not strong content cleanup.
Firecrawl can scrape pages that rely on client-side JavaScript hydration. This was tested on a Nike Air Force 1 product page, where it captured dynamic product details and the full size run after rendering, showing that the tool waited for the page’s JavaScript state to load before extracting content.

Firecrawl returned a successful Markdown scrape of the Nike product page with the rendered product title and key sections such as Size & Fit and Shipping & Returns. The researcher also observed that the full menu of dynamically loaded size variations was captured, confirming JavaScript execution. However, the output still contained extra localization links, asset references, and raw media-related clutter instead of a tightly cleaned product extract.
Anti-bot page accessIt got through a protected jobs page and pulled useful job data, but the extracted text was still mixed with interface noise.▾
Feature tested: Anti-bot page access
Result: Passed
Verdict: It got through a protected jobs page and pulled useful job data, but the extracted text was still mixed with interface noise.
Expected behavior: Firecrawl can access and extract content from pages protected by anti-bot layers. This was tested on a Glassdoor software engineer jobs page, where it successfully returned live jobs-page content despite Cloudflare-style protections and heavy page chrome.
Test case: Text prompt → Image
Input type: Text prompt
Input used: Input artifact (Text prompt): Protected jobs page URL
Observed output: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Glassdoor jobs page, including jobs-page text and navigation links. The researcher reported that it bypas — firecrawl-firecrawl-glassdoor-scrape-markdown-output.png
Input artifact: Input artifact (Text prompt): Protected jobs page URL
Output artifact: Output artifact (Image): Firecrawl returned a successful Markdown scrape of the Glassdoor jobs page, including jobs-page text and navigation links. The researcher reported that it bypas — firecrawl-firecrawl-glassdoor-scrape-markdown-output.png
What changed: Text prompt transformed into Image
Why it matters / Conclusion: Very good at getting data out of protected pages, but the output is not clean enough to use as-is.
Firecrawl can access and extract content from pages protected by anti-bot layers. This was tested on a Glassdoor software engineer jobs page, where it successfully returned live jobs-page content despite Cloudflare-style protections and heavy page chrome.

Firecrawl returned a successful Markdown scrape of the Glassdoor jobs page, including jobs-page text and navigation links. The researcher reported that it bypassed the page’s protection layer and pulled active job listings, company names, salary information, and technical skill details, but the resulting text was broken up by navigation controls, filters, internal links, and login-related layout elements.
Zero-selector Markdown extractionAccurate text capture, but poor semantic filtering.▾
Feature tested: Zero-selector Markdown extraction
Result: Partial
Verdict: Accurate text capture, but poor semantic filtering.
Expected behavior: Converts a public URL into Markdown without manual DOM selection. On a noisy recipe blog, Firecrawl preserved the article structure, ingredients, and step-by-step baking instructions with strong textual fidelity, but it also scraped the full primary navigation tree, sidebar/history components, thousands of user review nodes, and the footer into the same Markdown output.
Test case: Text prompt → Text prompt
Input type: Text prompt
Input used: Input artifact (Text prompt): Recipe blog URL
Observed output: Output artifact (Text prompt): Observed result
Input artifact: Input artifact (Text prompt): Recipe blog URL
Output artifact: Output artifact (Text prompt): Observed result
What changed: Text prompt transformed into Text prompt
Why it matters / Conclusion: Good at flattening page text into Markdown; not good at separating main content from site chrome.
Converts a public URL into Markdown without manual DOM selection. On a noisy recipe blog, Firecrawl preserved the article structure, ingredients, and step-by-step baking instructions with strong textual fidelity, but it also scraped the full primary navigation tree, sidebar/history components, thousands of user review nodes, and the footer into the same Markdown output.
Credit-based subscription plans
Plans reported in the research.
Enterprise includes unlimited credits and a dedicated SLA.
Banner Preview
How the embed badge will look on your site

Embed HTML
Copy this code to your website source
Quick Integration Guide
- 1Copy the HTML code block above.
- 2Paste it into your site's HTML or CMS editor.
- 3Banner appears instantly on your page.
- 4Links back to your tool profile here.
Similar Tools
Discover more AI tools like Firecrawl to enhance your workflow.
Comments (0)
Need a custom AI solution for this use case?
If you are looking to build a custom web scraping, content extraction, or crawl automation system for your business or internal workflow, email us at contact@futuresmart.ai.
Found something inaccurate or missing? We try to keep our AI research accurate and useful. If you found outdated information, an issue, or have a suggestion, email us at collaborate@aidemos.com.