What shipped, and when.

Every entry below is dated to the commit that shipped it, and links to the page that proves it. Three entries are corrections, not features — we'd rather list those than hide them.

October 2026

Answered whether tables come back, and fixed wrong table claims

The site said a merged cell always survives, and a PDF table comes back with its structure. Production says otherwise. HTML and Word lose the merge, and the cells after it move one column left. A PDF table comes back as lines of text. The new page shows real output for seven formats, with and without a merged cell.

/docs/tables →

Answered whether a locked file comes back, and fixed a wrong PDF claim

The site said a PDF with only an owner password extracts. It does not: the API refuses every PDF that has encryption. A locked Word or Excel file fails with extraction_failed, not encrypted. A ZIP with an encrypted member returns success and the member name only. The new page shows real output and unlock scripts.

/docs/password-protected →

Answered whether tracked changes come back, and fixed three false claims

Deleted words come back from a Word or OpenDocument file, and nothing marks them. Moved text comes back twice in Word. An ODT deletion comes back at the start of the document. The new page shows real output and an accept-all script. The Word to text tool page no longer says the API leaves deletions out.

/docs/tracked-changes →

Answered where headers, footnotes and comments go, and fixed a privacy claim

Headers, footers, footnotes, endnotes and comments all come back as plain text. A Word comment carries the reviewer's name, so the personal-data page no longer says names are not a leak path. A Word header comes back once for each section, not once for each page. The new page shows real output for Word, ODT, PDF, PowerPoint and Excel.

/docs/headers-and-notes →

Answered whether attachments come back, and fixed a wrong email claim

The site said email headers come back. For .eml and .mbox they do not. Only the body and the attachment text come back. An Outlook .msg does return its subject, sender name, To and Cc. A ZIP returns every file, with each path on its own line. The new page shows real output for each case.

/docs/attachments →

Answered whether text in pictures comes back

The site never said, and about ten pages said it wrong. A PDF page is read by OCR when it has 10 or fewer typed characters. Pictures in Word, PowerPoint and Excel are read too, and their text lands at the end. The new page shows real output for each. The old whole-document claim and the premium advice are gone.

/docs/images →

Answered whether links come back

The site never said. The words of a link come back. The address behind them does not, for HTML, Word, PowerPoint and email. PDF and Excel return the address as a separate line. The new page shows real output for each and short snippets to read the URLs yourself.

/docs/links →

Answered whether barcodes and QR codes come back

The site never said. txtfetch does not decode barcodes or QR codes. A printed caption under a barcode comes back as ordinary text. The new page shows real output for each case and a short way to decode the codes yourself.

/docs/barcodes →

Answered whether form values come back

The site never said what txtfetch returns for a filled-in form. PDF form values come back after the last page, keyed by field name. XFA values come back too. Word form values come back inline. The new page shows real output for each.

/docs/forms →

Answered whether your app can cite the page

The site never said what the page field means. PDFs return a page number on format=json. Excel, PowerPoint, Word, web pages, email and images return null. The new page shows each result and a chunker that keeps the page range.

/docs/citations →

September 2026

Answered what happens to math

The site never said what txtfetch does with equations. Word equations vanish and the response still says success. PDF math loses its layout. The new page shows real output for each input and the fix for each.

/docs/equations →

Answered the prompt-injection question

The site never said what txtfetch does about injected instructions. It does nothing: every character comes back. The new page shows where hidden text hides and adds a paste-in checker for invisible characters.

/docs/untrusted-documents →

Added an MCP server recipe for AI agents

txtfetch ships no MCP server, so the site never answered whether an agent like Claude Code or Cursor could call it as a tool. The new page gives a tested one, in Python and Node.js, that you run yourself.

/integrations/mcp →

Answered the handwriting question directly

The site never said whether txtfetch reads handwriting. It doesn't, on the standard tier. The new page states that plainly, and shows what comes back for each kind of input.

/docs/handwriting →

Rewrote the homepage copy and fixed two stale claims

The homepage said every request 'always answers with text.' It does not: a bad request returns an error code. The format wall's '+ ~976 more' was also hard-coded and stale; it is now derived from the checked Tika coverage count.

/ →

A re-indexing guide for changed documents

/docs/re-indexing answers the daily-churn question. txtfetch keeps no content cache, so a full nightly run pays for every file. The page gives four steps to pay for changed files only. It adds a monthly cost table and a stdlib Python manifest.

/docs/re-indexing →

Ingest pages for keyword search engines

/ingest now covers keyword search engines as well as vector stores. The new pages are Elasticsearch, OpenSearch, Meilisearch, Typesense, and Postgres full-text search. Each page names the point where a long document stops counting. On Postgres, that is word position 16,383.

/ingest →

Where your file goes

A new page traces one document hop by hop inside txtfetch, from the edge to the S3 buffer to usage records. The premium-tier row states plainly that it is switched off by default today.

/docs/where-your-file-goes →

What happens if you leave?

This page answers it: the full API surface, the six response fields, and why there is nothing to export. It also names three replacements — self-hosted Tika, an open-source parser, another vendor — and what each one costs you to take back.

/docs/leaving →

Why not just send the file to the model?

GPT, Claude, and Gemini all read PDFs natively. This page names the documented token cost per vendor. It also names the formats none of them accept, and where txtfetch's own vision-language tier fits in.

/compare/multimodal-llm →

Extract from Drive, SharePoint, S3, and more

The /sources page names every place a document can live before txtfetch reads it. It states which ones hand over a URL, and which need a file upload.

/sources →

A free tool to clean up damaged extracted text

Paste text that came out of any extractor and see the damage signals. Each one links to the fix that explains it, and nothing is uploaded.

/tools/clean-extracted-text →

What pgvector, Pinecone, Qdrant, Chroma, and Weaviate need next

txtfetch stops at extracted text. /ingest covers the chunk, embed, and upsert step for five vector stores, cited and dated.

/ingest →

How txtfetch compares to five open-source parsers

/compare/libraries checks txtfetch against Docling, MarkItDown, PyMuPDF4LLM, Marker, and MinerU on licence, GPU need, format coverage, and OCR.

/compare/libraries →

Document-language pages, with the honest OCR limit stated

/languages covers nine document languages: legacy encodings, chunking risk, and where OCR support actually stops.

/languages →

August 2026

Stopped promising guaranteed reading order on multi-column PDFs

/solutions claimed txtfetch always kept multi-column PDFs in reading order. It does not: the engine gets most PDFs right, and /fixes/columns-out-of-order covers the rest. The page now says so.

/solutions →

Wire txtfetch into n8n, Zapier, Make, Airflow, or S3 and Lambda

No plugin ships for any of them. /integrations shows the HTTP step each platform already has, pointed at txtfetch.

/integrations →

An honest answer to 'why not self-host Tika?'

Apache Tika is free. /compare/self-hosted-tika shows the pinned versions, the from-source Tesseract build, and the runtime limits behind the question.

/compare/self-hosted-tika →

An extraction glossary

/glossary defines PDF text layers, OCR, mojibake, OOXML, and chunking in plain language. Each term links to its full page.

/glossary →

Raw parser output next to txtfetch's output, word for word

/diff shows ten committed documents with the raw parser text next to the corrected text, with every difference marked.

/diff →

Audio and video get their own extraction page

/extract/captions states exactly what comes back from an .srt, .vtt, .mp4, .mp3, or .mkv file. A file with no caption track and no tag data returns an error, not an empty success.

/extract/captions →

Corrected the '1,000+ formats' claim

That figure counted every media type Tika can detect, not every one it can parse. /formats/coverage now lists the real, checked count, measured against the exact jar this build ships.

/formats/coverage →

One drop zone for any file type

/tools/file-to-text detects a file's real type from its bytes and extracts its text in the browser, with no upload.

/tools/file-to-text →

Free readers for legacy Word, Excel, and PowerPoint files

/tools/doc-to-text reads the 97-2003 binary Office formats (.doc, .xls, .ppt) in the browser, alongside the existing DOCX/XLSX/PPTX tools.

/tools/doc-to-text →

Check whether a scan will OCR cleanly before you send it

/tools/image-ocr-check measures resolution, focus, skew, and inversion from a photo's actual pixels, in the browser.

/tools/image-ocr-check →

Stopped claiming the API returns media metadata it has no field for

Copy on /tools/subtitles-to-text said the API returns a title, artist, duration, and codec for media files. It has no such field. A success carries the extracted text, the content type, the byte and character counts, and whether OCR ran.

/tools/subtitles-to-text →

Read .eml and Outlook .msg files, attachments included

/tools/email-to-text extracts a message and its attachments recursively, in the browser.

/tools/email-to-text →

In-browser DOCX, XLSX, and PPTX readers

/tools/docx-to-text and its XLSX and PPTX siblings read modern Office files in the browser. No upload, no API call.

/tools/docx-to-text →

Every page on this site is also plain text

Append .md to any URL for a plain-text twin. /llms.txt indexes the whole site by section, and /llms-full.txt is the whole corpus in one file.

/text →

July 2026

A page for text that extracted but came out wrong

/fixes covers symptoms like mojibake, missing spaces, and scrambled columns: what causes each one, and how to fix it.

/fixes →

Use-case pages: RAG ingestion, search indexing, document workflows

/solutions shows the same API applied to different jobs, with the parts of the response each job actually uses.

/solutions →

Developer docs: quickstarts, async jobs, idempotency, errors

/docs covers authentication and both ways to call the API. It also covers response formats, async jobs and webhooks, idempotency keys, and the full error reference.

/docs →

A public status page

/status shows current status and 90-day uptime history for the extraction API. No login is required.

/status →

A dedicated page for every format

/extract lists format-specific pages covering PDF, Office, email, HTML, images, and more, each with its own working curl.

/extract →

what this page is

One hub, no roadmap.

This page has no roadmap section and no deprecation policy. The one fact worth stating about versioning: every endpoint lives under /v1. Everything else here already shipped.

Get a key and send your first file.

Create an account and get an API key in minutes. The free Hobby plan needs no card.

Get started →