Product Features

🧾 Invoicing Is In the App Now: Billing a Finished Work Order

August 20, 2026 · 11 min read · By Jonathan Curtis

You finish the job, you close the work order, and then the money part happens somewhere else — a notepad in the truck, a spreadsheet on Sunday night, a number half-remembered by the time anybody types it. There is now an Invoices section in the app and on the dashboard. It builds the bill out of the hours and parts already logged on the job, it prints with your logo on it, it records payments including partial ones, and it tells you what is still owed. It is free to use in the app. Here is exactly what it does, and exactly what it does not.

Update, 25 September 2026: invoices can now be paid. SEND TO CUSTOMER sends the customer a link to the invoice’s own page, SHOW TO CUSTOMER puts a QR code on your screen, and the customer pays by card or bank through your own Stripe account (Pro, with a 0.5% fee capped at $10 on top of Stripe’s) or by PayPal or Venmo links (free). A few buttons were renamed along the way: ISSUE INVOICE is now CREATE INVOICE, and SHARE PDF is now SEND AS PDF. Getting paid on the spot walks through the new part; this post is otherwise as it was written in August, with the answers below corrected.

The old Maintenance Invoice report is gone. It was a text-only PDF built out of a report picker, it had no number that stayed the same between the screen and the printout, and it had no idea whether anybody had paid. It is deleted from the app and from the dashboard, and what replaced it has a number minted at issue, a bill-to block, payments and an outstanding balance.

This is written for the person who actually presses the buttons. Every control name below is the label on the screen, not a description of it.

Where it lives

On the phone, INVOICES is the fifth item in the bar along the bottom, beside ORDERS, CALENDAR, PM and INBOX. There is also a tile on the home screen under BILLING, PLANS & TEAM, reading Rent, Invoices & Receipts — "Bill a finished job or a month’s rent, scan receipts, get paid & track what is owed".

On the web dashboard there is an Invoices button in the header and a Go to Invoices entry in the command palette.

It carries no PRO chip. Creating and sending an invoice is not gated.

Three ways to start one

Finish a work order and the success alert you already get now has a CREATE INVOICE button on it. If you dismissed that alert, or the job was completed last week, there is a CREATE INVOICE action button on the work order itself. Complete a PM visit and the same button is on that alert. If the job has already been billed once, the button reads CREATE A SECOND instead, so you can bill a job twice on purpose and not by accident.

From scratch: open INVOICES and tap CREATE INVOICE. The empty state names both routes — "Finish a work order or a PM and tap CREATE INVOICE, or start one here with CREATE INVOICE. Rent bills are on the RENT tab."

The dashboard puts all three on the page as buttons: CREATE INVOICE, FROM WORK ORDER and FROM PM.

Both job types run through one converter. Before that, the dashboard totalled an invoice by adding up the cost field on each log, while the phone billed hours times rate plus materials. One customer could receive both numbers for the same visit.

The numbers come off the job, not out of your head

Work orders and PM completions now carry a BILLING DETAILS section. It holds LABOR HOURS, RATE ($ / HOUR), PARTS / MATERIALS COST ($) and PARTS & MATERIALS USED.

It is closed by default. A tech logging a filter change should not have to scroll past four money boxes to reach the notes field. It opens itself when there are already figures stored, so a job that has been priced shows its pricing straight away.

Leave the rate blank and the hours bill at your Settings rate. The field shows that rate as its placeholder rather than writing a copy of it onto the job, so raising the shop rate next month still reaches the jobs nobody priced by hand. If there is no rate in either place, the section tells you, rather than quietly billing zero.

A PM completion used to record no money at all: no hours, no rate, no parts, and later an invoice with nothing on it to bill. The billing section is now on the PM completion sheet on both the phone and the dashboard, so the visit records what it cost while somebody still remembers.

  • ▸ On a work order, the button reads ADD BILLING when there are no figures yet and EDIT BILLING when there are. It is on both the phone and the dashboard, beside the log it edits.
  • ▸ On the phone PM list it is an unlabelled $ icon on the row, next to the invoice button. On the dashboard it opens a modal titled Billing details with a Save billing button.
  • ▸ Editing those figures touches the five billing columns and nothing else. The completion date does not move, the schedule does not recalculate, and the job does not have to be reopened to correct a number.
  • ▸ If the log you are editing is already named on an invoice, the app tells you which one. It does not change the invoice, which may already be in the customer's hands.

Who you are billing

The BILL TO card has four chips: SITE, OWNER, TENANT and TYPE IT IN. Site is the building. Owner is the property owner on the building record. Tenant asks WHICH UNIT, and is greyed out on a location that has no units on it. TYPE IT IN is for the one-off — a management company, a warranty carrier, somebody whose address you are never going to need again. A typed address prints on that invoice and is not written back to the location.

If the building has no address at all, the card says NO ADDRESS ON THIS LOCATION and gives you two options: ADD TO SITE INFO, which writes the address onto the record for every future job, or USE ON THIS INVOICE ONLY, which does not.

The labor rate belongs to the invoice

Each invoice carries its own rate, in a box labeled LABOR RATE FOR THIS INVOICE ($/HR) on the phone and Labor rate for this invoice ($/hr) on the dashboard. It is filled in from DEFAULT LABOR RATE ($ / HOUR) in Settings when the invoice is raised. The rate is copied onto the invoice, not read back from Settings later, so raising the shop rate next month cannot re-price a draft sitting on a desk, and cannot restate an invoice that has already gone out.

Change the rate on an invoice and only the labor lines still at the old rate are re-priced. A line you priced by hand keeps the price you gave it.

A blank rate box and a rate of zero are two different instructions, and the app keeps them apart. Blank means this invoice has no rate of its own and you type each line. Zero means this invoice bills labor at nothing, and the app never quietly swaps in the shop rate. Type something the box cannot read — 125/hr, or a typo — and the app refuses it with a message. It does not read the entry as an empty box and silently wipe the rate you had.

On the dashboard there is no Settings screen, so the same defaults live behind a DEFAULTS button on the Invoices page.

Issuing, and the number

ISSUE INVOICE turns a draft into a document. That is when the number is minted — INV-2026-0004, with your own prefix if you changed it in Settings — and when the totals are frozen onto the row. The number is computed once and stored, so the number on the screen and the number on the PDF are the same number. In the old report the screen and the PDF each made their own timestamp, so the two never matched.

UNISSUE — BACK TO DRAFT is for an invoice you issued but had not sent yet. It keeps its number — once a number is spent, it stays spent.

VOID INVOICE is what you use on one that did go out. A void keeps its number for ever, and the PDF the phone produces for it is headed VOID — NOT PAYABLE. DELETE VOIDED INVOICE then removes the record itself if you want it out of the list, and the number still will not be reused. A gap in the sequence shows that something was voided, which is the point of numbering documents at all.

One catch for teams: nothing on a server hands out the numbers, so two people issuing offline in the same year can both mint INV-2026-0008. The app does not silently renumber one of them, because one of those numbers is already on a customer desk. It puts a DUPLICATE NUMBER flag on every row carrying that number, on the phone and on the dashboard. The flag names the number and how many invoices are on it. It tells you to void the one that has not been sent and raise it again.

Getting paid, and knowing who has not

+ RECORD PAYMENT opens a sheet asking for the amount, the date and the method: CASH, CHECK, CARD, ACH or OTHER. Check, card and ACH ask for a reference — a check number, the last four, an auth code — because those are the three you will be asked about later.

Part payments are the normal case here. Somebody pays half now and half on the thirtieth, and you record both. The balance is worked out from the payments every time it is shown, rather than stored in a column that can drift out of step with them. A payment entered by mistake is voided rather than deleted, so the correction stays visible.

The INVOICES list opens on TOTAL OUTSTANDING, the largest number on the screen, with the overdue figure under it. Below that, the invoices are grouped: OVERDUE, PART PAID, SENT, ISSUED, DRAFT, PAID and VOID, with PAID and VOID collapsed because they are not what you opened the screen to look at. Each row says what it is: outstanding, settled, or overpaid, with the amount.

Getting it to the customer

On the phone, SHARE PDF hands the finished document to the share sheet, so it goes wherever you already send things from — mail, messages, a cloud folder, a printing app. On Android there is also SAVE PDF TO DEVICE, which writes it into a folder you pick. That one is Android only; on an iPhone the app says so and points you at SHARE PDF, rather than doing nothing.

On the dashboard the button reads PRINT / SAVE PDF and opens the browser print dialog, which is where save-as-PDF lives on a desktop.

The document carries the company header from Settings — Company Profile, which is free on every plan. Logo, company name, your name and title, phone and email: whatever you filled in there heads every invoice you make.

MARK SENT is a stamp you apply, not a send. It records that the invoice left, so the list can tell an invoice you have chased from one you have not. Nothing is transmitted by pressing it.

What this is not

This is the section that decides whether the app is right for you, so it is not buried at the bottom of a pricing page. Everything in the left column below is missing from the app, not half-built.

If two or more of those are things you need every day, buy a field service platform instead. Software that gets you 80% of the way through a billing workflow and stops is worse than software that goes the whole way, and a roof is an expensive place to find that out.

What invoicing in Equipment Tracker Pro does not do
Not in the appWhat actually happens
Payment processing (changed 25 September)Customers can now pay an invoice online by card or bank through your own Stripe account (Pro), or by PayPal or Venmo links. A payment recorded by hand is still bookkeeping.
Card capture in the appThe app itself still has no field that takes a card number. The customer pays on Stripe’s own checkout page.
QuickBooks or Xero syncThere is no accounting integration of any kind. What comes out of an invoice is a PDF.
Recurring or automatic billingEvery invoice is raised by a person, from a job, a PM visit or the + button. PM schedules recur; the invoice raised from one does not.
Credit notesA mistake is voided, not credited. VOID INVOICE and VOID PAYMENT are the only two ways to take something back.
Emailing from inside the appSEND TO CUSTOMER now opens the phone’s share sheet with a link and a message already written, and the dashboard opens your mail program. Neither sends mail from our servers.
Dispatch, routing, quotes and estimatesNone of these exist. There are work orders, PM schedules, a calendar, a team and now invoices.

Who on the crew can bill

Billing is done by the owner and by managers. A technician cannot create, edit, issue, void or take payment on an invoice. That refusal is written into the database security rules rather than being a hidden button, so a modified app gains nothing by drawing the screen. The Invoices item is also kept off their Workflow bar, because a tab that leads to a screen of refusals is not a feature. What a technician does is the part the invoice is built out of: the hours, the parts and the materials on the work order or the PM.

The refusal says exactly that rather than a generic denial: "Invoicing is handled by the owner and by managers... Record your hours, the parts you used and any materials on the work order or the PM — that is what the invoice is raised from. Nothing has been changed."

A Viewer cannot see invoices at all, and neither can a Tech. The list is open to the owner and to managers, because the rate you charge a customer is not something a trainee or a technician on the job needs to read.

Free, Pro, and what happens with no signal

Raising an invoice, issuing it, printing it and recording payment on it are free in the app. There is no credit, no counter and no paywall in front of any of it.

Two things around it are Pro, and both were Pro before invoicing existed. Cloud sync is Pro, so on a free account your invoices live on that phone. And the web dashboard is Pro in its entirety — the invoice screens sit behind the same gate as the dashboard, work orders, team and reports.

Invoicing itself works with no signal. The rows are in the on-device database, the totals are arithmetic, and the PDF is rendered on the phone. You can build and issue an invoice in a basement and share it when you surface.

The AI features are the opposite. The changelog has had to correct this exact claim before. Nameplate scanning, condition assessment, invoice scanning and diagnostics all call Google Gemini and need cellular or Wi-Fi. Only core data tracking — records, logs, photos, barcode and QR search, and now invoicing — is genuinely offline.

Try it

Ten minutes, on a job you already finished

Bill a real job you closed last week rather than a made-up one. Nothing here has to be sent to anybody.

1

Put a rate in Settings

Settings, then DEFAULT LABOR RATE ($ / HOUR). While you are there, fill in Company Profile — the logo and company details there head every invoice, on any plan. On the dashboard the same defaults sit behind the DEFAULTS button on the Invoices page.

2

Price the job

Open a completed work order and use ADD BILLING on the log. Hours, a rate if it is not your default, parts and materials cost. The job does not have to be reopened and its completion date does not move.

3

Raise the invoice

Tap CREATE INVOICE on the work order. The lines are already there. Choose SITE, OWNER, TENANT or TYPE IT IN on the BILL TO card, then CREATE INVOICE on the draft to assign the number.

4

Share it, then take a payment

Use SEND TO CUSTOMER and send it to yourself, so you see what the customer sees. Then + RECORD PAYMENT for half of it and go back to the list: the invoice moves to PART PAID and TOTAL OUTSTANDING drops by exactly what you entered.

Frequently Asked Questions

Do I need Pro to invoice?

No. Raising, issuing, printing and recording payment on an invoice is free in the app. Two things around it are Pro, and both were Pro already. Cloud sync is Pro, so on a free account your invoices stay on that phone. The web dashboard is Pro, and its invoice screens sit behind the same gate as the rest of the dashboard.

Can I take a card payment through the app?

Yes, since 25 September 2026. The customer pays the invoice on its own web page, by card or bank through your own Stripe account. That needs Pro, and Equipment Tracker adds a fee of 0.5% per payment, capped at $10, on top of Stripe’s own. PayPal and Venmo links are free on every plan and are recorded by hand.

Does it sync with QuickBooks or Xero?

No. There is no accounting integration of any kind. What comes out of an invoice is a PDF — shared from the phone or printed from the dashboard.

Can I edit the hours and parts after the job is finished?

Yes, and without reopening the job. The control reads ADD BILLING or EDIT BILLING on a work order, and on the phone PM list it is the $ icon on the row. Only the billing figures change; the completion date does not move and the schedule does not recalculate. If that log is already on an invoice, the app tells you which one.

What happens to the invoice number if I void one?

The invoice keeps its number, for ever. The printed copy reads VOID — NOT PAYABLE, and you can delete the record afterwards with DELETE VOIDED INVOICE if you want it out of the list. The number is still never reused. A gap in the sequence is evidence that something was voided, which is the point of numbering documents at all.

If I change the labor rate on an invoice, does it re-price everything?

Only the labor lines still sitting at the old rate. A line you priced by hand keeps your price, and a line at $0.00 is never swept up. Parts, materials and trip charges are never touched by an hourly rate.

Can my technicians raise invoices?

No, and it is enforced by the security rules rather than by hiding a button. Billing is done by the owner and by managers. Technicians record the hours, parts and materials on the work order or the PM, which is what the invoice is built from. A Viewer cannot see invoices either — a Viewer seat is a trainee technician, so the invoice screens are hidden from them as well.

Does invoicing work with no signal?

Yes. The invoices are in the on-device database and the PDF is rendered on the phone, so you can build, issue and share one with no bars. The AI features are the exception and always have been: nameplate scanning, condition assessment, invoice scanning and diagnostics call Google Gemini and need a connection.

What happened to the Maintenance Invoice report?

It was deleted from both the app and the dashboard. It was a text-only PDF with no stable number and no idea whether anybody had paid. Everything it was used for is now in the Invoices section, which has a number minted at issue, a bill-to block, payments and an outstanding balance.

👷

Jonathan Curtis

HVAC Technician & Founder · Equipment Tracker Pro

Jonathan Curtis is an HVAC technician and the founder of Equipment Tracker Pro. He built the app to solve real problems he encountered in the field, including the daily frustration of faded nameplates and administrative double-entry.

Try Equipment Tracker Pro Free

Core equipment tracking is free forever. Pro features include AI nameplate scanning, condition assessment, invoice scanning, cloud sync, and more.

💳 Secure billing via App Store, Google Play & Stripe 🔒 Encrypted hosting & database by Firebase

More in Product Features