Back to learn

How receipts are matched to transactions

Connecting the paper record to the bank line, and knowing when not to.

A bank line and a receipt describe the same event from two directions. The bank knows an amount left an account on a date. The receipt knows what was bought, how much of it was tax, and often who it was for. Matching them is the step that turns a transaction list into something you can defend to an accountant.

The signals

  • Amount: the strongest single signal, though card tips, currency conversion and partial captures can move the settled figure away from the printed total.
  • Date: useful, but rarely exact. A card purchase often settles a day or two after the receipt was printed, and weekends push it further.
  • Merchant: compared after normalization, because the name on the receipt and the string on the statement are almost never identical.
  • Account: if the receipt records the last digits of a card, it narrows candidates sharply.
  • Time proximity: among several plausible candidates, the closest in time usually wins.

Why it should be scored, not decided

No single signal is conclusive, so matching is best treated as a weighted score rather than a rule. A receipt whose amount, merchant and account all line up within a day of the transaction is a near certainty. A receipt whose amount matches but nothing else does is a guess.

Showing that score is what makes the feature trustworthy. Matched with ninety seven percent confidence invites a glance and a nod. A silent link invites nothing, right up until it is wrong.

Borderline cases deserve a question, not a decision

When the evidence is strong, link automatically. When it is middling, offer the match as a suggestion and let a person confirm it in one click. When nothing plausible exists, leave the receipt unmatched and list it, because an unmatched receipt is itself informative. It usually means the payment has not landed yet, or the statement covering it has not been uploaded.

Reading the receipt in the first place

None of this works without decent field extraction. Merchant, date, subtotal, tax, tip, total, currency and payment method all have to come off a photograph taken at an angle in bad light. Fields that cannot be read confidently should be left empty and flagged, not filled with a plausible guess, because a wrong total that looks like data is far more damaging than a visible gap.

Invoices work the same way

A vendor invoice or a utility bill is the same problem with a longer lag. The document arrives before the payment, sometimes by weeks, so the date signal is weaker and the invoice number and vendor carry more weight. The match still happens, just later, when the payment appears in a statement.