POS, ACH, PPD and friends: bank statement transaction codes explained
2026-07-19 · 7 min read
Beside every merchant name on your statement sits a second, quieter language: POS, ACH, PPD, FPO, CHKCARD. These transaction codes come from your bank rather than the merchant, and they answer a different question — not who got paid, but how the money moved. Once you can read them, half of the "mystery charge" panic dissolves before you've even identified the merchant.
Two puzzles per line, solved in order
The efficient way to read a strange line: decode the mechanism first, then the merchant. A POS code means a physical card purchase — so the answer lies in where you (or a family member) were that day. A PPD code means a company is debiting under a standing authorisation — so the answer is a contract you signed, not a purchase you made. A TFR often means you paid yourself between accounts. Each code shrinks the search space before you touch the descriptor itself.
Card codes: mostly mechanical
POS/POS DEBIT, CHKCARD (Bank of America's flavour), DBT — all just mean "debit card at a terminal"; the merchant follows. Two carry real signal: RECURRING means a stored-card subscription billed, so an unfamiliar one sends you subscription-hunting rather than purchase-hunting, and PIN notes the PIN was entered — which matters in disputes, since PIN presence argues the physical card was there.
ACH sub-codes: the authorisation trail (US)
ACH is America's bank-to-bank rail, and its sub-codes record how a debit was authorised. PPD — standing consumer authorisation: payroll in, utility and gym drafts out. If a PPD debit is unfamiliar, you signed something once; the entry names the company. WEB — authorised online. TEL — authorised by phone, and worth extra scrutiny: legitimate phone bill-pay uses it, but so do phone-scam debits. ARC/BOC/POP — a paper cheque you wrote was converted to an electronic debit (the cheque never clears separately; this is it). RCK — a bounced cheque being retried, usually with an NSF fee nearby.
UK codes: mandate vs your own instruction
The pair worth internalising: DD (direct debit) means a company pulls money under a mandate — every one is listed and cancellable in your bank app, with a guarantee behind unauthorised collections. SO (standing order) is the opposite: a fixed payment you created and control entirely. Around them: FPI/FPO (Faster Payments in/out — instant transfers), BAC (the three-day batch rail behind salaries), BGC (credits paid in), CPT (cash machine).
The drop-everything rails
WIRE, RTP and other instant-transfer codes deserve their own reflex: money on these rails is pushed, fast, and hard to recall. An outgoing wire or instant payment you didn't make is not a "monitor the situation" event — it's a call to your bank immediately, because recovery odds decay by the hour. Contrast with card codes, where the dispute system gives you weeks.
Bank-generated entries: your bank talking to you
NSF (payment declined for insufficient funds), OD (payment covered into overdraft), INT (interest — check the sign), CHG (a fee), ADJ/REV (corrections and reversals). These have no merchant to identify; read them alongside the running-balance column and the sequence reconstructs itself — which payment tipped the account, which fee followed.
Look codes up as you go
We keep the full searchable list — card, ACH, UK, cheque and fee families with plain-English meanings — in the free bank transaction code lookup. And when a line resists both vocabularies, paste the whole thing into the identifier on the homepage: it reads bank prefixes and merchant descriptors together, which is also what happens to every line automatically when you upload a full statement.