Verified against Gemini · 2026-07-29
Turn a batch of receipt and invoice photos into one clean expense spreadsheet
A multimodal batch-extraction prompt that reads a stack of photographed receipts and invoices in one pass and returns one consistent, spreadsheet-ready table with a fixed column schema, instead of a differently-formatted summary per image that still needs manual cleanup before it can be used.
The prompt
Ready to copy — highlighted parts are example details you can swap.
I've attached 23 photos of receipts and invoices. Read all of them in this one pass and return one consistent table — not a separate summary per photo with its own formatting. CATEGORIES Assign each line item to the closest match from this fixed list: Travel, Meals, Software, Office supplies, Other. Never invent a new category, even if a receipt doesn't fit neatly — pick the closest one and note the mismatch in a comments field instead. CURRENCY All receipts should be in INR; flag any that appear to be in a different currency rather than converting them yourself. REQUIRED COLUMNS date, vendor, category, amount, tax amount if shown, payment method if shown INSTRUCTIONS 1. One row per receipt (or one row per line item if a single receipt/invoice covers clearly separate expense categories — say which approach you used and be consistent about it across the whole batch). 2. If a photo is blurry, cropped, or a specific field (date, total, vendor name) isn't legible, leave that cell blank and add a note rather than guessing a plausible-looking value — a guessed total that's wrong is worse than an honest blank someone can fill in by checking the physical receipt. 3. If a receipt appears to be a duplicate of another one in the batch (same vendor, same amount, same date), flag it as a possible duplicate rather than silently including it twice or silently dropping one. 4. Meals over ₹1,500 per receipt need a manager note per company policy — flag these, don't reject or adjust them yourself. 5. If a single photo actually shows two separate receipts (someone photographed a stack, or two receipts side by side), split them into two rows rather than merging their totals into one, and note that a split happened so it can be double-checked against the physical receipts. 6. If a vendor name is abbreviated, uses a franchise-location suffix, or is printed differently across receipts from what is clearly the same underlying business (e.g., a store number appended to the name), normalize it to one consistent name across the batch so a later pivot by vendor doesn't fragment into near-duplicate rows for what is really one vendor. 7. Note the language the receipt is printed in if it's not the expected one, since a receipt from a business trip abroad may need different tax handling than a routine domestic one. 8. If a receipt shows a tip or service charge as a separate line from the base amount, keep them as separate values rather than folding the tip into the base total, since some reimbursement policies cap tips independently of the meal amount itself. OUTPUT FORMAT A single table with the required columns above, ready to paste into a spreadsheet, followed by a short list of anything flagged: illegible fields, currency mismatches, split receipts, vendor-name normalizations made, and possible duplicates.
Customize
Optional — swap in your own details for the highlighted parts above.
Why this works
Processing all receipt images in a single pass against one fixed column schema is what makes the output mergeable into one spreadsheet — extracting each photo in a separate chat turn produces inconsistent field names and date formats you'd have to reconcile by hand afterward anyway, which defeats the entire point of automating the extraction. A fixed, closed expense_categories list stops the model from inventing near-duplicate categories — 'Software' versus 'Subscriptions' versus 'SaaS Tools' across different receipts — which is the single most common reason an AI-extracted expense sheet still needs manual cleanup before anyone can build a pivot table from it; forcing every item into one of a small set of known buckets, with a comment for genuine mismatches, keeps the category column actually usable for aggregation. The currency-flagging instruction matters because a receipt photographed at an odd angle or on a low-quality thermal print can have its currency symbol misread entirely, and a wrong currency silently assumed corrupts a total that still looks perfectly plausible in the output — flagging it for a human to check is far safer than the model quietly converting a number it may have misread in the first place. Explicitly asking for reimbursement-policy flags rather than automatic enforcement keeps a genuine judgment call visible to the human approver — the model has no authority to decide a meal expense is or isn't within policy, and pretending otherwise by silently rejecting or adjusting a line item would hide a decision that should actually be made by a person. Normalizing vendor names across the batch matters specifically for the aggregation step that comes after extraction: a spreadsheet with 'Starbucks,' 'STARBUCKS #4471,' and 'Starbucks Coffee Co' as three distinct vendor strings will fragment what should be one line in a per-vendor summary into three, and that kind of fragmentation is invisible until someone tries to actually total spend by vendor and gets a wrong, artificially spread-out answer. Splitting a single photographed image that actually contains two separate physical receipts into two rows, rather than merging their totals, prevents a specific and hard-to-catch error: a merged total that happens to look like a plausible single-receipt amount will pass a casual review even though it's the sum of two unrelated purchases, and nothing about the output would signal that a split should have happened unless the model is told to actively look for it.
What you get back
date | vendor | category | amount | tax | payment_method | notes 2026-07-14 | Cafe Delight | Meals | 1,850 | 92 | Corporate card | flagged: over ₹1,500, needs manager note per policy 2026-07-15 | [illegible] | Travel | [illegible] | — | — | photo too blurry to read total; original receipt needed 2026-07-16 | Notion Labs Inc | Software | 1,200 | 60 | Corporate card | — Possible duplicate: rows 9 and 14 — same vendor (Uber), same amount (₹340), dates one day apart; verify before including both.
Verified against
Gemini Gemini 3 Pro · 2026-07-29
Changelog
- 2026-07-29 — Initial publish, verified against Gemini 3 Pro on a batch of 23 photographed receipts.
Need this built into your business?
If a prompt isn't enough — what Scult builds, built and maintained for you — that's Scult's day job.
EXPLORE WHAT SCULT BUILDS
