Expense categorization step by step: build your chart of accounts, set approval rules, map Stripe and Shopify, and keep books investor-ready.
You closed the month with a profit figure the team liked, then a client-margin question showed up that the P&L can't answer. Contractor hours sit in a general bucket, Stripe hit the bank as a net deposit, and a founder card mixed a client dinner with a family flight. Expense categorization is the evidence behind the margin, the tax return, and the story you tell investors. A wrong account changes cost of revenue, the deduction you can defend, and whether a customer looks profitable.
Say an agency's P&L shows a healthy $60,000 monthly profit while one retainer loses $18,000 a month without anyone noticing. The contractor hours for that client landed in a general operating account, so the loss never showed up on the client view. That is the cost of skipping the chart before you hire, fundraise, or add a second product line.
Start from nine categories. Add an account only when one of these nine can't hold a real purchase. Never create a category without a named evidence rule.
| Category | Typical examples | P&L treatment | Evidence required |
|---|---|---|---|
| Software and cloud | SaaS tools, hosting, data platforms | Operating expense; customer-facing hosting in cost of revenue | Vendor invoice, plan name, business purpose |
| Contractors and outsourced labor | Freelancers, subcontracted agencies, offshore developers | Cost of revenue if delivered to clients; otherwise operating expense | Signed contract, invoice, W-9 or W-8BEN form |
| Payment processing | Stripe and Shopify Payments fees | Operating expense (or netted against revenue, if your policy says so) | Processor monthly statement |
| Advertising and acquisition | Paid search, paid social, events, sponsorships | Sales and marketing | Invoice, campaign ID |
| Client meals | Lunches and dinners with prospects or clients | Operating expense, subject to 50% limit | Receipt, attendees, business relationship, purpose |
| Travel | Airfare, lodging, mileage, rideshare | Operating expense; rebilled to client where agreed | Itinerary, receipts, trip purpose, destination |
| Equipment and hardware | Laptops, servers, furniture above capitalization threshold | Fixed asset, depreciated over useful life | Invoice, in-service date, asset tag, location |
| Client pass-through costs | Ad spend or licenses bought on a client's behalf | Clearing (balance sheet) until rebilled, then pass-through revenue | Client code, rebill invoice |
| Owner and personal spend | Personal card use, family travel | Not an expense; owner draw or reimbursement | Reimbursement record or owner draw entry |
SaaS: hosting and software decide gross margin, so customer-facing cloud stays in cost of revenue and internal tools stay in operating expense. Agencies: contractors and client pass-through costs decide whether a retainer is profitable. E-commerce: payment processing and refunds decide whether the fee rate is visible. Payroll, rent, and insurance still belong on the chart. They rarely cause the silent client loss.
Pull last quarter's transactions this week. Every line should map to one of the nine, with no leftover bucket. If a line doesn't fit, you need a written rule, not a tenth account named after the vendor.
The mistake behind most miscoding is treating the vendor name as the category. One SaaS vendor can bill a platform subscription, an implementation project, and a reimbursable expense on the same invoice. Each line carries a different tax treatment, needs a different document behind it, and moves a different part of the P&L, so each belongs in a different account.

NACUBO program-code guidance separates what was purchased from why it was purchased. Functional classification groups costs by purpose. Nature classification groups them by the resource consumed, such as employee compensation, materials, or depreciation. The two answer different questions, and a chart built on only one hides half the picture.
Payroll shows why both views matter. Employee compensation is the nature of the cost. Delivery or sales is the function. Management reporting needs both, or you can't see gross margin and departmental spend at the same time, and anyone reading your P&L can't tell what actually drives your cost of delivery.
Practical rule: I would rather run a 15-account chart with strong attachments than a 30-account chart with thin memos. Extra accounts create more coding choices and a slower close.
Vendor identity as proof. A name on the card statement says nothing about the category. Split invoice lines before you post, and attach the detail page rather than the statement.
A dimension hiding inside the account name. "Software - Marketing" and "Software - Product" drift apart within a quarter as coders guess which team a shared tool serves. Fix it with one software account and a department tag.
No written rule for the gray case. The same cloud bill gets coded three ways by three people. Fix it with a one-page decision note that names the account, the required document, and who decides, then test recurring vendors on a schedule.
Consistency is what makes the evidence hold up. Every category should end the month with a rule behind it and a document attached.
Labeling a $2,400 meals bill "client development" doesn't make it fully deductible. The IRS meals FAQ generally limits deductible business meals to 50% when the cost is ordinary and necessary, you or an employee is present, the meal isn't lavish, and you provide it to a current or prospective business contact. On $2,400 of qualifying client meals, the deductible amount is $1,200. Entertainment is generally nondeductible, and food at an entertainment event qualifies only when it's bought separately or stated separately on the invoice. The chart has to split meals from travel, entertainment, and employee benefits. A credit-card feed alone doesn't establish the deduction.
IRS travel guidance treats transportation, lodging, and related business costs as potentially deductible when the trip is ordinary, necessary, and business-related. Split a $1,200 customer trip before anyone posts a single "travel" total.
| Expense | Amount | Categorization | Amount in the category |
|---|---|---|---|
| Client meals for the year | $2,400 | Meals, 50% limit | $1,200 deductible |
| Trip airfare | $420 | Business travel | $420 |
| Trip lodging | $360 | Business travel | $360 |
| Trip meals | $180 | Meals, 50% limit | $180 recorded, $90 deductible |
| Trip rideshare | $90 | Business travel | $90 |
| Personal sightseeing | $150 | Excluded from business travel | $0 |
| Production equipment | $24,000 | Fixed asset, five-year straight line | $4,800 per year, $400 per month |
| Laptop | $1,200 | Expensed under $2,500 policy | $1,200 in purchase month |
Airfare $420, lodging $360, meals $180, and rideshare $90 belong in business travel, $1,050 in total. The $150 of personal sightseeing stays out. The $180 of meals is recorded in full and is generally $90 deductible. Keep mileage on its own line too, because you use either actual vehicle costs or the standard mileage method, with time, place, purpose, and amount on the record.
Equipment is a timing problem. Posting $24,000 of production gear to office expense in the purchase month dumps the whole cost into one period. A five-year straight-line schedule with no residual books $4,800 a year, $400 a month. A $1,200 laptop can be expensed in the purchase month under a $2,500 capitalization policy. Same card, two treatments.
Before close, run an exception report for meals over $150 and for any card purchase with no business purpose. You don't need to open every receipt. You need the ones that change the deduction. If the trip file is still a pile of screenshots, start with a simple way to track business expenses so the receipt, attendees, and purpose arrive with the charge.
Build the chart in order. Each step depends on the one before it, and skipping ahead is how duplicate accounts survive the cleanup.

Capitalization feels like extra admin until you explain a distorted gross margin to an investor. A monthly roll-forward, beginning balance plus additions minus disposals and accumulated depreciation, is shorter than that conversation.
The test of success is simple. A new hire can code a typical invoice without asking anyone.
A published evaluation of an AI-powered ERP classifier reported 88.5% overall accuracy. That headline looks safe until you split it. Error rates hit 17.6% in "Miscellaneous Services" and 15.9% in "Travel Other," while atomic categories such as airfare and meals stayed below 5%. Restructuring expense descriptions lifted accuracy to 90.2%. The evaluation of that classifier is the reason I don't trust an aggregate score.

Sample at least several hundred historical transactions. Label the correct account and dimensions. Measure precision by category, not a single accuracy number. The same material notes that 1–4% of invoices may contain at least one coding, matching, tax, or vendor error, and GL-coding mistakes sit among the most frequent types.
| Confidence tier | Typical transaction | Action | Review cadence |
|---|---|---|---|
| High, low risk | Recurring SaaS subscription from a known vendor at a known amount | Auto-post | Monthly precision check |
| Medium | Known vendor serving two purposes, such as a cloud provider billing hosting and internal development | Post to review account for owner confirmation | Weekly exception review |
| Low or new | New vendor, unusual amount, or "Miscellaneous Services" line | Hold for human coding before posting | Every close |
Each account group has an owner. Contractor payments and capitalizable purchases need reviewer sign-off before they post. Review three numbers every month: precision by category, exception rate, and reclassification rate. If you train the model on messy history, or you let a catch-all absorb anything uncertain, the model will repeat your old mistakes faster. Clean vendor names matter as much as the model. The same discipline shows up in a practical invoice guide for controllers when matching and coding errors travel together. Judge the system by corrected postings, not by how fast the queue empties. For the posting workflow around that queue, see how to automate accounts payable without giving up the review step.
Automation removes repetitive keying. It doesn't remove judgment.
Stripe and Shopify pay out net of fees. The bank deposit will never match gross sales, and that mismatch is the most common reconciliation failure I see in this revenue band. Split every payout into gross sales, processing fees, refunds, disputes, and the net deposit before you post anything.
| Source data | Ledger treatment | Dimension to tag | Common error |
|---|---|---|---|
| Stripe payout | Clearing account, then bank deposit | None | Booked as revenue at net amount |
| Stripe processing fees | Payment processing expense | Sales channel | Netted against sales, hiding the true fee rate |
| Stripe refunds and disputes | Refund or contra-revenue account | Customer | Booked as an expense |
| Shopify sales | Revenue by sales channel | Sales channel | One revenue line for all channels |
| Shopify Payments fees | Payment processing expense | Sales channel | Missing from bank reconciliation |
| Shopify app subscriptions | Software expense | Department | Coded to general expense |
| Card feed from a cloud or ad platform | Hosting, advertising, or review account | Project or customer | One merchant, two purposes, one category |
A cloud provider or ad platform can serve hosting, internal tools, and client work on one card. Default that merchant to the review account. A single auto-rule will hide client cost inside overhead, or the reverse.
Tag one dimension per purpose. Department covers internal cost. Customer or project covers client work. Channel covers revenue. QuickBooks uses classes and locations. Xero uses tracking categories. NetSuite uses departments, classes, and locations. The names differ. The job doesn't. Teams on Xero can follow accounting integration guidance for Australian online retailers when the Shopify feed and the ledger disagree on fees. Multi-channel brands should use the same split described in our note on e-commerce accounting across channels.
For one full month, match every Stripe and Shopify payout to a bank deposit. The unexplained difference should be zero before you trust the fee rate or the channel margin.
A receipt isn't the whole defense. It proves the amount. It doesn't prove the business purpose, the relationship, or the deductibility.

The IRS instructions for Form 2106 require travel, meals, gifts, and listed-property records to show time, place, business purpose, business relationship where it matters, and amount. Picture 60 transactions totaling $18,000 under "travel and entertainment." If 20 lack a business purpose and 10 mix entertainment with food on one receipt, you can't tell what qualifies, what sits under the meal limit, and what is nondeductible.
On $100,000 of monthly card spend, $6,000 without required support is a 6% documentation exception rate. That is a control problem, not a cosmetic one. Report three metrics before statements go out: uncategorized spend, unsupported spend, and spend awaiting employee clarification. Tag each line by expense class, department or project, customer or vendor, payment method, and documentation status. Unresolved items stay in the review account. An audit trail is what lets a reviewer see who coded the line and who cleared it.
"The close owner signs off before numbers leave finance. If the exception report is still open, the statements aren't done." Steven, controller at Jumpstart Partners, who ran a clean monthly close on time for two years on a public B2B SaaS finance team
Watch this walkthrough of a categorization review, then compare it with your own exception list.
Run the three metrics this month and clear the review account before you issue statements. If the list is long, book a Finance Ops Diagnostic. It's a $3,500 fixed fee, delivered in 5 business days. It doesn't include fundraising strategy, tax preparation, or transaction-only cleanup. We also offer a complimentary ROI assessment so you can decide whether controller support fits your books.
Jumpstart Partners builds the chart, the evidence rules, and the monthly close for SaaS companies, agencies, and professional services firms between $500K and $20M in revenue. If your categories still hide client margin or leave deductions unsupported, we'll put owners, review points, and a defensible close in place. Visit Jumpstart Partners to start with a diagnostic or a complimentary ROI assessment.