{"adoption": {"forks": 543, "observed_at": "2026-08-28T04:08:20.612526+00:00", "stars": 3811}, "canonical_url": "https://ross.abutalabs.com/products/camelot", "card": {"archived": false, "artifact_type": "library", "description": "A Python library to extract tabular data from PDFs", "domain": ["pdf", "data-science", "files", "developer-tools"], "enriched": true, "function": ["pdf", "parser", "ocr", "data-science", "cli"], "health_score": 97, "homepage": "https://camelot-py.readthedocs.io", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["camelot-dev/camelot"], "name": "camelot-dev/camelot", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-08-06T07:43:57+00:00", "repo": "camelot-dev/camelot", "stars": 3811, "tags": ["table-extraction", "pdf-parsing", "pandas", "dataframe", "csv-export", "opencv", "table-transformer"], "topics": [], "urls": [], "use_cases": ["extract tables from pdf files in python", "parse tabular data from pdfs into pandas dataframes", "scrape tables from borderless pdfs", "ocr tables from scanned pdf documents", "export pdf tables to csv or excel", "stitch multi-page tables across pdf pages"], "what_it_is": "Camelot is a Python library for extracting tabular data from PDFs, offering five parsers including heuristic (lattice, stream), text-alignment (network, hybrid), and an optional neural Table Transformer backend for borderless tables, plus OCR support for scanned PDFs. It outputs tables as pandas DataFrames with quality metrics and can export to CSV, JSON, Excel, HTML, Markdown, and SQLite, and also ships a CLI.", "when_to_avoid": ["you need general-purpose PDF text or layout extraction rather than tables", "you work outside Python and don't want a CLI-only workflow", "your PDFs are mostly images without any table structure"], "when_to_choose": ["you need structured table data out of PDFs in a Python pipeline", "you deal with ruled, whitespace-aligned, or borderless tables and want multiple parsing strategies", "you want quality metrics to filter out bad table detections", "you need a lightweight install with no system dependencies"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/camelot", "repo": "camelot-dev/camelot", "role": "main", "score": 94}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:20.612526+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:26:37.012679+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "50e99e4dc667b457bea3e42740e64a0979aaa3e56decb303ae14d18a11c930fc", "fetched_at": "2026-08-28T04:08:20.612526+00:00", "kind": "readme", "missing": false, "url": "https://github.com/camelot-dev/camelot"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 96, "longevity": 100, "rhythm": 87}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2620, "days_push": 27, "days_rel": 90, "gap_med": 0, "n_releases_24m": 10}, "score": 94, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}