Back
Kevin Riedl

12 min read Β· 10 Aug 2026
Last reviewed

Next
Made on your device, with no Instagram connection. We copy the post link for Instagram’s Link sticker.

Firecrawl AnyDoc Review: 14 Formats to Markdown for AI Agents

Firecrawl AnyDoc is a fast local document-to-Markdown library for mixed Office files, not a complete document-intelligence platform. The open-source Rust project converts Word, PowerPoint, Excel, OpenDocument, RTF, EPUB and CSV files through one shared document model. It also passes text-based PDFs to pdf-inspector. For a team building RAG ingestion, an AI-agent upload feature or a knowledge-import pipeline, its appeal is simple: one dependency, consistent Markdown and no API call for routine files.

Our verdict after reviewing the code, benchmark method and alternatives on 10 August 2026: AnyDoc deserves a corpus-specific pilot when office documents dominate and local execution matters. It is a poor default when scans, handwriting, visual layout or typed field extraction dominate. This review targets the underserved buying question, AnyDoc versus Docling, MarkItDown or a managed parser, without competing with our separate PDF and OCR-routing coverage.

What is Firecrawl AnyDoc?

AnyDoc converts document bytes into a shared structural model and serializes that model as GitHub-Flavored Markdown. Its official repository and API reference list Rust, Node.js, Python, CLI and browser WebAssembly interfaces. Content-based detection reads file markers instead of trusting the extension, except for CSV, which has no signature and needs an extension or explicit format.

Input familyExamplesUseful output
WordDOC, DOCX, DOCMHeadings, lists, tables, links, notes and inline formatting
PowerPointPPT, PPTX and related presentation variantsSlide content, tables, links, media references and speaker notes
ExcelXLS, XLSX, XLSM, XLSBConsistent Markdown tables across legacy and modern workbooks
OpenDocumentODT, ODS, ODPThe same serializer used for Microsoft formats
Other structured filesRTF, EPUB, CSVNormalized text and structure without an office runtime
Text-based PDFPDF with a usable text layerLocal Markdown through the embedded pdf-inspector path

The boundary matters. Embedded assets remain available as bytes in the document model, while Markdown represents them with alt text or a reference. AnyDoc does not run OCR, interpret a chart, infer invoice fields, split text for embeddings or evaluate retrieval quality. It solves the conversion layer before those jobs.

What does the 4.4 ms benchmark actually prove?

Firecrawl reports a 4.4 ms median conversion time and an overall quality score of 81 for AnyDoc across its 14-format benchmark. The official AnyDoc launch and benchmark explanation says the comparison used 100 real-world documents and six alternatives. AnyDoc was the only tool in that test to cover all 14 formats.

Published detailReasonable conclusionMissing evidence
4.4 ms median per documentThe native path has low processing overhead on the benchmark machineCold start, upload time, p95 latency and your container size
81 overall quality scoreThe output compared well on completeness, structure, formatting and cleanlinessAn independent human evaluation or domain-specific correctness test
100 real-world documentsThe test is broader than one hand-picked DOCXThe corpus cannot be redistributed, so outsiders cannot inspect its mix
LLM judge with swapped output orderThe method attempts to reduce position biasAgreement with human reviewers and the cost of business-critical errors
Different tool coveragePer-format comparisons are more useful than one total scoreA single like-for-like score across an identical supported corpus

Treat this as credible vendor evidence, not a universal speed record. Pin the AnyDoc version, hardware, warm-up method and sample. Measure p50 and p95, structure acceptance, missing content, correction minutes and failed documents. A parser that finishes in milliseconds but corrupts one financial table is not fast in business terms.

AnyDoc vs Docling vs MarkItDown vs Firecrawl Parse

The right alternative depends on what your files contain, not which repository has the strongest launch week.

OptionBest fitMain trade-off
AnyDocMixed Office, OpenDocument, RTF, EPUB and CSV inputs that should stay localNo OCR or semantic field extraction
DoclingScans, images, complex PDF layout, tables and a richer lossless document modelMore models, dependencies, configuration and compute
MarkItDownPython teams wanting broad conversion, plugins and optional cloud integrationsFormat-specific dependencies and a different quality profile per converter
Firecrawl ParseTeams buying managed OCR, summaries or schema-shaped JSON instead of operating fallbacksNetwork transfer, vendor terms, per-call cost and a 50 MB documented limit
Keep the current parserYour accepted-document rate, cost and latency already meet the product targetYou must prove a migration has enough upside to fund and maintain it

Docling's current supported-format documentation includes PDF, Office, OpenDocument, EPUB, images, HTML, markup, audio and video, with OCR and structured export paths elsewhere in the toolkit. That breadth makes it a better candidate for layout-heavy or multimodal corpora, but not automatically a better lightweight Office converter.

Microsoft's MarkItDown documentation describes optional format dependencies, OCR through a plugin and billable Azure paths for higher-quality layout or structured extraction. It suits Python-centric products that value an extensible conversion toolkit. AnyDoc suits teams that want a narrow, local, multi-language binding around consistent office-to-Markdown conversion.

Firecrawl's managed Parse documentation adds OCR modes, summaries and schema-guided JSON. Choose it when managed exception handling is more valuable than keeping every byte and parser process inside your boundary. The local library and hosted API are not interchangeable products, even though AnyDoc powers part of the hosted path.

Build the product, not just the backlog

If this article maps to a real product decision, Wavect can help you scope, build, harden, or lead the software work with senior founder-level judgment.

Useful service paths:

How should AnyDoc fit into an AI-agent or RAG pipeline?

  1. Accept narrowly. Allow only required formats, enforce file and decompressed-size limits, replace user filenames and quarantine the upload.
  2. Detect from bytes. Compare the claimed extension with AnyDoc's content-based result. Reject a mismatch unless the product has an explicit recovery path.
  3. Parse in isolation. Bound CPU, memory, nesting and wall-clock time. Run public uploads away from the web process and credential store.
  4. Preserve provenance. Store file hash, original format, parser version, extraction timestamp, headings, tables and asset references.
  5. Validate the Markdown. Check required sections, character quality, row counts, totals, links and empty output before indexing.
  6. Route exceptions. Send image-only PDFs and embedded scans to an approved OCR or vision path. Send encrypted, malformed or unsupported files to a controlled review or rejection queue.
  7. Chunk after acceptance. Parsing creates source text. Chunking, metadata, permissions, embeddings, retrieval and answer citations remain separate responsibilities.
  8. Measure accepted documents. Track end-to-end cost and reviewer time, not only parser milliseconds.

For PDFs specifically, use our pdf-inspector OCR-routing review. It owns native-text detection, mixed-page routing and the boundary where OCR begins. For what happens after accepted Markdown, the EU RAG production-readiness checklist owns permissions, retrieval evaluation and answer citations. Keeping those intents separate prevents the new AnyDoc page from cannibalizing either guide.

Node.js quick start with a production boundary

The library API is deliberately small. The surrounding checks are application responsibilities:

import { toMarkdownBytes } from "@firecrawl/anydoc"

export async function parseAcceptedUpload(file) {
  enforceUploadLimits(file)
  const bytes = new Uint8Array(await file.arrayBuffer())

  const markdown = await toMarkdownBytes(bytes, file.name)
  const result = validateDocument(markdown)

  if (!result.accepted) {
    return routeForReview(file, result.reasons)
  }

  return {
    markdown,
    sha256: await hash(bytes),
    parser: "anydoc@PINNED_VERSION",
    sourceName: safeDisplayName(file.name)
  }
}

enforceUploadLimits, validateDocument, routeForReview, hash and safeDisplayName are product code, not AnyDoc APIs. Keep that distinction visible in architecture estimates. Installing the parser is the smallest part of a reliable ingestion feature.

Where is AnyDoc a poor fit?

  • Scanned or photographed documents: AnyDoc has no OCR model. Text-based PDF support does not change that limit.
  • Visual meaning: charts, signatures, handwritten changes, spatial forms and images need a vision or document-understanding layer.
  • Typed business fields: converting an invoice to Markdown is not the same as validating supplier, tax, line items and total against a schema.
  • Perfect Office rendering: the goal is clean structured text, not pixel-identical reproduction of a workbook, slide deck or legacy Word file.
  • Unbounded public upload: Rust and fixed library resource limits help, but do not replace sandboxing, malware controls, queue limits and patch ownership.
  • Independent benchmark requirements: the published speed and quality evidence comes from the project team and a private corpus. Procurement may require your own blind evaluation.

OWASP's file-upload security guidance recommends defense in depth: allowlisted extensions, content-type and signature checks, renamed files, size limits, isolated storage, malware scanning and parser hardening. Local conversion reduces one data-transfer risk. It does not make an untrusted Office file safe.

A ten-day AnyDoc evaluation plan

  1. Sample the real mix. Select at least 200 documents across every relevant format, language, age and source. Include malformed, encrypted, macro-enabled and oversized examples.
  2. Define acceptance. Label required headings, notes, tables, merged cells, links, formulas, page references and assets for each document class.
  3. Baseline the current path. Record accepted-document rate, p50, p95, infrastructure cost, reviewer minutes and fallback rate.
  4. Run a pinned AnyDoc build. Measure the same outcomes. Separate warm parsing from process start and upload time.
  5. Compare two alternatives. Use Docling on the hard visual subset and MarkItDown on the common formats, rather than copying a vendor-wide ranking.
  6. Attack the boundary. Test mislabeled, compressed, nested and resource-intensive files in the intended sandbox.
  7. Price the fallback. Count OCR calls, manual review, rejected uploads and failures that reach users.
  8. Choose by accepted action. Ship only if quality and safety stay above the gate while total cost or latency improves.

Use our AI agent cost-per-action model to keep retries and human repair in the denominator. If document ingestion is becoming product infrastructure, Wavect's AI enablement service can benchmark the corpus, build the routing layer and connect it to retrieval or workflow automation. The Twinsoft AI case study shows our approach to traceable AI output, while the MVP technology-selection guide helps decide which parser layers to own.

Frequently asked questions

What is Firecrawl AnyDoc?
AnyDoc is an MIT-licensed Rust library that converts Word, PowerPoint, Excel, OpenDocument, RTF, EPUB and CSV files into consistent GitHub-Flavored Markdown. It offers Rust, Node.js, Python, CLI and browser WebAssembly interfaces, plus text-based PDF support through pdf-inspector.
Does AnyDoc perform OCR?
No. It can convert documents with machine-readable content and text-based PDFs, but scans, photographs and image-only pages need a separate OCR or vision path.
Is AnyDoc faster than Docling?
AnyDoc was faster in Firecrawl's published local benchmark, with a 4.4 ms median, but the tools solve different ranges of problems and the corpus is private. Docling adds OCR, layout models and broader multimodal formats. Benchmark both on the subset each would own in production.
Should I use AnyDoc or MarkItDown?
Choose AnyDoc for a compact local parser with Rust, Node.js, Python and WebAssembly bindings across mixed office formats. Choose MarkItDown when a Python-first plugin ecosystem, additional media formats or optional Azure extraction paths matter more.
Can AnyDoc run fully in the browser?
Yes. The WebAssembly package accepts document bytes and the official demo converts files locally. Large or untrusted files still need a Web Worker, explicit limits and a rejection path so the interface remains responsive.
Is AnyDoc enough for RAG?
No. It can supply structured Markdown, but a production RAG system still needs document acceptance checks, chunking, metadata, access control, embeddings, retrieval evaluation, answer citations, monitoring and deletion handling.

Research boundary

Status checked 10 August 2026. Benchmark figures in this review are vendor-published results, not Wavect measurements. We reviewed the public repository, benchmark notes and official alternative documentation, but did not receive the private AnyDoc corpus or conduct a security audit. Versions, formats, hosted limits and pricing can change. Pin and verify them before procurement.

Final thoughts

AnyDoc removes a surprisingly expensive piece of plumbing: maintaining a different parser and output shape for every office format users upload. Its shared model, local execution and multi-language bindings make it a credible default for routine document-to-Markdown conversion.

The buying decision turns on the exception set. If scans, visual layouts and typed fields dominate, choose a richer or managed pipeline. If native office documents dominate, pilot AnyDoc against your own hardest files, isolate the parser, preserve provenance and measure accepted documents. The fastest parser is the one that reduces total review and recovery cost without weakening the quality gate.

Build the product, not just the backlog

If this article maps to a real product decision, Wavect can help you scope, build, harden, or lead the software work with senior founder-level judgment.

Useful service paths:

Inbox, without the noise

Follow the work that matters to you

Get a short email when we publish something new. Follow the whole blog or only the problems you care about.

What would you like to receive?
Choose your topics

Free, double opt-in, no tracking pixels.

Back
Kevin Riedl

12 min read Β· 10 Aug 2026
Last reviewed

Next

Get new posts by email

A short email when we publish. Free, no tracking.

Free, double opt-in, no tracking pixels.