Gemini

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.

Gemini (Gemini 3 Pro)Gemini app5 fillable variables

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
Turn a stack of scattered documents into one sourced decision memoA long-context synthesis prompt that loads every related document into the same context window as one connected evidence base and returns a single decision memo with inline citations and flagged disagreements, instead of a chain of disconnected per-document summaries that lose the connections between them.Gemini (Gemini 3 Pro)Gemini app2026-07-20Diff a redlined contract against the original and flag every substantive changeA long-context prompt that loads both the original and the redlined version of a contract into the same window and returns a change-by-change risk analysis, instead of a generic first read that misses a clause quietly weakened somewhere the visible tracked-changes markup doesn't draw the eye.Gemini (Gemini 3 Pro)Gemini app2026-07-21Compare competing sources side by side without smoothing over where they disagreeA long-context prompt that loads several full reports, reviews, or papers at once and produces a structured comparison table instead of a blended, opinion-free summary that quietly hides where the sources actually disagree.Gemini (Gemini 3 Pro)Gemini app2026-07-22Turn an entire small-to-mid codebase into an onboarding doc a new engineer can trustA long-context prompt that reads a whole repository — every file pasted or uploaded, not a handful of representative snippets — and produces an onboarding document that names actual file paths and real architectural seams, instead of generic advice that could describe any Next.js or Python project.Gemini (Gemini 3 Pro)Gemini app2026-07-23
All Gemini prompts

Check your AI visibility

One URL in, a 0–100 score and the exact fixes out.

RUN THE CHECK

Browse all the tools

15 tools across six categories
13 of them never send your data anywhere

Free · No signup · No trial clock

SEE THE DIRECTORY