Webfold
Menu

Performance

What Webfold does, and how fast it does it.

Webfold converts a web page to Markdown in a median 4.6 µs in process (the conversion step only, on 54 public pages) and turns a 7,000-page live site into Markdown in about 16 seconds on four cores over the network; each job below lists its own speed, throughput and memory, with the scope of every figure.

Figures from: HTML to Markdown conversion benchmark, A whole site to Markdown benchmark.

9 jobs. For each: what goes in, what comes out, and the speed, throughput and memory measured on that job alone. How it compares with other tools comes after, on the compare pages.

Last updated , the newest measurement or check on record for this page.

At a glance

What are the jobs, and the headline number for each?

JobSpeedThroughput
Turn a web page into clean Markdown4.6 µs a page, in processAbout 217,000 pages a second per core, conversion only
Crawl a whole site into a folder of Markdown7,000 live pages in about 16 s427 to 443 pages a second on 4 cores, over the network
Read web archives (WARC) at volumeNot a latency jobUp to 26,675 pages a second on 8 threads
Convert Word, Excel, PowerPoint, OpenDocument and ebooks to Markdown27.7 µs a document, in process203,854 documents a second on 64 workers
Read PDFs, with OCR when the page is a picture5 to 12 ms a text file; 0.6 to 1.0 s a scanned pageNot measured at scale
Read LaTeX papers and BibTeX bibliographiesAbout 4 ms a LaTeX fileNot measured at scale
Run a page's scripts and drive it like a browser8 ms to start, 70.7 ms a scripted task106.6 tasks a second in 30 MB
Parse search results and search a folder1.4 ms a results page49.3 MB a second parsing; 0.42 s to index 554 files
How good is the extraction?F1 0.861 on 511 pagesLevel with Trafilatura (0.863 re-run here), behind rs-trafilatura (0.893 published)

Job

Turn a web page into clean Markdown.

Takes the HTML of a page, from a file or a URL, and returns Markdown with the headings, links, tables and code kept and the navigation, banners and footers that repeat across a site folded away. No browser is started and no page tree is built.

Command: webfold md page.html · webfold scrape https://example.com

MeasureWebfoldScope
Convert one page, in process4.6 µs median54 public pages, hot, conversion step only. One core converts about 217,000 pages a second at that rate (1 ÷ 4.601 µs).
Convert one page, fresh process0.37 ms medianIncludes starting the process and reading the file.
Fetch and convert one live page90 ms wall, 14.9 MB peak memoryOne scrape on a 16-core host, including the network. Directional.

Evidence: HTML conversion, Footprint. Compared with: Firecrawl, Scrapling.

Job

Crawl a whole site into a folder of Markdown.

Takes a sitemap or a list of URLs, fetches every page (robots.txt is always honoured), converts each one and writes one Markdown file per page, with a manifest and a failure ledger so an interrupted run can resume.

Command: webfold bulk sitemap.xml

MeasureWebfoldScope
A live site, 7,000 pages15.8 to 16.4 s (427 to 443 pages a second)MDN, 96 requests at a time, one 4-core machine, 0 failures on two different samples. 1.27 GB of HTML became about 35 MB of Markdown.
The same crawl against a local server7,718 to 8,703 pages a second7,000 and 10,000 pages on loopback: Webfold's own cost, without the network.
A local crawl, no network90.6 pages a second5 repeats of 50 pages; 27 MB sampled memory.

Evidence: Bulk sitemap crawl, Footprint. Compared with: Firecrawl, Crawl4AI.

Job

Read web archives (WARC) at volume.

Captures pages to WARC, replays them, and extracts clean text from archives such as Common Crawl, with the exact bytes kept for audit.

Command: webfold warc crawl.warc.gz --threads 8

MeasureWebfoldScope
Seed path, 8 threads26,675 pages a second84,749-page Common Crawl subset (15.9 GB); 4.8 GB peak memory.
Raw WARC, 8 threads14,238 pages a second15.2 GB peak memory.
Seed path, 1 thread2,943 pages a second35 MB peak memory.

These figures come from the research paper's run and have not been re-measured on the current source.

Evidence: WARC throughput.

Job

Convert Word, Excel, PowerPoint, OpenDocument and ebooks to Markdown.

Reads DOCX, PPTX, XLSX, XLSM, XLSB, ODT, ODS, ODP, EPUB, RTF and CSV in process, and the text of legacy DOC files,, with no Office installation and no external converter, and returns Markdown.

Command: webfold convert report.docx

MeasureWebfoldScope
One document, in process27.7 µs median45 public fixtures, hot.
Throughput, 1 worker17,670 documents a second17-fixture pool of small CSV, XLSX and DOCX files.
Throughput, 64 workers203,854 documents a secondThe same pool; 21.0 MiB peak memory for the whole run.
Command-line calls, 16 workers2,173 a secondOne process per document, so process start is included.

Evidence: Document conversion. Compared with: Firecrawl, Pandoc and MarkItDown.

Job

Read PDFs, with OCR when the page is a picture.

Reads the text layer of a PDF in process. When a page is a scan it hands the page to Tesseract and returns the recognised text.

Command: webfold pdf paper.pdf

MeasureWebfoldScope
A file with a text layer5 to 12 msNative parser, one process per file with process start included. Eight test PDFs.
A scanned page, with OCR0.6 to 1.0 sDominated by Tesseract. The three of eight test PDFs that need it.
Accuracy on eight test PDFsCharacter error rate 0.000 to 0.141Fuzzy scan 0.023, mixed native and scanned 0.119, two columns 0.141 (the best a correct read scores).
Against liteparse on 200 PDFsOverall score 0.760 against 0.883Tables 0.376 against 0.818. Headings 0.574 against 0.824. Webfold loses on both.

Evidence: PDF and OCR, PDF extraction. Compared with: Pandoc and MarkItDown.

Job

Read LaTeX papers and BibTeX bibliographies.

Reads LaTeX source with its tables, figures, captions, labels and cross-references, a paper's whole project (\input, \include and the .bib files next to it), BibTeX or BibLaTeX bibliographies, MathML, and arXiv e-print downloads as they come from arxiv.org, and returns Markdown or citation data.

Command: superdocuments::document::convert_path("paper.tex") (library; the webfold command line does not route .tex files)

MeasureWebfoldScope
A LaTeX file to Markdown3.97 ms median16 hand-made files, command line, process start included.
A BibTeX file to citation data2.4 to 6.8 ms5 of 5 files read, command line.
A BibTeX file, in process0.08 to 0.24 msThe same five files.
LaTeX fidelity to Pandoc's reading0.968 mean over 118 documents (0.857 before)Superdocuments main, newer than the revision Webfold pins. Pandoc 3.1.3 is the reference; 10 of 118 documents are identical. Algorithm pseudocode is kept as source, and a reference list is appended from the .bib, both unlike Pandoc.
BibTeX to citation data against Pandoc179 of 179 entries identical (0 before)25 files, Pandoc 3.1.3 reading them as BibTeX or BibLaTeX; same superdocuments change.

Evidence: LaTeX and BibTeX. Compared with: Pandoc and MarkItDown.

Job

Run a page's scripts and drive it like a browser.

Runs the page's scripts in its own engine and serves the Chrome DevTools Protocol, so Playwright, Puppeteer, Selenium and other clients can open, click, fill and read pages that build themselves with JavaScript, without starting Chrome. It passes the full independent benchmark for agent browsers.

Command: webfold headless serve 9222

MeasureWebfoldScope
Start8 msCold start until it answers.
One scripted task, warm70.7 ms median (74.1 ms at p95)Open a page, run the script that builds 200 rows and calls an API, check six features, read the result, close. The page has a 60 ms timer, so about 60 ms is the floor.
Throughput106.6 tasks a second8 workers, one connection each; 0 of 363 tasks failed.
Memory and CPU30 MB resident, 0.8 CPU-secondsFor the whole run.
Single protocol calls0.2 to 0.6 ms to evaluate; 18.8 ms to navigate an 8,000-row pageMedians of 30 calls, run of 4 November.
Compatibility with agent tools1,928 of 1,928 tasksLexbench, the independent agent-browser benchmark: 13 drivers plus raw CDP, and 188 web-platform tasks. Chrome passes 1,926 in the published run.
Page JavaScript68 of 68 expressions, and 300 of 300 more, match ChromeOrdinary page script over raw CDP, compared with Chromium on the same machine: the 68 original expressions, then 300 more on the language, built-ins, async code and the DOM. BigInt works (all 388 BigInt expressions match), typed arrays share real bytes (all 277 typed-array expressions match) and Float16Array is in (all 60 match). Generators run lazily and async code runs in Chrome's order (206 of 217 match). Form controls keep their state apart from the markup (197 of 250 match). SVG case is kept (198 of 198). These sets are model-written samples checked against Chromium, not conformance suites. Not yet in the engine: canvas, WebGL, web workers, WebAssembly.

Evidence: Agent-browser compatibility, Headless engine. Compared with: Headless Chrome, Scrapling, Lightpanda and Moli.

Job

Normalises the result pages of six search engines into one shape, and indexes and searches a folder of files with ranked passages.

Command: webfold serp · webfold folder-search . "query"

MeasureWebfoldScope
Parse a results page1.4 ms mean, 49.3 MB a second19 saved pages from six engines: 25.65 ms in total, all 19 exact.
Index a folder0.42 s554 files. xerj took 46.6 s.
Query a folder4.0 ms medianA new process per query. A running serve process answers in 0.7 ms.
Right file ranked first94.6% of 240 queriesPlain-words queries cut from the folder, lexical ranking only. xerj 80.8%.

Evidence: Search parsing, Folder search. Compared with: xerj.

Job

How good is the extraction?.

Speed means little if the text is wrong. On the public WCXB benchmark, 511 held-out pages scored with the benchmark's own tool, Webfold's main-content extraction scores an F1 of 0.861.

Command: webfold scrape <url>

MeasureWebfoldScope
Main-content F10.861WCXB test set, 511 pages. Recall 0.931, precision 0.834.
Best page typesDocumentation 0.927, articles 0.920Per-type scores on the same set.
Other systems on the same benchmarkrs-trafilatura 0.893 (published), Trafilatura 2.3.1 0.863 (re-run here), Trafilatura 0.833 (benchmark README), Readability 0.726 (published)The Trafilatura figure in the README does not reproduce: the benchmark paper has 0.841 and our re-run of the current version gives 0.863.

Evidence: Extraction quality.

How should these numbers be read?

Each figure is a median or a total from a named run on a named machine, and the scope column says what was and was not included. Process start, network time and memory are counted where the scope says they are.

Most runs are on one shared 4-core machine, so read the ratios and the pass counts, not the last digit. A conversion time is not an end-to-end time: a page fetched over the network costs the network too.

These are speed and footprint figures. Where a job also has a quality measure, it is shown beside the speed, and the benchmark page lists what was not measured.

Run it on your own files.

The harnesses are public so you can repeat any of this on your own traffic.