Optical Lab Job Costing and Lens Inventory in QuickBooks
Jul 11, 2026
PDF, JPG, PNG, BMP, HEIC, TIFF
Upload your bank statement
Drop file here or click to upload
PDF, JPG, PNG, BMP, HEIC, TIFF
Uploading...
Short answer: An optical lab tracks job costs and lens inventory in QuickBooks by carrying lens blanks, semi-finished pucks, coating chemistry, and stock frames as inventory (a balance-sheet asset) when they are bought, then releasing their cost to cost of goods sold (COGS) only when a job finishes and ships. While a job is being surfaced, edged, and coated, its material and lab labor sit in a work-in-process account, and each work order carries its own material, labor, and outside-processing cost so you can see gross margin per job.
Last updated July 2026.
The usual mistake is treating every supplier draft as an expense the day the cash leaves the bank. A wholesaler ACH to Essilor or Hoya that lands on your statement is not a cost of this month's sales. It is a stock of blanks you will grind into jobs over the next several weeks. Book it as inventory, cost each job as it moves through the lab, and let the numbers tell you which product lines pay. If you would rather skip ahead to the data entry, you can convert an optical lab bank statement to QuickBooks and reconcile from there.
What counts as inventory in an optical lab
A wholesale lab that grinds, edges, and coats prescription lenses runs like a small manufacturer. The things you buy to make jobs are inventory, a current asset, until they get consumed:
- Lens blanks and semi-finished pucks from suppliers such as Essilor, Hoya, Shamir, and Zeiss.
- Coating chemistry for anti-reflective, hard-coat, and mirror finishes.
- Edging consumables tied to production runs.
- Stock frames you keep on the shelf to build complete jobs.
When a wholesaler ACH draft hits the bank statement, that is inventory, not an expense at purchase. The value stays on your balance sheet until a job actually uses it. The reason this matters is the matching principle: the cost of a pair of lenses and the revenue from that job should land in the same period. Expense a $5,000 blank order in February but ship most of those jobs in March, and February looks unprofitable while March looks inflated.
Setting up your inventory, WIP, and COGS accounts
Keep the chart of accounts short and deliberate so a job can walk from raw blank to shipped without guesswork. A typical lab setup looks like this:
| Account | Type | What it holds |
|---|---|---|
| Lens and Frame Inventory | Current asset | Blanks, pucks, coating chemistry, edging consumables, stock frames on hand |
| Work-in-Process | Current asset | Material and lab labor in jobs being surfaced, edged, or coated |
| Cost of Goods Sold | COGS | Job cost released when the finished job ships and invoices |
| Outside Processing | COGS | Specialty coatings and free-form surfacing sent to a partner lab |
| Accounts Receivable | Current asset | Net 30 balances owed by the practices you sell to |
QuickBooks Online Plus and Advanced track inventory items and quantity on hand, so you can carry blanks and stock frames as tracked items and let each job reduce quantity and post to COGS. Many labs run a lighter periodic method instead: buy to inventory, then move value into WIP and out to COGS with a month-end journal entry based on a physical count. Either works. Pick the one your team will keep current.
Job costing: tying cost to a work order
Real margin lives at the job level. For each work order, capture three things: the material consumed (which blank, how much coating chemistry), the lab labor to surface, edge, and coat it, and any outside processing. Add them and you have the job cost that flows through WIP to COGS. Over a month, that shows which lens designs and coatings actually earn.
In QuickBooks Online you can do this with Projects or Classes, tagging each cost and each invoice line to a job so the profit report reads per work order. QuickBooks Desktop has job costing built in, so you assign material and labor to a customer job directly. The mechanics differ, but the goal is the same: every dollar of material and labor points at the job it belongs to, and you can pull a margin figure for that job at any time.
Work-in-process: jobs on the bench at month end
WIP is any job that has been surfaced but not yet fully coated, edged, and shipped. The blank has been pulled and generated, a tech has logged hours, but the job has not left the door and you have not billed the practice. Everything invested so far has value, and accounting treats those partially finished goods as inventory right up until the job sells.
Here is a short balanced example. Suppose you buy blanks and pucks worth $2,000 and pay a wholesaler by ACH:
| Step | Debit | Credit |
|---|---|---|
| Buy blanks to inventory | Lens and Frame Inventory $2,000 | Bank $2,000 |
| Consume material into jobs on the bench | Work-in-Process $700 | Lens and Frame Inventory $700 |
| Finish and ship those jobs | COGS $700 | Work-in-Process $700 |
| Invoice the practice for the finished jobs | Accounts Receivable $1,400 | Sales Revenue $1,400 |
Each line balances. The $2,000 purchase adds an asset and reduces cash. Consuming $700 of material into open jobs moves value from raw inventory into WIP, still an asset. When those jobs ship, the $700 leaves WIP and lands in COGS, matching the $1,400 of revenue you record on the invoice. Gross profit on the shipped work is $700, and it sits in the same month as the sale. The remaining $1,300 of blanks stays in inventory for future jobs, and any job still on the bench at close keeps its cost in WIP rather than COGS.
Outside processing is a direct job cost
When you send a job out for a specialty coating or free-form digital surfacing you cannot do in house, that fee is a direct cost of that specific job, so it belongs in COGS (an Outside Processing account), not office overhead. Tie it to the work order the same way you tie material and in-house labor. Coding it to COGS keeps gross margin honest, because a farmed-out coating is just as much a cost of the finished pair as the blank it sits on.
Track domestic outside-processing partners for 1099 purposes as you pay them. For 2026, the reporting threshold for nonemployee compensation on Form 1099-NEC is $2,000, so a partner lab you pay above that during the year generally needs a 1099. Your accountant can confirm which vendors qualify.
Wholesale receivables: a practice payment is not new income
You bill eye-care practices net 30, so a deposit from a practice on your bank statement is almost always a payment against a job you already invoiced, not fresh income at the moment the cash lands. If you record the deposit as revenue and you already booked the sale when the job shipped, you count the same money twice and overstate income.
Handle it as a receivable. When the job ships you debit Accounts Receivable and credit Sales Revenue. When the practice's ACH or check deposit clears weeks later, apply it against that open invoice:
| Step | Debit | Credit |
|---|---|---|
| Ship and invoice the job (net 30) | Accounts Receivable $1,400 | Sales Revenue $1,400 |
| Practice pays by ACH deposit | Bank $1,400 | Accounts Receivable $1,400 |
The payment clears the receivable and adds cash. Revenue was recognized once, at ship. The practices buying from you are running the mirror image of this on their side, and if you want to see how their books treat the payable, the guide on bank statement to QuickBooks for optometry practices walks through it. As your lab keeps growing its base of practice accounts, applying deposits to the right open invoices is what keeps AR from turning into a guessing game.
Equipment: owned gear versus financed drafts
Surfacing generators, edgers, and AR coating chambers are not supplies. When you buy a piece of gear outright it is a fixed asset you capitalize and depreciate over its useful life, so the cost spreads across the years it earns rather than hitting one month. Your accountant sets the depreciation method and life.
Financed equipment reads differently on the statement. The monthly draft is not all expense. Split each payment between principal, which pays down the loan liability, and interest, which is the expense. If you code the whole draft to an expense account you understate the liability and overstate your costs. A quick amortization schedule from the lender tells you how much of each payment is principal versus interest.
Freight: inbound versus outbound
Freight splits by direction. Inbound freight on blanks and pucks is part of the cost of getting that inventory in the door, so it rolls into inventory cost and follows the blanks into COGS as jobs finish. Outbound shipping of finished jobs to a practice is a fulfillment expense, or you bill it to the practice on the invoice. Keeping the two apart stops inbound freight from being expensed early and keeps your per-job cost accurate.
Getting statement data into QuickBooks quickly
None of this reconciles unless the bank data is actually in QuickBooks. If your bank feed is patchy or you are catching up several months, the fastest route is to take the PDF statement, convert it to a .qbo (Web Connect) file, and import it. The PDF to QBO converter accepts PDF and image statements and outputs a .qbo file you drop straight into QuickBooks Online or Desktop. Generate the file, import it, then match the supplier drafts to inventory and the practice deposits to open invoices using the entries above.
Frequently asked questions
Is a supplier ACH draft for lens blanks an expense or inventory?
It is inventory. A wholesaler draft to a supplier like Essilor or Hoya buys a stock of blanks and pucks you will grind into jobs over the coming weeks, so it lands on your balance sheet as a current asset. The cost only moves to cost of goods sold as each job finishes and ships, matching the revenue for that job.
How do I job cost lenses in QuickBooks?
Tie material, lab labor, and outside processing to a specific work order. In QuickBooks Online use Projects or Classes to tag each cost and invoice line to the job. QuickBooks Desktop has job costing built in, so you assign costs to a customer job directly. Either way you get gross margin per job, which shows which lens designs and coatings actually pay.
Why is a practice's deposit not counted as income?
Because you bill net 30, the deposit is usually a payment on a job you already invoiced when it shipped. Revenue was recognized then. Apply the ACH or check against the open receivable instead of booking it as new sales, or you count the same money twice and overstate income for the period.
Where does outside processing belong in my books?
In cost of goods sold. A specialty coating or free-form surface sent to a partner lab is a direct cost of that specific job, so it goes to an Outside Processing COGS account, not overhead. Tie it to the work order alongside material and in-house labor, and paying a domestic partner above $2,000 in 2026 generally triggers a 1099.
Treat blanks and coatings as inventory, cost each job through WIP, hold practice payments as receivables, and split freight and financed gear correctly, and your margin per job stops being a mystery. When you are ready to reconcile, start on the bank statement to QuickBooks for optical labs page, generate a .qbo from your PDF statement, import it, and match every draft and deposit to the entries above.
Convert your first statement free.
Upload a PDF bank statement, get a QuickBooks-ready .qbo back in seconds. No card to try it.