The problem with receipts and job costs
You run three crews across two job sites. Lumber goes on the company card at Home Depot. Fuel at the gas station. Equipment rental at the yard. Every receipt is a job expense — but which job?
If you're like most contractors, you figure that out later. At the end of the month, you sit down with a stack of receipts and a spreadsheet, trying to match each receipt to a project. Some are obvious. Some you guess. Some you give up on and dump into "overhead."
By the time you know what a job actually cost, the job is done. If it went over budget, there's nothing to do about it now.
The receipt is the moment the expense happens. That's when the project code should be captured — not two weeks later from memory.
What project codes are
A project code is a short label that ties a receipt to a specific job. It could be a job number, a customer name, a phase of construction — whatever you already use to track jobs in QuickBooks.
In QuickBooks, these show up as Classes or Customers/Jobs. Classes let you tag transactions across categories (e.g., "New Construction," "Remodel," "Service Call"). Customers/Jobs tie expenses to a specific project for that client.
The problem has never been that QuickBooks can't track job costs. It can. The problem is getting the code onto the receipt at the moment of purchase — so it flows through to QuickBooks without you doing it manually later.
Three ways your crew can use project codes with Maya
Maya doesn't make your crew learn a new system. It works with what they already do — text a receipt. The project code just goes along for the ride.
1. Write it on the receipt
Before your crew member texts the photo, they write the project code on the receipt with a pen. "Job 42." "Smith remodel." "Phase 3." Maya's vision model reads the handwritten code along with the printed receipt data. No extra steps, no app, no training.
This is the simplest method. Your crew already handles the receipt — they just add a few characters before snapping the photo.
2. Text it with the receipt
Instead of writing on the receipt, your crew member includes the code in the text message. They send the photo and type "Job 42" or "Smith" in the message body. Maya reads the text alongside the image and matches the code to the right QuickBooks class or customer.
This works well for crews who prefer typing over writing. The code goes in the message, the receipt goes as an attachment, and Maya handles the rest.
3. Type it into the draft
Sometimes a receipt comes in without a code. Maybe it was a rush purchase, or the crew member forgot. When Maya creates the draft in QuickBooks, the project code field is empty. You fill it in when you review the draft — the same way you already do for any other field that needs correcting.
This is the fallback. It's not the goal, but it's there. The receipt is already in QuickBooks as a draft with the image attached. Adding the code takes seconds because everything else is already filled in.
How Maya maps codes to QuickBooks
When Maya reads a project code from a receipt or text message, it maps it to the corresponding QuickBooks Class or Customer/Job. Here's how that works:
- Exact match — If the code matches an existing QuickBooks class or customer name, Maya assigns it directly. "Job 42" matches the customer job "Job 42." Done.
- Partial match — If the code is close but not exact ("Smith" vs. "Smith Remodel"), Maya suggests the closest match in the draft. You confirm or correct it when you review.
- No match — If the code doesn't match anything in QuickBooks, Maya leaves the field blank and flags the draft for your review. You assign it manually. Nothing gets posted to the wrong job.
Maya never guesses. It either finds a match, suggests one for you to confirm, or leaves it blank. You're always in control of what gets assigned.
Why this beats manual categorization
Manual entry
Receipts pile up in a truck or a shoebox. At month-end, you sit down with a stack and try to remember which job each one belongs to. Some are obvious. Some you guess. Some land in "overhead" because you can't remember. By the time you see job costs, the project is done and over budget.
With Maya
Your crew texts the receipt with a project code at the point of purchase. Maya creates a QuickBooks draft with the code mapped to the right class or customer. You see job costs in real-time. You catch a job going over budget while you can still do something about it.
The difference isn't the tool. It's the timing. Manual entry captures project codes two weeks after the expense. Maya captures them at the moment of purchase — when the information is fresh and the crew member is standing at the counter with the receipt in hand.
What you see in QuickBooks
When Maya creates a draft with a project code, the QuickBooks draft transaction has the Class or Customer/Job field already filled in. You don't open the draft and think "which job was this?" — the code is there, the vendor is there, the amount is there, the receipt image is attached.
You review the draft, confirm the project code is right, and approve. The transaction posts to the correct job. Your P&L by job is current. Your job cost reports are accurate. And you didn't spend an hour at the end of the month matching receipts to projects.
The project code is captured at the moment of purchase, flows through to the QuickBooks draft, and lands on the right job — without you touching it twice.
Setting up project codes
If you already use Classes or Customer/Jobs in QuickBooks, you're set. Maya reads the existing list and matches incoming codes to it. No new system, no parallel tracking.
If you don't use Classes yet, talk to your bookkeeper or CPA about setting them up. It's a QuickBooks feature that's been there the whole time — most contractors just never had a reliable way to get codes onto receipts at the point of purchase. That's the gap Maya fills.
The codes themselves are whatever makes sense for your business. Job numbers, customer names, phase labels. Short is better — your crew is writing or typing these on a phone at a supply counter. "42" is better than "Smith Residence Kitchen Remodel Phase 2."
The bottom line
Job cost tracking fails not because QuickBooks can't do it, but because the project code never makes it onto the receipt. By the time someone sits down to categorize expenses, the context is gone. The crew member who bought the lumber is on a different site. The receipt is in a glovebox. The code is a guess.
Maya fixes the timing. Your crew writes or texts a code when they text the receipt. Maya maps it to QuickBooks. You see job costs the day they happen.
No app. No training. No month-end categorization session. Just a text message with a code on it.