بنقرة واحدة
pdf-vision-extractor
Extract invoice numbers, dates, amounts and other fields from scanned PDFs using Claude vision.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Extract invoice numbers, dates, amounts and other fields from scanned PDFs using Claude vision.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Review code changes and report issues by severity with actionable fixes.
Sharpen a fuzzy intention into one measurable objective string that drives the rest of the work.
Convert a Prompt Flow PRS pipeline submission to run a Microsoft Agent Framework workflow.
Build a Model Context Protocol (MCP) server that lets an LLM call into external tools and resources.
Summarize PDF documents into concise bullet-point digests.
Bump a dependency version across a pnpm workspace and update lockfile.
| name | PDF Vision Extractor |
| description | Extract invoice numbers, dates, amounts and other fields from scanned PDFs using Claude vision. |
| category | multimodal |
| tags | ["ai","documentation","javascript","llm","typescript"] |
| source | null |
| license | MIT |
| author | badhope |
| version | 0.1.0 |
| platforms | ["claude"] |
| needs_review | false |
| slug | pdf-vision-extractor |
| created | 2026-06-12 |
| updated | 2026-06-19 |
| inputs | [{"name":"pdf_path","type":"string","required":true,"description":"Local path to scanned PDF file"},{"name":"schema","type":"object","required":true,"description":"JSON schema defining fields to extract"},{"name":"pages","type":"array","required":false,"description":"Specific pages to extract from (omit for all pages)"}] |
| output | {"format":"markdown","description":"Generated content based on the user request"} |
Claude-only — This skill assumes the model has vision capability to read images in PDFs. Codex / GPT-4o vision may also work, but the prompt is tuned for Claude. Cursor / Continue using pure text path will not work.
The document is a scanned or image-based PDF (not a PDF with text layer). You need to extract several structured fields from it. Typical use cases: invoice number + date + amount, contract parties + amount, receipt merchant name + transaction ID.
The schema is specified by the caller, so the same prompt works for different forms — invoices, contracts, receipts, HSE reports.
Do NOT use for:
pdf-summarizer or extract text directly)| Field | Description |
|---|---|
pdf_path | Local path to the scanned PDF |
schema | Fields to extract. Required — without it the skill doesn't know what to extract |
pages | Which pages to read. Omit for all pages |
Schema shape:
schema:
invoice_no: { type: string, description: Invoice number }
total: { type: number, description: Total amount including tax }
currency: { enum: [CNY, USD, EUR] }
issued_at: { type: string, description: YYYY-MM-DD }
The model does not strictly follow schema types — number fields may return strings and need upstream float() conversion. This is a known limitation, not handled in v1.
JSON, shape:
{
"extracted": { /* filled per schema, omit fields not found */ },
"confidence": 0.85,
"missing": ["currency"]
}
confidence is the model's self-assessed 0-1 number, not trustworthy. Use only for sorting/filtering.
For real validation, use schema validation + business rules (amount > 0, valid date, etc.).
You have vision. The user will give you a PDF (scanned / image-based)
and a JSON schema. Look at every page they allow you to see, then
extract the requested fields.
Rules:
- Read top-to-bottom, left-to-right. Tables come in row order.
- Numbers: drop thousand separators, keep decimal point.
"$1,234.50" → 1234.50, "¥1.234,50" → 1234.50.
- Dates: always emit YYYY-MM-DD. "March 5, 2024" → 2024-03-05.
- Enum fields: pick the closest enum value, even if the doc says
it slightly differently. "RMB" → CNY.
- Missing fields: don't guess. If the doc doesn't show the field,
omit it from `extracted` and add it to `missing`.
- Multi-page: aggregate across all allowed pages, prefer the
canonical / summary line over individual line items.
Output JSON only, no prose. Schema:
{
"extracted": <object with extracted fields, matching input schema>,
"confidence": <number 0-1, your self-assessed certainty>,
"missing": [<field names you couldn't find>]
}
Be terse in confidence — 0.9+ only when the field is clearly
printed; 0.5-0.8 when partially obscured; <0.5 when you're guessing.
pdftotext extraction is more accurate, vision is wastefulInput:
pdf_path: ./invoices/2024-03-acme.pdf
schema:
invoice_no: { type: string, description: Invoice number }
issued_at: { type: string, description: Invoice date YYYY-MM-DD }
total: { type: number, description: Total amount including tax }
currency: { enum: [CNY, USD, EUR] }
vendor: { type: string, description: Seller name }
Output:
{
"extracted": {
"invoice_no": "INV-2024-03381",
"issued_at": "2024-03-15",
"total": 12750.00,
"currency": "CNY",
"vendor": "Acme Technologies Co., Ltd."
},
"confidence": 0.88,
"missing": []
}
These are the bugs that bite every new user. Check them before shipping:
Scanned image PDFs: PDFs that are images, not text.
Confidence threshold not checked: Using low-confidence extractions.
Field extraction without schema validation: Fields returned don't match expected schema.
PDF without extractable content: Encrypted or protected PDF.
Over-reliance on single extraction: Not verifying critical fields manually.