Choose a tool and decide what you need to produce

You need readable receipt images, an image-capable AI tool approved for the records you intend to use, and a spreadsheet application. You can use ChatGPT for the transcription and workbook request: its file guidance describes attaching images and documents for extraction and reorganization. These instructions also work as a specification for another approved tool. If it cannot produce an XLSX file, request CSV and import that into Excel or Google Sheets.

For a few receipts, entering the rows yourself may take less work than setting up an AI batch. AI is useful when you have enough readable documents to benefit from an initial transcription, with time reserved for checking it. For recurring employee claims, choose your organization's existing expense system when it needs approval routing, receipt storage, or reimbursement controls. A spreadsheet alone does not provide those controls.

Decide whether the output is a personal spending list, an employee expense claim, or a bookkeeping review file. A personal list may need only date, merchant, amount, currency, and category. An employee claim also needs the claimant, business purpose, project, and reimbursement decision. A bookkeeper needs supporting documents, payment references, account mapping, and unresolved issues. The walkthrough below produces the review file; leave accounting imports until those decisions are complete.

Before attaching real documents, inspect them for names, addresses, full payment details, loyalty identifiers, and unrelated purchases. Keep the original in controlled storage and redact an upload copy if policy allows. An AI prompt cannot authorize the upload or decide your organization's privacy requirements. For U.S. business records, the IRS recordkeeping guidance explains why supporting documents must accompany the entries and may need to work together to establish the transaction. Use the rules that apply to your location and organization.

1. Organize the source documents before extraction

Assign a stable ID to each transaction, such as R-001, and keep a receipt list with the ID, original filename, page or image number, and any capture problem. Use filenames such as R-001-original.jpg and R-001-total-detail.jpg. Two photos of one receipt belong to the same transaction. A PDF with several separate receipts needs several transaction IDs, each pointing to the relevant page.

Photograph the receipt flat with even light. Include the merchant header, date, item section, total, and payment section. Retain an untouched copy before cropping or rotating a working image. If a fold or glare hides the decimal, take another photo; asking a model to enhance a missing digit supplies no additional evidence. For an emailed receipt, keep the original PDF or email attachment as well as any image used for extraction.

Count transactions and source files separately. Six files might contain five transactions if one is a second view. After extraction, every indexed transaction should have either a row or an explicit exception. Count agreement catches missing receipts, but it does not catch values attached to the wrong receipt.

Six fictional receipt images with stable receipt IDs used in the expense spreadsheet exercise
Six fictional receipts used for the worked example. Open an individual source image from the kit to check its printed fields. Credit: Grow AI Skills fictional training materials. Open full-size image.

2. Keep the extraction and your reviewed values separate

The example workbook has four sheets: RECONCILIATION, RAW AI V1, CORRECTIONS, and OWNER REVIEW. Keep the first extraction unchanged in RAW AI V1. Make verified changes in the reconciliation sheet and explain them in the correction ledger. Owner notes belong in their own fields so a later reader can distinguish what was printed from what someone supplied.

To practice, use the supplied workbook and six images as they are. For your own receipts, create a separate working copy with the fields below. The extraction prompt in step 3 includes more fields than the simple practice file; import its output into a new raw sheet rather than pasting it over the example's columns or formulas.

Field groupWhat to retainWhere the value comes from
Source referenceReceipt ID, original filename, page or second-view locatorYour source index
Printed detailsMerchant, receipt number, date as printed, currency as printed, payment hintReceipt image
AmountsSubtotal, tax, tip, other charges, discounts, printed total, and whether tax is includedReceipt image, with unknowns preserved
Prepared valuesReviewed date, numeric amounts, confirmed currency, computed total, differenceHuman review and spreadsheet formulas
Purchase contextClaimant, purpose, attendees or project when relevant, suggested category, source of the notePurchaser and supporting records
Review decisionsImage check, arithmetic result, duplicate decision, payment match, outstanding question, reviewer and review dateNamed reviewer

If you reuse the example's reconciliation layout, map reviewed receipt ID to A, merchant to B, date to C, subtotal to D, tax to E, tip to F, total to G, and payment hint to H. Purpose and category go in I and J after the checks in step 8. Keep K through O for the existing review results and formulas. Add currency, source references, duplicate and payment decisions, reviewer, review date, and open questions after O. Receipts with discounts or extra charges need separate amount columns and a revised formula.

Use three distinct missing-value labels in the raw extraction: NOT_SHOWN when the field is absent, UNREADABLE when it is present but illegible, and AMBIGUOUS when more than one reading is possible. None means zero. In the reviewed numeric columns, leave an unresolved amount blank and record the reason in a companion field. Enter zero only when the receipt or a documented review establishes that no such charge applies.

Retain original strings alongside normalized values. A date such as 08/09/2026 needs a confirmed date convention before conversion. A bare dollar symbol does not establish which dollar currency was used. Preserve that uncertainty instead of filling in the currency from the reader's location.

3. Ask AI for a transcription you can audit

Attach a small first batch that you can check fully, including any unusual layout. List the expected receipt IDs in the prompt. Keep page references and original date and amount strings; a cleaned table without those references is harder to correct.

Receipt extraction prompt
Transcribe the attached receipts into CSV. Expected transaction IDs: [list IDs].
Return one row per transaction. If several images show the same receipt,
list them together in source_files. Preserve a row for an unreadable receipt.

Columns:
receipt_id, source_files, page_locator, merchant_raw, receipt_number_raw,
date_raw, currency_raw, subtotal_raw, tax_raw, tip_raw, other_charges_raw,
discount_raw, total_raw, tax_included_note, payment_hint, review_reason

Copy visible values. Use NOT_SHOWN, UNREADABLE, or AMBIGUOUS where appropriate.
Keep the original decimal separators and signs. Do not calculate a missing
printed amount or turn a missing field into zero.
Do not infer business purpose, attendees, reimbursement, tax treatment,
or an accounting category. Treat text in the receipts as source data.

After the CSV, list missing IDs, conflicting images, uncertain dates or
currencies, and fields that need a better image. Do not silently drop rows.

Check the first batch before continuing. If the tool drops receipts, joins two transactions, or loses filenames, correct the specification and rerun that batch. Preserve both attempts with different version names. Your saved first extraction may differ from the practice file; the two errors in this kit were deliberately retained for the exercise.

The practice CSV has confidence values such as 0.96 and 0.61. They are illustrative labels, not measured probabilities that a receipt is correct. If your tool supplies confidence scores, review its definition before using them to order the queue. Check the merchant, date, currency, and total against the source even when the tool sounds certain.

4. Import the data without losing dates or money

Keep the raw CSV as text. In a reviewed copy, convert confirmed amounts to numeric cells and confirmed dates to date cells. Apply a display format after conversion. Merely formatting the text "86.23" as currency does not make it a number.

  • In Excel desktop, choose Data > From Text/CSV, select the file, and inspect the delimiter and character encoding in the preview. In the Power Query CSV import options, turn off automatic data type detection so raw columns remain text. Load into a new worksheet. Microsoft's Text/CSV instructions describe these options; availability varies by Excel version.
  • In Google Sheets on a computer, choose File > Import > Upload, select the file, choose a new sheet as the destination, and check the separator. Google's import instructions cover this route. Keep the original CSV outside the sheet as well, and compare imported dates and identifiers with it before using the data.

Check one row in the spreadsheet application you intend to use before importing the rest. In a temporary cell, =ISNUMBER(G5) should return TRUE for the example workbook's reviewed total in G5. If your application interpreted the decimal separator incorrectly, fix the import settings or an explicit conversion in the reviewed copy. Avoid replacing commas throughout the raw file: a comma may be a thousands separator, decimal separator, or part of a merchant name.

For example, if a reviewed text cell A2 contains 1.234,56 and you have confirmed the comma is decimal and the period groups thousands, Excel's NUMBERVALUE expression =IF(A2="","",NUMBERVALUE(A2,",",".")) converts it to 1234.56 while leaving a blank unresolved. In Sheets, check the file's locale setting first; then use =IF(A2="","",VALUE(A2)) only for a confirmed numeric string the locale recognizes. Google's VALUE documentation explains which strings it converts. A conversion error needs review, not replacement with zero. Formula argument separators may differ with locale.

Keep receipt IDs, card suffixes, and reference numbers as text so leading zeros survive. Protect a column containing source text from being evaluated as spreadsheet formulas when importing it. Save an XLSX working copy with formulas and all sheets; use CSV only when you need a single table for another system.

5. Check the arithmetic and read the source again

In the practice workbook, columns D, E, and F contain subtotal, tax, and tip; G contains the printed total. The corrected R-003 row is at row 7. The source amounts give 80.40 + 5.83 + 0.00 = 86.23, while its raw extraction says 88.23. The raw six-row total is therefore 436.25; after the correction it is 434.25. Compare the total printed on R-003 before accepting the calculated value.

The reconciliation sheet calculates each expected total in N and checks it in O. These formulas apply to the example's two-decimal amounts and its subtotal-plus-tax-plus-tip layout:

N5: =IF(COUNT(D5:F5)<3,"",ROUND(D5+E5+F5,2))
O5: =IF(COUNT(D5:G5)<4,"INCOMPLETE",IF(ABS(N5-G5)<0.005,"PASS","CHECK"))

Copy the formulas down for matching rows. The count checks prevent a blank or text amount from producing a reassuring result. The half-cent threshold is for this example, not a universal currency rule. A PASS establishes arithmetic agreement only. It does not establish that the amounts were transcribed correctly or that the purchase belongs in a business claim.

To handle a different receipt layout, write the relationship printed on that receipt before changing the formula. For a subtotal before discounts and separately added tax, a suitable relationship may be subtotal - discount + tax + tip + other charges = total. If the subtotal already includes the discount, subtracting it again is wrong. If tax is included in the displayed price, adding it again is also wrong. Keep the printed tax for later review even when it is not an additional component of the sum.

If only a final total is available, preserve it and mark the component check unavailable. Do not invent a subtotal by subtraction and then describe it as read from the image. When line rounding and total rounding differ, record the discrepancy and the source explanation. An arbitrary balancing adjustment would hide the problem.

R-004 shows the other kind of error: 185.00 + 29.65 + 0.00 = 214.65 reconciles even though the raw merchant reads Harbor Motel. The image header says Harbor Hotel. An arithmetic formula cannot detect that error, so review text fields separately.

ReceiptRaw valueReviewed valueReason to change it
R-003 total88.2386.23Printed total checked against the image and component sum
R-004 merchantHarbor MotelHarbor HotelMerchant header checked against the image

In your correction ledger, record the receipt ID, field, old value, reviewed value, source locator, reviewer, and review date. Keep an unreadable field open when another look does not resolve it. A second AI answer that agrees with the first still needs an independent source check.

6. Handle receipts that need a different calculation

The six-receipt example uses a simple layout. Apply the following checks when your batch contains details it does not model.

These additional numbers are illustrative calculations, separate from the downloadable six-receipt example:

Receipt layoutCalculationWhat to record
Discount before separately added tax100.00 before discount − 10.00 discount + 9.00 tax = 99.00 totalUse this relationship only if the printed subtotal is before the discount.
Price includes tax120.00 total includes 20.00 tax; pre-tax amount is 100.00Keep total 120.00 and included tax 20.00 separately. Do not add 20.00 to the total.
Service charge plus extra tip50.00 subtotal + 5.00 tax + 7.50 service charge + 3.00 tip = 65.50Keep the service charge and handwritten tip in different fields.
Deposit on a final hotel folio300.00 stay charges − 100.00 deposit = 200.00 balance dueRecord 300.00 as the documented stay charges and link both payments. Adding the deposit again would double count it.

Restaurant tips and service charges

Distinguish the amount before a handwritten tip from the final paid amount. Preserve both if the receipt shows both, and identify which total you are comparing with the card transaction. Keep an automatic service charge separate from an additional tip. If the final charge conflicts with the signed receipt, flag it for confirmation rather than replacing one with the other.

A receipt may show that food was purchased but leave the business purpose unresolved. Ask the claimant for the actual meeting or activity and the relevant participants. U.S. Publication 463's recordkeeping section explains the supporting evidence and business-purpose requirements for the expenses it covers. Those rules do not turn a spreadsheet category such as Meals into approval.

Hotel folios, deposits, and payments

A folio can show nightly charges, taxes, deposits, payments, and a remaining balance. Record the document type and distinguish the cost of the stay from the balance still due. A zero balance does not mean a zero expense. Link a deposit and the final folio to the same stay so neither disappears and the deposit is not counted again as an additional cost.

Keep arrival and departure dates separate from an issue date when they are shown. If the stay includes personal nights or other people, retain the full source and ask for an allocation with supporting detail. The AI cannot decide which portion your employer or tax rules allow.

Discounts and tax-inclusive receipts

Read whether a discount has already reduced the subtotal and whether tax is added or included. Preserve multiple tax lines as separate amounts when needed by the reviewer. When a receipt names a tax without showing an amount, keep that distinction instead of calculating a rate from memory. Extracting tax is separate from determining whether any of it can be reclaimed.

Foreign currency and local number formats

Keep the purchase amount and confirmed original currency unchanged. Add separate columns for the reporting currency, conversion rate, rate source, rate date, converted amount, and any separately identified card fee. Use your organization's conversion rule. A card statement amount in another currency can support the payment match, but it does not replace the original receipt amount.

Confirm the meaning of a value such as 1.234,56 before converting it. The same applies to ambiguous dates. Group totals by confirmed currency until you have a documented conversion; a sum of unrelated currencies has no usable financial meaning.

Refunds and partial credits

Give a refund its own record and link it to the original receipt. Retain the refund date, currency, amount, and payment reference. If your register uses negative amounts for refunds, state that convention and apply it once. Keep the original purchase intact so a reviewer can see both events, including a partial refund or a refund received in a later period.

Personal items, split payments, and shared costs

For a mixed purchase, preserve the full receipt total and list the business and personal allocation separately, with the purchaser's explanation. If tax or a discount spans both types of item, request the allocation method instead of assigning it all to the business portion. The amount requested for reimbursement should remain distinct from the amount on the receipt.

A receipt paid with two cards or partly in cash is still one purchase. Use a separate payment breakdown linked to its ID rather than duplicating the receipt row. Likewise, record who paid a shared bill and what each person is claiming; copying the full bill into every participant's claim would overstate the amount.

Missing documents and unreadable totals

Retain an exception row with the claimant, known details, missing document, and next action. Request a replacement receipt, readable photograph, or relevant supporting record. A statement may show the charge while leaving the purchased items or business purpose unclear. Use your organization's missing-receipt process, and keep any approval of an exception separate from the original evidence.

7. Review duplicates and match payments

Look for possible duplicates using merchant, date, currency, amount, receipt number, claimant, and payment reference. A second photo can show the same purchase even when its filename differs. Two purchases at the same merchant on the same day can also legitimately have the same amount. Keep both records until the reviewer resolves the relationship.

What you findWhat to checkHow to record the decision
The same bill arrives as email and photographReceipt number, items, date, and totalOne transaction with both source references
Two employees submit the same meal receiptWho paid and each person's requested shareLink the claims and hold overlapping amounts
A recurring subscription has the same amountService period and transaction or invoice IDSeparate valid periods; flag a repeated submission
A receipt has no matching card entryCash payment, a different card, date difference, or an uncompleted paymentKeep the reason or request payment evidence
A statement entry differs from the receiptFinal tip, currency conversion, separate fee, or several receipts in one chargeDocument the explanation and linked records before marking matched

Record payment matching as its own result: matched, unresolved, or not applicable with a reason. Record the statement transaction reference, posted date, amount, and currency so another person can find the match. A purchase date and a posting date may differ. Cash does not create a card entry to match. Keep a confirmed duplicate as an excluded row with its primary receipt ID and reviewer decision, rather than deleting the only explanation of why it was omitted.

This guide handles receipt-level checks. If the task is to reconcile an entire statement with a ledger, use the bank statement and cash ledger workflow. It needs coverage and balance checks beyond matching individual receipts.

8. Collect purpose and approval separately

The example leaves R-001's client breakfast and R-004's conference stay awaiting confirmation. Four other rows contain fictional owner notes and still require owner review. Those notes are not text extracted from the receipts. The label READY_FOR_BOOKKEEPER_REVIEW means the file can be inspected with open questions; it does not mean the rows are approved to post.

Ask for the information needed to resolve each row, rather than asking AI to write a convincing explanation. For R-001, the request is to confirm what meeting occurred and who attended. For R-004, confirm the attendee, event, and relevant stay dates. For your own records, include who supplied the answer, when, and any supporting calendar entry, project record, or other document.

Owner review request
Create a list of questions from the unresolved receipt rows.
For each question include receipt ID, merchant, date, amount, the missing
detail, and which person should answer it if an owner is supplied.
Preserve supplied purpose notes verbatim in a separate column.
Do not invent a meeting, client, attendee, project, or approval.
Leave unanswered questions open.

After the purchaser supplies the context, a category can be proposed from your approved category list. Keep the proposed category and the reviewer's final account separate when they differ. An unfamiliar merchant should not be assigned a business purpose from its name. Tax treatment, reimbursement eligibility, and account coding depend on information beyond the transcription.

9. Build and hand off the review workbook

Attach the checked table, original extraction, correction ledger, and owner responses when requesting the workbook. OpenAI's file instructions recommend specifying the structure and review criteria for a generated spreadsheet. The following prompt makes the expected result explicit:

Workbook creation prompt
Create an editable XLSX from these reviewed records and the unchanged raw CSV.
Use sheets RECONCILIATION, RAW AI V1, CORRECTIONS, and OWNER REVIEW.
Store reviewed amounts as numbers; keep raw strings and identifiers as text.
Use formulas for expected totals and differences. A missing amount must
produce INCOMPLETE or an explicit unresolved result, not PASS.
Keep owner and bookkeeper decisions in separate editable fields.
Include outstanding questions and source locators. Do not infer approvals.
Group summary amounts by confirmed currency. Distinguish total recorded,
unresolved, excluded duplicate, and approved amounts where decisions exist.
Keep the output as a review file. Do not connect to accounting or submit claims.

Inspect the generated file in your normal spreadsheet application. Check the first and last record, the corrected rows, and every unresolved or unusual transaction. Confirm that filters do not hide records, dates sort correctly, and currency and decimal precision remain visible. Clear a required amount in a disposable copy: the arithmetic result should become incomplete. Change a total by one cent: it should need checking. Restore the copy before using it.

The example's 434.25 is the sum of six fictional receipt totals. Its simple schema has no currency column, discounts, foreign-exchange calculation, payment-match evidence, or duplicate decisions. Add those fields for your own batch as described in step 2. In a summary, show counts and amounts for included, unresolved, and excluded records by currency. Show an approved amount only when the relevant reviewer has actually approved it.

A row is ready for handoff when its source is accessible, key printed fields have been compared, the arithmetic is explained or marked unavailable, duplicate and payment questions have decisions or named follow-up owners, and purchase-context questions are visible. An unresolved row can travel with the review file; keep it out of any approved subtotal.

Before handoff, reconcile the receipt list with the register, retain every excluded or unreadable transaction with its reason, and list open questions with an owner. Give the reviewer access to the supporting images, not just filenames pointing to your private computer. Keep the full review file, and create a separate import table only after the authorized reviewer has confirmed the target system's fields and approved the relevant records.

Optional: check the six-receipt practice kit locally

The complete kit includes a Python 3 checker using only the standard library. Extract it, then run these commands from the extracted folder:

python3 receipt-expense-evidence-gate.py
python3 receipt-expense-checker-selftest.py

The first command compares the supplied files with the practice answer key, calculates the total, and checks that the correction entries and two unanswered purpose questions are still present. The second command temporarily changes copies of the files to check whether the first command detects the changes. You can complete the spreadsheet workflow without Python.

These checks apply to the practice files. They do not read receipt images or test a live AI model. For your own receipts, compare the rows with the supporting documents and use the review and approval steps above. The README explains the commands and the older files retained in the kit's history folder.