Your ads count inspections. CompanyCam knows which jobs sold.
Google and Meta stop at the form fill, but the proof that a roof, mold job or fire-damage rebuild sold lives in CompanyCam: the Sold label your crew adds to the project, the approved proposal, the paid invoice. None of it reaches your ad accounts, so bidding chases whoever fills out a form. We tie each project back to the click or call that started it and send those money events to Google Ads and Meta from a server you own.
Free30 minutesNo obligation
CompanyCam · what breaks
What goes wrong when the job ends up in CompanyCam
- 01
Google thinks every inspection request is a win
Campaigns optimize toward the form fill and never see the Sold label your crew adds in CompanyCam, so tire kickers and out-of-area leads teach bidding the same lesson as a signed reroof. You pay for more of the wrong people.
- 02
The project has an address, but no click
CompanyCam's documented create-project fields are name, address, coordinates, geofence and a primary contact. There's no slot for a GCLID, so when a crew lead creates the project from the truck, the ad that paid for it is gone.
- 03
Approved proposals and paid invoices stay inside CompanyCam
Proposal and invoice statuses aren't among CompanyCam's documented webhook events, and its public API lists no proposal or invoice endpoints, so job value never reaches the campaign that earned it. You can't tell which ads pay for themselves.
- 04
One homeowner, two projects
CompanyCam's HighLevel guide warns that repeated Create Project runs make duplicates. Count them naively and one job becomes two sales.
CompanyCam · the fix
What changes after the fix — CompanyCam
Bidding learns from sold jobs
Google Ads and Meta hear when a project gets your Sold label, so budget drifts toward the searches and audiences that sign contracts.
Every project traced to its source
Matched using the click ID saved upstream plus the homeowner's email and phone on the project's primary contact.
Real job value on the conversion
The approved proposal or paid invoice amount rides on the conversion, so a full tear-off and a gutter repair stop counting as the same result.
CompanyCam · architecture
What CompanyCam actually lets us hook into
CompanyCam documents no direct connection to Google Ads, GA4, Google Tag Manager or the Meta Pixel. What it does document is enough to build the loop.
- 1
Signed webhooks
Events include project.created, project.label_added, project.merged, project.archived and project.deleted, signed with HMAC-SHA1 in the X-CompanyCam-Signature header. Anything but a 200 triggers retries, up to 10, and more than 25 errors disables the webhook.
- 2
Core API
Reads projects, labels and the primary contact's email and phone, and can write to the project notepad, where the originating click ID can live. Admins or Managers create tokens, on select plans.
- 3
Zapier triggers and actions
New Project and Project Labeled triggers cover simpler setups, and the Update Project Notepad action can stamp the originating click ID onto a project.
- 4
CRM and estimating integrations
CompanyCam lists HighLevel, JobNimbus, AccuLynx, Roofr, ServiceTitan and Jobber integrations, and one of them often creates the project. HighLevel's workflow actions push projects one way, into CompanyCam, so the click ID stays in HighLevel and gets matched there.
- 5
Proposals and Stripe payments
Invoices are paid through a Stripe Express account, and invoices and payments sync to QuickBooks Online. Since proposal and invoice statuses aren't webhook events and the public API has no endpoints for them, we confirm whether to read them from the QuickBooks Online sync, Stripe or CompanyCam's document events.
CompanyCam · diagnose
Where CompanyCam tracking breaks, in the order we check
Most setups fail at the handoff from lead to project, not inside CompanyCam.
- 01
Find out how projects get created
Manual projects made on site lose the ad link most often.
- 02
Check that a click ID exists upstream
Submit a test lead from an ad-tagged URL and confirm the GCLID was saved.
- 03
Check the primary contact is filled in
No email or phone means no match back to the lead.
- 04
Audit label use
If half the crew forgets the Sold label, half your sales never report.
- 05
Follow the money
Confirm where proposal totals and paid invoices can be read.
- 06
Hunt duplicates
Repeat projects at one address double count a job.
CompanyCam · prove
The QA evidence — CompanyCam
Tested on a real lead that becomes a real project, not a sample payload.
Source of truth
CompanyCam project records: projects by creation date, labels applied, proposal statuses and invoice statuses, with each project's primary contact
- A test lead from an ad-tagged URL, click ID confirmed upstream.
- The matching project created and its webhook received with a valid signature.
- One Sold label producing exactly one conversion in Google Ads and Meta Events Manager.
- Proposal or invoice value confirmed, and a refund reversing it.
- A merged or duplicate project confirmed not to count twice.
- Sold and paid projects reconciled one by one against each platform over a closed window.
- Repeated 30 days later and after any CRM workflow change.
CompanyCam · free audit
What we check in the free audit
- Find out how projects get created
- Check that a click ID exists upstream
- Check the primary contact is filled in
- Audit label use
- Follow the money
- Hunt duplicates
Checked against
CompanyCam project records: projects by creation date, labels applied, proposal statuses and invoice statuses, with each project's primary contact
Free30 minutesNo obligation
CompanyCam · when not to buy
When you don't need this on CompanyCam
Plenty of contractors use CompanyCam only for photos, and that's fine.
- If JobNimbus or AccuLynx already sends sold jobs to Google Ads, we'd wire the CRM and leave CompanyCam as your photo log.
- If most of your work comes from door knocking, insurance adjusters or referrals rather than paid ads, there's little for this to attribute.
- If your team never labels projects, sends proposals or invoices in CompanyCam, the sale isn't recorded there to begin with.
- If you close a handful of jobs a month, a spreadsheet upload may be enough, and we'll say so.
CompanyCam · what we deliver
The event map on CompanyCam
Lead captured upstream
Form or tracked call, with GCLID, fbclid and UTMs stored before CompanyCam sees the homeowner.
Project created
The project.created webhook: an inspection on the books, sent as a lead-stage signal.
Qualified or Sold label
The project.label_added webhook, filtered to your signed-job label. The primary conversion for bidding.
Proposal approved
Sent with the proposal total once its status is Approved. Drafts, Sent, Declined and Voided proposals never fire.
Invoice paid
Fired on Paid, not Payment Processing, so failed ACH payments don't count. Refunds reverse it.
Excluded on purpose
Merged, archived and deleted projects, warranty callbacks and re-inspections.
Written guarantee
95%+ tracking accuracy
Measured against CompanyCam project records: projects by creation date, labels applied, proposal statuses and invoice statuses, with each project's primary contact. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
CompanyCam questions, answered
Not directly. CompanyCam documents no Google Ads, GA4, GTM or Meta connection, so project events leave through its webhooks, API or Zapier and reach the ad platforms from a server.
There's no documented project field for it. We keep the click ID where the lead lands, then match it to the project by email, phone and address, or write it to the notepad through the API.
Usually a Sold label or approved proposal, since a new project often just means an inspection got booked. Paid invoices add the real value.
Usually, once we confirm where your account exposes them. They aren't webhook events and CompanyCam's public API lists no proposal or invoice endpoints, so we check the QuickBooks Online sync and your Stripe Express account first.
CompanyCam doesn't document analytics for the embedded Portfolio gallery or map, so we test whether visitors who browse it still carry their ad source into your quote form.
Mostly no. The one habit that matters is applying the Sold label every time, because that's what tells Google and Meta a job closed.
More on CompanyCam
- Enhanced ConversionsEnhanced Conversions enrich the conversions that already fire. First we make sur…
- Meta CAPIA one-click CAPI integration sends thin events. That's why your Event Match Qual…
- Cross-Domain TrackingYour checkout provider is the best performing traffic source in your GA4 account…
RELATED GUIDES
Booking tools beside CompanyCam, and what their bookings feed
- Portal.ioYour client signs the Portal.io proposal. Google and Meta never find out.
- JoistYour Joist estimates get signed. Google Ads never finds out.
- JobTreadJobTread conversion tracking: the proposal gets signed in the portal, and your ads never hear about it
- ProjulProjul conversion tracking for remodelers who can't tell which ads sign jobs
- BuildertrendBuildertrend shows your sold jobs. Your ads still can't see them.
- Estimate RocketEstimate Rocket conversion tracking: your ads see the form fill, never the signed proposal
- XactimateYour ads learn from every wet-carpet call. The paid claims sit in Xactimate.
- BuildingConnectedYou win the bid in BuildingConnected. Google Ads never hears about it.
Free · 30 min
Find out which ads actually sell jobs
Free30 minutesNo obligation
