# 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.

- Workflow type: app
- Services: CompanyCam, QuickBooks Online
- Categories: Finance, Operations
- Published: 2026-08-16

## What it does

- 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 you'll need

- 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

## Prompt

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.

## How to customize

- 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

## FAQ

### How does the app know a job is actually finished?

CompanyCam has no built in finished field, so the app reads the labels your crews already put on projects. Anything labeled complete or ready to bill lands in the queue, and anything already labeled invoiced is filtered out. You can point it at whatever label names your team uses.

### Can it bill the same job twice by accident?

No. As soon as an invoice is created the app adds an invoiced label to the CompanyCam project and drops a comment with the invoice number, so the job leaves the queue for everyone. It also checks QuickBooks for an existing invoice for that customer this month and warns you before you submit.

### What happens when the homeowner is not in QuickBooks yet?

You can create the customer right inside the invoice builder without leaving the app. It searches your existing customers first so you do not end up with duplicate records for the same person.

### Does it email the invoice to the customer automatically?

Only if you want it to. The builder has a send to customer toggle, so you can either email it on submit or leave it sitting in QuickBooks for your bookkeeper to review and send.

### Does this change anything in CompanyCam?

It adds a label and a comment to the project once you have billed it. Your photos, existing labels, and project details are left exactly as they are.

### Does it work if we only bill some jobs from photos?

Yes. The queue only pulls jobs your crews have labeled, so anything you bill another way simply never shows up. Nothing is sent to a customer without you building the invoice first.

Use this prompt in General Input: https://www.generalinput.com/prompts/turn-finished-companycam-jobsites-into-quickbooks-invoices