Vendor name normalization maps the many ways a bank prints one payee, such as "SQ *HARBOR LINEN 0412" and "HARBOR LINEN SVC WA", to a single clean vendor name. Categorization rules then match that name instead of raw text, so the same vendor posts to the same account every month without a new rule for each variant.
Why do bank descriptions show one vendor many ways?
A bank description is assembled from several sources, and each one adds text that changes between transactions. The merchant supplies a name, the card network or payment processor adds a prefix, and the bank appends dates, store numbers, cities or reference codes. Only part of the string identifies the vendor.
Take one example vendor, a linen service paid by card, by ACH debit and once by check. Over three months its lines could read:
SQ *HARBOR LINEN 0412 SEATTLE WAHARBOR LINEN SVC ACH DEBIT 88213POS PURCHASE HARBOR LINEN #2CHECK 1043(no vendor text at all)
To a person these are one supplier. To a rule that looks for an exact string, they are four strangers. Each new variant drops into review as if the client had started buying from someone new.
Accounting software already deals with this split between raw and cleaned text. Intuit's help article on setting up bank rules in QuickBooks Online describes two fields a rule can test: bank text, which is the exact data from the bank, and description, a simplified version of that bank text. The same article notes that a rule can fail to apply when it was written against one field but meant the other. Normalization is the practice of producing that simplified name on purpose and consistently.
Normalization steps from raw description to clean vendor name
Vendor name normalization runs a raw description through a short series of steps that remove noise and keep the identifying words. The order matters: strip the parts that are never part of a name first, then compare what remains against the client's known vendors, and only then decide whether a line is a new vendor.
A practical sequence:
- Remove processor prefixes. Strings such as
SQ *,TST*,PAYPAL *orPOS PURCHASEdescribe how the payment travelled, not who was paid. Keep a note of the processor if the client cares, but take it out of the name. - Drop dates and times. Card lines often repeat the transaction date inside the description, as in
0412or04/12. - Drop store and terminal numbers. A
#2orSTORE 0087changes by location, and the vendor stays the same. - Drop location text. City and state codes at the end of a line rarely help identify the vendor for bookkeeping purposes.
- Drop reference numbers. ACH trace numbers and invoice references belong in a memo, not in the vendor name.
- Standardise case and spacing. Collapse repeated spaces and use one casing convention.
- Match against the client's vendor list. Compare what is left to names already mapped for this client, and use the match if there is one.
- Flag the rest as new. Anything that does not match is a candidate new vendor and goes to review.
Steps 1 through 6 are mechanical. Step 7 is where judgement lives, because two remaining strings can be close without being the same company. Step 8 keeps the process honest: a line with no match should be held, not forced onto the nearest name.
Lines with no vendor text, such as a bare check number or a generic ONLINE PAYMENT, cannot be normalized from the description alone. They need a check register, a bill or a question to the client, and they are a common source of automation exceptions in bookkeeping, where the fix is a process step rather than another text rule.
A vendor normalization table for one client
A vendor normalization table records, for one client, how each raw description maps to a clean name and which account that name uses. The table is the artifact you maintain. Rules then point at the clean name, which keeps the rule list short and makes it obvious when two variants belong together.
The table below is an example for a fictional cafe. Descriptions, names and accounts are illustrative.
| Raw bank description | Noise removed | Clean vendor name | Account |
|---|---|---|---|
| SQ *HARBOR LINEN 0412 SEATTLE WA | SQ *, date, city |
Harbor Linen | Cleaning and laundry |
| HARBOR LINEN SVC ACH DEBIT 88213 | SVC, ACH DEBIT, trace number |
Harbor Linen | Cleaning and laundry |
| TST* NORTHSIDE PRODUCE 04/09 | TST*, date |
Northside Produce | Cost of goods sold |
| NORTHSIDE PRODUCE CO INV 5521 | CO, invoice reference |
Northside Produce | Cost of goods sold |
| PAYPAL *GRAPHICFOX | PAYPAL * |
Graphicfox | Advertising |
| AMZN MKTP US*2K41Z | US*, order code |
Amazon Marketplace | Needs review each time |
| CITY OF SEATTLE UTIL 3391 | account reference | Seattle City Utilities | Utilities |
Two rows deserve a second look. The marketplace row maps to a clean name but not to a fixed account, because the client buys different things there. Normalizing the name still helps: every marketplace line now groups together in review instead of scattering as separate strangers.
The other point is what normalization does not decide. A clean vendor name tells you who was paid, not how the payment should be treated. A 2,400.00 charge from a restaurant supply vendor could be a stock order or a new oven. Whether that oven goes on the balance sheet is a separate question, covered in the guide to deciding whether to capitalize or expense a purchase.
Vendor names that normalization should keep apart
Vendor name normalization should merge variants of one vendor and keep different vendors separate, even when their text looks alike. Over-merging is the quieter failure. Two companies with similar names, or one company acting in two roles, end up under one name and one account, and nothing flags the mistake because every line now matches a rule.
Cases to keep apart:
- Same brand, different business lines. A telecom provider can bill for a phone line and for a device instalment plan. One is an operating expense, the other may be a liability payment.
- Franchise locations owned by different companies. Two branches of a chain may be separate legal entities, which matters when the client tracks spending or contracts by payee.
- Similar short names. "ACE" can be a hardware store, an insurer or a plumber. Short strings need a second word or a condition before they merge.
- Payment processors as vendors. A line reading only
STRIPEorPAYPALmay be the processor's own fee or a payout of the client's sales. Merging those under one name hides income inside expense. - The client's own accounts. A transfer to savings and a payment to the bank's credit card both carry the bank's name. Neither is a vendor in the expense sense.
When in doubt, leave two names separate. Merging later is a single edit. Splitting a merged vendor means finding every past line that was posted under the wrong name.
Does vendor name normalization change the bank record?
Vendor name normalization should never change the bank record itself. The original description, exactly as the bank printed it, stays attached to each line. The clean name is an extra field used for matching and reporting. Keeping both protects reconciliation and gives a reviewer the evidence behind every categorization.
There are practical reasons to keep the raw text:
- Reconciliation. When a balance does not tie, you compare converted lines with the statement. Raw text is what you search for on the page.
- Client questions. A client asking about a charge recognises the bank's wording, not your cleaned label.
- Re-mapping. If you later split a merged vendor, the raw descriptions are what tell you which lines go where.
- Duplicate detection. Two lines with identical raw text, date and amount are a different signal from two lines that only share a clean name. The post on how a duplicate bank statement upload gets caught covers why that difference matters when the same file arrives twice.
In conversion pipelines, the raw description comes out of extraction and normalization sits between extraction and categorization. The walkthrough of automated bank statement conversion, stage by stage shows where each step falls, from reading the PDF to the export file.
Keeping a client's vendor name list current each month
A vendor name list stays useful only if it is maintained a little every month. New vendors arrive, banks change how they print descriptions, and processors rename their prefixes. Ten minutes of upkeep during the monthly review keeps rules matching. Skipping it lets variants pile up until the review queue fills with suppliers the client has used for years.
A monthly routine that fits into normal review:
- Scan new names first. Before categorizing, look at every name flagged as new this month. Many will be variants of known vendors with fresh noise.
- Map variants, then approve. Attach each variant to its existing clean name before you approve the line, so the decision is recorded once.
- Watch for format shifts. If several known vendors suddenly appear as new, the bank or a processor probably changed its description format. Update the stripping step rather than mapping each line by hand.
- Retire dead vendors. Once or twice a year, remove names the client no longer uses so the list stays readable.
- Note the hard cases. Keep a short comment on shared vendors and merged names explaining why they are set up that way, so the next person on the file does not undo it.
In AutoBankConvert, each client's rules and past coding live in that client's own workspace, and lines the rules are not sure about go to a review queue with a suggested category. Approving one teaches the client's rules for the next month. A consistent vendor name is what lets that learning carry from one statement to the next. To try it on a month of your own client statements, get started with AutoBankConvert.