# truecopy vs Camelot Source: https://truecopy.dev/compare/camelot/ Camelot has two extraction modes and hands you a DataFrame. truecopy has one pipeline and hands you a verdict. Which you want depends on whether anybody checks the result. **Short answer.** Camelot is the friendlier tool for getting a table out of a PDF into pandas. truecopy is the tool for when nobody will check the table before something acts on it. ## What Camelot does better - **Two explicit modes.** One for tables with drawn rules, one for tables held together by whitespace. Naming the two kinds of PDF structure is a genuinely good design, and it saves you guessing. - **DataFrames.** The output drops straight into the pipeline you already have, and exports to CSV, JSON, Excel, HTML, Markdown and SQLite. - **"For humans."** The API is small and pleasant. truecopy's equivalent of the two modes is [three ways to find the columns](https://truecopy.dev/docs/layout/) (recurrence, anchors, raw spread), but you pick them yourself rather than picking a mode. ## What truecopy does that Camelot does not **A verdict, not a DataFrame.** `readTable` returns rows _and_ [what it could not vouch for](https://truecopy.dev/docs/table/). An empty `warnings` is not a promise the reading is right; it says nothing looked wrong from the shape of the page. Camelot gives you an accuracy figure, which is a number about the extraction rather than a check against the document. **The document checks itself.** A statement announces its balances. A career record announces its totals. truecopy makes you set your reading against them, and refuses to call a contradicted reading sound. No table library does this, because it needs a notion of what the document _declares_, which is the thing everybody drops. **It runs where your users are.** TypeScript, ESM, browser and Node. No Python, no Ghostscript, no server. ## Honestly If your job ends with "get this table into pandas", Camelot does that with less ceremony than anything here. truecopy starts being worth its extra concepts at exactly the point where a wrong row costs somebody something. | | Camelot | truecopy | | --------------------------- | ---------------------- | -------------------------------------------------- | | Language | Python | TypeScript / JavaScript | | Output | DataFrame, CSV, Excel… | rows, plus warnings | | Extraction modes | **two, named** | three cuts, chosen | | Accuracy score | yes | no ([counting is not measuring](https://truecopy.dev/docs/why-refuse/)) | | Checks against the document | no | **yes** | | Runs in a browser | no | **yes** | Map of this site for a model: https://truecopy.dev/llms.txt Every page in one file: https://truecopy.dev/llms-full.txt