Automation · Integrations · Dental lab

LabelBot: the invoice prints its own shipping label.

Built for Carlos Ceramics Dental Lab, a family-run lab in North Miami Beach that ships finished crowns and bridges to dental offices every day.

Illustration: a printed invoice turning into a shipping label on its way to a parcel

Automation, at work.

See the automation services

Built
A Windows service that turns each printed invoice into one courier label
Stack
PythonWindows Task SchedulerCourier APIPDF text layer
Timeline
August 2026, shadow run from August 19, in daily use since September 2026
Status
Running on the lab's front-desk PC
Scale
Every case the lab ships by courier
The problem

The address was already on the invoice. Staff typed it again anyway.

A front desk with a printed invoice on the left and a courier website form on a monitor, the same address being typed a second time.

Each finished case leaves with an invoice and a courier label. The invoice came out of the lab's own system. The label meant opening the courier's website and retyping the practice name, street, suite and ZIP by hand.

Two earlier fixes, a browser extension and a barcode system, had already been tried and dropped. Both asked staff to do something extra. So the rule for this build was simple: it had to remove a step, not move one.

What we built

Seven parts between "Print" and a label on the box.

Staff keep printing the invoice the way they always have. They pick a printer called LabelBot instead of the usual one. Everything after that happens on the lab PC.

FRONT DESKON THE LAB PCOUTStaff print theinvoiceSame habit, newprinter name1VirtualprinterSaves the invoiceas a PDF thatkeeps its text2WatchedfolderWaits until thefile stopschanging3Read theinvoiceparse_doc findsthe ship-to blockby its position4Service-areacheckAsks the courierfirst. Outside thearea: stop5Ledger +lockWrites the intentdown before buyinganything6Courier APIBuys one label forthis one invoice7Label +invoice printSame Xerox, samemomentStops beforespendingOut of the area?Nothing boughtReprint, neverre-buyAn airbill exists?Print it againInvoice number onthe labelNever a patientnameStaff box thecaseOne label goes onthe boxguardraila person decides
How it fits together. One invoice in, one label out. The red boxes are the checks that stop a second label, a wasted label or a patient name from ever leaving the building.
  1. A virtual printer

    A PDF printer added to the lab PC. We measured which ones keep the invoice's text readable: Chrome's "Save as PDF" and PDF24 do, Microsoft Print to PDF does not. LabelBot uses one that does.

  2. A watched folder

    watch_invoices.py sees the new file and waits until it stops growing before touching it, so a half-written PDF is never read.

  3. A parser that reads by position

    parse_doc.py finds the ship-to block by where it sits on the page, not by guessing at words. That is how it tells the practice address from the lab's own address on the same sheet.

  4. A service-area check before any spending

    Before buying anything, LabelBot asks the courier whether it delivers to that ZIP. If the answer is no, it stops. No label is bought for a box that cannot go.

  5. A ledger and a lock

    The intent to make a label is written down before the courier is called, and a file lock stops two prints from racing each other. If the PC restarts in the middle, the ledger shows exactly where it stopped.

  6. The courier API

    make_label.py buys one label per invoice. The label's job field carries the invoice number, never a patient's name.

  7. Both print together

    The label and the invoice come out of the same Xerox, so the paperwork for one box stays in one pile.

Guardrails

The rule underneath: trigger on the case, never on the click.

A print button gets pressed twice. A case only ships once. So LabelBot keys everything to the invoice, and looks before it buys.

What happens at the deskWhat LabelBot does
Someone prints the same invoice againFinds the airbill it already bought and reprints that label. No second shipment.
Two invoices print at the same secondThe lock makes them take turns. Each gets its own label.
The PC restarts halfway throughThe ledger shows the label was intended. It checks before trying again.
The practice is outside the courier's areaStops before buying anything.
We run a testTest addresses start with ZZTEST, so they can never be mistaken for a real practice.
How it runs

Quietly, on one PC, every working day.

A small office PC under a desk with a tiny green status light, a label printer beside it calmly feeding out one label.
  • No app to openLabelBot runs as a Windows scheduled task on the lab PC. Staff never start it or look at it.
  • Shadow run firstFor several days from August 19 it prepared every label it would have made, and we compared them with the ones staff made by hand. It only went live once they matched.
  • The courier account is the lab'sAPI access is registered under the lab, not under MUVES, so the lab owns the account and the shipping history.
  • Reprints are safe by designBecause it looks up the airbill before buying, a jammed printer or a nervous second click costs nothing.
What changed

Hundreds of labels nobody had to type.

628labels printed in its first four weeks
34 to 57staff hours a month freed (our estimate)
130automated tests before go-live
4review rounds on the code

The label count is recorded by LabelBot itself. The hours are our estimate, not a measurement.

Where else it fits

Any business that prints a document and then retypes it somewhere else.

The pattern is "document in, one action out". Here is how the same parts would map elsewhere.

BusinessThe document that already existsThe action it could trigger
A parts wholesalerThe packing slipThe carrier label, bought once per order
A print or sign shopThe finished-job ticketA delivery booking and a "ready" text
A home-services companyThe signed work orderAn invoice in the books, sent once
A courier or moverThe bill of ladingA tracking record and the customer's confirmation

What does your team print, then type again?

Bring the document. On a free call we will tell you whether the second step can go, and what it would take.