{"adoption": {"forks": 554, "observed_at": "2026-08-28T04:06:25.783023+00:00", "stars": 2203}, "canonical_url": "https://ross.abutalabs.com/products/invoice2data", "card": {"archived": false, "artifact_type": "library", "description": "Extract structured data from PDF invoices", "domain": ["pdf", "files", "developer-tools"], "enriched": true, "function": ["parser", "ocr", "pdf", "etl", "data-science"], "health_score": 99, "homepage": "https://invoice2data.readthedocs.io/", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["invoice-x/invoice2data"], "name": "invoice-x/invoice2data", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-08-21T20:36:56+00:00", "repo": "invoice-x/invoice2data", "stars": 2203, "tags": ["invoice-processing", "pdf-extraction", "template-based", "accounting", "data-extraction", "automation", "data-engineering"], "topics": ["python", "data-mining"], "urls": [], "use_cases": ["extract structured data from pdf invoices", "automate invoice data entry for accounting", "parse invoice fields like amounts and dates into csv or", "ocr scanned invoices and pull out key values", "batch process a folder of supplier invoices", "rename invoice pdfs based on their content"], "what_it_is": "A Python library and CLI tool that extracts structured data from PDF invoices using pluggable text-extraction backends (including OCR) and YAML/JSON regex templates, with optional AI fallback. Results can be exported as CSV, JSON, or XML, or used to rename PDF files.", "when_to_avoid": ["you need to handle highly varied invoice layouts without writing or maintaining templates", "you want a turnkey GUI invoice-processing product", "your documents are not invoices or similar structured business documents", "you expect out-of-the-box accuracy on arbitrary PDFs without configuration"], "when_to_choose": ["you process many invoices with recurring, known layouts that templates can capture", "you want a scriptable Python library or CLI rather than manual data entry", "you need pluggable extraction backends including OCR for scanned documents", "you want structured output (CSV/JSON/XML) for downstream accounting or analysis"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/invoice2data", "repo": "invoice-x/invoice2data", "role": "main", "score": 97}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "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:06:25.783023+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.783023+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:46:45.558540+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74cbf6d757a425d5cea7bf949837943f0ad7c6fc1c85d5468982ab523eb90c84", "fetched_at": "2026-08-28T04:06:25.783023+00:00", "kind": "readme", "missing": false, "url": "https://github.com/invoice-x/invoice2data"}, {"content_hash": "d65235b9b9807684d979476f1604815b2620618de25407faae8e73e8c3338b37", "fetched_at": "2026-08-29T10:27:33.809029+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/invoice2data/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 95}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4164, "days_push": 12, "days_rel": 32, "gap_med": 15.0, "n_releases_24m": 5}, "score": 97, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}