Open the tag list in most SMB expense tools and you'll find the same graveyard. Marketing, marketing, Mktg, MKT-2023, Marketing (old), and one lonely tag called mkting-Q3-DONOTUSE. Six tags, one concept, zero consistency. When someone runs a report on marketing spend, they either pick one and undercount, or they select all six and hope they caught them all.
This isn't a taxonomy problem. Deciding what categories should exist is a separate exercise, and if that's what you're wrestling with, the work on designing spend categories to answer leadership questions covers it properly. Tag governance is the layer underneath that: the rules that keep the tags you already agreed on from sprawling, drifting, and quietly corrupting every report you pull.
Most teams never build this layer. They pick good categories, feel organized for about four months, and then watch entropy do its thing. This post is about the specific mechanics that stop that.
Why tag sprawl is almost always a permissions problem first
The single biggest cause of tag mess isn't bad naming decisions. It's that everyone can create a tag whenever they want, at the exact moment they're least equipped to make a naming decision — mid-expense-entry, in a hurry, trying to submit before a deadline.
Someone's tagging a vendor invoice, doesn't see the tag they expect, and types a new one. They're not being careless. They genuinely can't find Software - SaaS because it's sitting between Software licenses and SaaS tools, both created by other people having the same panic six weeks earlier.
Free-text tag creation at the point of entry is where governance dies. A 12-person company starts with around 30 tags, and eighteen months later there are 140, of which maybe 45 get used more than twice. The other 95 are typos, duplicates, one-off experiments, and tags from people who left the company.
So the first governance rule has nothing to do with naming conventions. It's this: the people entering expenses should almost never be the people creating tags. Separate the two actions. Entry uses an existing, searchable list. Creation is a small, deliberate request that goes to whoever owns the tag structure.
Enforceable naming rules that people actually follow
Naming conventions fail when they're a document. They work when they're enforced by the system at creation time. A rule that lives in a Notion page nobody reads is not a rule — it's a suggestion, and suggestions lose to deadline pressure every time.
Stop losing track of your business spending.
Costyly helps you record, monitor & control expenses—accurately and efficiently.
- Automated expense categorization
- Real-time budget tracking
- Detailed financial reports
No credit card required
Here's a naming structure that holds up in practice across small teams:
| Element | Rule | Good | Bad |
|---|---|---|---|
| Case | lowercase, hyphen-separated | travel-airfare | Travel Airfare, Travel_Airfare |
| Prefix by dimension | dimension first, always | dept-marketing | marketing, mktg |
| No dates in the name | dates live in the expense, not the tag | client-acme | client-acme-2024 |
| No status words | status is lifecycle metadata, not naming | vendor-figma | vendor-figma-old |
| Singular nouns | pick one and enforce it | region-west | regions-west |
The two rules that save you the most pain are no dates and no status words. Dates in tag names are how you end up with q1-events, q2-events, q3-events cluttering the list forever, when the expense date already tells you the quarter. Status words like -old, -new, -DONOTUSE are people trying to manage lifecycle by editing the name — which is exactly the wrong tool.
A practical enforcement setup:
-
Lock tag creation to two or three owners maximum.
-
Give those owners a validation pattern — even a simple regex like
^[a-z]+-[a-z0-9-]+$catches most violations. -
Reject any new tag that duplicates an existing one after normalizing case and spacing.
Marketingandmarketingshould collide and get blocked. -
Require a dimension prefix so the tag self-documents what kind of thing it is.
The prefix discipline matters more than it looks. When every tag starts with dept-, vendor-, client-, project-, or cost-type-, your list becomes browsable and self-sorting. Someone looking for a client tag types client- and sees only clients. That single habit eliminates most duplicate creation, because people can actually find what already exists.
The retire and merge lifecycle nobody sets up until it's too late
Every tag has a life. It gets created, used heavily, then usage tapers, then it hangs around dead for two years because deleting it feels risky. The missing piece in almost every SMB setup is a defined path from "active" to "gone" that doesn't break historical reports.
Retire means the tag stays on old transactions but can't be applied to new ones. This is your default for anything genuinely finished — a completed project, a client you no longer serve, a discontinued product line. Historical data stays intact and reportable. New entries just can't reach it.
Merge means two tags that were always the same concept get collapsed into one, and every transaction from the losing tag moves to the winner. This is what you do with marketing / Mktg / Marketing. Pick the survivor, remap the rest, done. The detail people miss: a merge should be logged. You want to be able to answer "why did last year's marketing number change when I re-ran the report?" and the answer is "because we merged three duplicate tags in March, here's the record."
Delete you almost never use. Only for tags created by mistake with zero transactions attached. If a tag has ever touched a real expense, you retire it — you don't delete it — because deleting can orphan or silently alter historical numbers.
A pattern worth stealing: run merge decisions through the same owner who controls creation, and never let a merge happen automatically without a human confirming the survivor. Auto-merge on fuzzy matching sounds efficient until it collapses client-apex and client-apex-consulting into one when they were actually two different customers.
Automated housekeeping recipes
Manual tag cleanup is a task everyone agrees is important and nobody ever does. The fix is turning it into a small set of automated checks that surface problems, so the human only makes decisions instead of hunting for them.
Modern expense platforms with AI-assisted housekeeping can run these detections continuously and hand you a shortlist to review, rather than you scrolling through 140 tags manually. But you can build the same logic in a spreadsheet if your tool won't. The value is in the recipes, not the automation itself.
The recipes that catch the most:
-
Near-duplicate detection. Flag tags whose normalized names are within one or two edits of each other —
travel-airandtravel-airfare,vendor-adobeandvendor-adobe-inc. These are almost always merges waiting to happen. -
Zero-use since creation. Any tag created more than 60 days ago with no transactions. Usually a typo or an abandoned experiment. Candidate for delete.
-
Stale but historical. Tags with no new activity in 9–12 months but real historical volume. These are retire candidates, not deletes.
-
Orphaned owners. Tags whose creator or assigned owner has left the company. Someone still around needs to inherit or retire them.
-
Prefix violations. Tags that don't start with an approved dimension prefix. These slipped through and need renaming or reclassification.
-
Concentration outliers. A tag that's suddenly getting 40% of all transactions is often a sign people are dumping into it because they can't find the right one.
That last one is subtle and underrated. When one tag balloons, it's rarely because that category genuinely exploded — it's usually a findability failure feeding a dumping-ground tag. Worth investigating before it eats your reporting granularity.
The modern housekeeping workflow looks like detection → shortlist → human review → retire/merge/delete → audit log and cadence review.
Start by prioritizing near-duplicate detection — it's the highest ROI cleanup.
Modern expense platforms with AI-assisted housekeeping can run these detections continuously and hand you a shortlist to review, rather than you scrolling through 140 tags manually.
A housekeeping cadence that fits a small team
Weekly (5 minutes, automated surface + quick human glance): Review the "new tags created this week" list. Should be short. If it's not, something in your creation controls is leaking. Catch typos and obvious duplicates while they're fresh and easy to merge.
Monthly (20–30 minutes): Run near-duplicate and prefix-violation checks. Merge the obvious duplicates. Rename or reclassify anything that skipped the prefix rule. This is the workhorse cadence — most of your governance value comes from doing this consistently.
Quarterly (about an hour): Handle lifecycle. Review stale-but-historical tags and retire the genuinely finished ones. Reassign orphaned owners. Look at concentration outliers and figure out whether a dumping-ground tag needs to be split back out. This is also the natural moment to check whether your dimension structure still matches how leadership is asking questions.
Annually: Full audit. Reconcile your live tag list against your chart of accounts and against the shared-cost allocation logic — because tags and allocation splits drift apart over a year. If you allocate shared expenses by tag, the mechanics in allocating shared expenses without spreadsheets depend directly on those tags staying clean, so this is where the two efforts meet.
The cadence only works if the weekly step stays trivially small. If your weekly new-tag list is regularly long, don't push harder on cleanup — go back and tighten creation permissions. You're treating a symptom.
A quick real scenario
A specialty e-commerce business, around 15 people, had accumulated roughly 160 tags over about two years. Two people both had creation rights and neither coordinated. Monthly spend was somewhere in the $180k–$210k range, and about a third of it was tagged inconsistently enough that their marketing-vs-fulfillment split was basically guesswork.
The cleanup wasn't dramatic. They spent one afternoon merging duplicates — that alone collapsed 160 tags down to around 55. They locked creation to a single owner, added dimension prefixes, and set up a monthly near-duplicate check. Retired about 30 dead tags from finished product lines without deleting the history.
The result wasn't a magic revenue number. It was that their monthly reports stopped moving between runs, the finance lead stopped manually reconciling tag variants in a spreadsheet, and a report that used to take half a day to trust took under an hour. Six months later, the tag count had crept up only to around 60 — controlled growth instead of sprawl.
When strict governance is a bad idea
If you're a three-person company with 20 tags, none of this needs formalizing. Enforced prefixes and lifecycle reviews are overhead you don't need yet. Just don't let two people create tags independently, and you've solved 90% of it.
Heavy governance makes sense once you cross roughly 8–10 people entering expenses, or once tag-based reporting starts driving real decisions and the numbers stop matching between runs. Before that, the ceremony costs more than the mess.
And skip the near-duplicate auto-flagging entirely if your tag names are genuinely similar by design — some businesses have legitimately close names like region-north and region-northeast, and an over-eager matcher will just annoy you. Tune the rules to your actual structure, not a generic template.
Where this leaves you
Tag governance isn't about having perfect tags. It's about having a small, boring, repeatable set of controls so the tags you agreed on stay usable a year later. Separate creation from entry. Enforce naming at the system level, not in a document. Retire and merge instead of deleting. Keep the cadence small enough that you'll actually do it.
The teams that get this right aren't the ones with the cleverest taxonomy. They're the ones who decided early that only two people could create tags, and stuck to it. Everything else is downstream of that one decision.
Tag governance isn't about having perfect tags. It's about having a small, boring, repeatable set of controls so the tags you agreed on stay usable a year later. Separate creation from entry. Enforce naming at the system level, not in a document. Retire and merge instead of deleting. Keep the cadence small enough that you'll actually do it.
The teams that get this right aren't the ones with the cleverest taxonomy. They're the ones who decided early that only two people could create tags, and stuck to it. Everything else is downstream of that one decision.
Ready to master your business expenses?
Join 5,000+ businesses using Costyly to save time, reduce overspending, and improve financial visibility.