# Changelog of AI PDF to JSON & Invoice OCR: Receipt, Bank Statement Parser (`rs-automation-labs/ai-document-extractor`) Actor

- **URL**: https://apify.com/rs-automation-labs/ai-document-extractor/changelog.md
- **Full Actor documentation**: https://apify.com/rs-automation-labs/ai-document-extractor.md

## Changelog

### 1.0 (initial release)

- Extracts structured JSON from PDFs (text and scanned), JPG / PNG / WebP / TIFF / GIF images, DOCX, HTML and TXT
- Inputs: URLs (Google Drive / Dropbox share links rewritten), file uploads, Apify key-value store keys (wildcards) or a dataset field from another Actor
- 9 presets: invoice, receipt, bank statement, purchase order, resume, business card, generic form, contract, shipping document / bill of lading. Also auto-detect and custom fields or JSON Schema
- Text-first processing, with vision only for pages without a usable text layer. Chunking for long documents
- Normalized values: ISO dates (no invented days or years), ISO 4217 currencies, locale-aware numbers (including Indian grouping and accounting negatives)
- Validation: line math, subtotal, totals, tax breakdown, amount due, bank statement reconciliation and running balance, IBAN and ISO 6346 container check digits, date order, required fields
- Per-field confidence capped by grounding and validation, plus `needsReview` with reasons
- Flat spreadsheet view, `RESULTS.csv` and `TABLE-*.csv` exports, run summary, webhook
- Default model `google/gemini-2.5-flash-lite`, accurate `google/gemini-2.5-flash`, automatic fallback `openai/gpt-4.1-mini`. Works via Apify's OpenRouter proxy or your own OpenRouter key
- Government ID documents are refused and not charged. Prompt-injection guard
- Pay-per-event: `document-extracted` (5 pages included) and optional `extra-page`. Failed documents are free

#### 1.0 build notes (pre-release)

- pdfium calls are serialized with a lock (pdfium is not thread-safe)
- KV CSV records use content type `text/csv` (the KV schema rejects `text/csv; charset=utf-8`)
- Local PPE tests must price `apify-default-dataset-item` at 0, because the SDK prices unknown events at $1 outside the platform and would drop dataset pushes
