Turn finished CompanyCam jobsites into QuickBooks invoices
A billing desk where your office manager reviews the jobsite photos and crew notes, then raises the QuickBooks invoice on the same screen.
Build me a billing desk app for our office manager. Our crews document every jobsite in CompanyCam, but CompanyCam does no billing, so finished work sits there until someone manually rebuilds it as an invoice in QuickBooks Online. I want one screen that turns finished jobsites into invoices and then writes that fact back to the field.
The main surface is a billing queue. Load projects with List Projects in CompanyCam (active projects only, and skip archived ones, since archived is a separate flag from the active or deleted status). For each project call List Project Labels and keep only the jobs whose labels say the work is done, for example a label like complete or ready to bill. Exclude any project that already carries an Invoiced label. CompanyCam has no built in job complete field, so labels are the only signal for completion, and that label round trip is what keeps the queue idempotent. Let me configure which label names mean ready to bill and which one means already invoiced, with sensible defaults.
Each row in the queue shows the job address from the project, the crew or users assigned to it, the photo count from List Project Photos, and the last few notes from List Project Comments so the manager gets context without opening the job. Sort the queue so the oldest unbilled work surfaces first, and float any job that has been sitting complete and unbilled for more than 14 days to the top with a stale badge. Make the 14 day threshold a setting.
Opening a row splits the screen. On the left is the billing evidence: the jobsite photos from List Project Photos in a scrollable grid (use the web or thumbnail rendition from the photo uris array for the grid and the original when someone clicks to enlarge), plus the full comment thread from List Project Comments. On the right is the invoice builder.
In the builder the manager first picks the QuickBooks Online customer. QuickBooks has no plain list customers operation, so search with Query Entities against the Customer entity using its SQL like syntax, matching on display name (remember LIKE only supports a trailing percent wildcard, and only AND conjunctions are allowed). Confirm the chosen customer with Read Customer, which is ID only, and show their billing address and terms so the manager can sanity check it against the job address. When the homeowner is new, let them create the record inline with Create Customer without leaving the screen. Prefill the search box from the project address or name so the common case is one click.
Then they add line items with description, quantity, rate and amount, set a due date, add an optional message, and submit with Create Invoice. Create Invoice supports line items, a due date and optional auto email, so give me a send to customer toggle in the builder that is off by default, so we can either email the invoice on submit or leave it in QuickBooks for the bookkeeper to review. Show a running total as line items are added.
Before submit, use Query Entities against the Invoice entity to check whether that customer already has an invoice this month, and if so show an inline warning with the existing invoice number, date and amount so the manager can decide whether this is a genuine second job or a duplicate. Warn, do not block.
On a successful invoice, write the state back to the field in two steps: call Add Labels to Project to put the Invoiced label on the CompanyCam project, and call Add Project Comment with the invoice number, the amount and the date, so the crew sees it in the app and nobody bills the same job twice. Then drop the row out of the queue and confirm what happened. If the invoice is created but a write back call fails, say so clearly and offer a retry for just the write back, because the invoice already exists and must not be created a second time.
Treat this as a review surface rather than blind automation. Nothing is billed without the manager confirming the scope against the photos, and no invoice leaves the office unless the send toggle is on. Handle empty states cleanly, for example a project with no photos or no comments, and show a friendly message when the queue is empty because everything is billed.
What does this prompt do?
- Shows a queue of jobsites your crews have marked complete or ready to bill, with the job address, the crew, how many photos are on file, and the latest notes from the field
- Opens each job as a split screen: the photos and comments on the left as proof of the work, and an invoice builder on the right
- Lets the manager pick an existing customer or add a new homeowner, build line items, set a due date, and raise the invoice without retyping anything
- Marks the job as invoiced back in CompanyCam and posts the invoice number as a comment, so the same job never gets billed twice
- Floats any job sitting unbilled for more than 14 days to the top of the queue with a stale badge, and warns you if that customer already has an invoice this month
What do I need to use this?
- A CompanyCam account with admin access (photo and project access needs a Pro, Premium, or Elite plan)
- A QuickBooks Online company you can sign in to
- A habit of labeling jobs in CompanyCam when the work is finished, for example a complete or ready to bill label
- Your usual service line items and payment terms handy for the first invoice
How can I customize it?
- Change which labels count as ready to bill and what the app writes back after invoicing, if your crews use different wording
- Move the stale threshold off 14 days to match how fast you normally turn jobs around
- Turn the send to customer toggle on by default, or keep every invoice as a draft your bookkeeper reviews first
- Preset your standard line items and payment terms so most jobs are a two click invoice
FAQs
How does the app know a job is actually finished?
Can it bill the same job twice by accident?
What happens when the homeowner is not in QuickBooks yet?
Does it email the invoice to the customer automatically?
Does this change anything in CompanyCam?
Does it work if we only bill some jobs from photos?
Related templates
Compare weddings against portraits against corporate work, with real costs from your books, so you know what to raise, hold, or retire.
Review every client's billable support hours for the month, trim what should not go out, then raise the invoices in QuickBooks without leaving the screen.
Open one board each morning to see every active jobsite, how long since the last photo, who posted it, and nudge the crew that went quiet.
Search every jobsite photo in one place, pair your before and after shots, then send the homeowner a branded recap without leaving the app.
Open one screen every Friday to review the week's tracked hours client by client, fix what is wrong, then raise draft invoices in QuickBooks.
Open one screen at month end to check every client's unbilled hours and expenses, fix what is wrong, then bill approved clients in one click.
Stop rebuilding invoices from jobsite photos.
Your crews already documented the work. Give the office one screen that turns that proof into a QuickBooks invoice and closes the loop back to the field.