folder_open Analytics & Attribution

Lead tracking for Australian carpet and upholstery firms

Martin Marinov Martin Marinov
16 min read
Topics booked-job-trackingcall-trackingenhanced-conversionsperformance-maxutm-tracking

Saturday 07.41 in Parramatta. A pet-urine lounge job hits Google Ads, the click lands on a “sofa steam” page, and the owner of a two-van shop still has no idea whether that enquiry became a booked truck or a voicemail that died at lunch. That is the real job of lead tracking for carpet and upholstery companies in Australia: not prettier dashboards, but a clean path from click to calendar in AUD, with flood extracts, upholstery steam, and office-carpet quotes sitting in separate buckets.

Google Ads typically outperforms Meta on direct-response ROAS - industry composites often show 3x-5x for Search vs 2x-3x for Meta - but in carpet and upholstery the gap widens because extract jobs close on the phone, not a Meta form. Those numbers mean nothing if your conversion pixel fires on “contact us” while the dispatcher never confirmed a start time. Australian carpet marketers already know 20-30% of search spend routinely dies on irrelevant queries and misaligned landers. Tracking is how you stop paying for that twice.

When form volume and booked vans tell two different stories in AUD

You can be “winning” in Google Ads at a $42 cost per lead while the workshop is empty. Flood-extract searches convert on the phone in minutes. Sofa steam and leather restoration linger for days. If every thank-you page fires the same “Lead” event, smart bidding treats a $180 hallway steam as equal to a $1,400 water-damage callout. Automated bidding then inflates budget toward the cheap form, not the profitable van.

Privacy and ad-blockers already knock out 20%+ of conversion data. Mobile is 63%+ of paid search clicks, yet conversion rates lag desktop by 30-40%. If your only signal is a form submit on a slow mobile page, you train Google on a lie. Plenty of shops still send every ad to the homepage. If someone on your team says that is “good enough,” you are funding tyre-kickers who wanted DIY stain tips, not a technician.

Last-click also double-counts. A homeowner in Geelong sees a Meta reel, Googles the brand, then calls. Meta claims a lead. Google claims a call. The job book shows one Saturday slot. Google Ads’ last-click model has always obscured cross-channel paths; as PMax consolidates inventory, the blended last-click signal has become even less reliable as a standalone truth. You do not need a full marketing mix model on day one. You do need one source of truth for “booked job,” in Australian dollars, with job type attached.

If paid search is leaking into the wrong job types, a dedicated Google Ads program only pays off once those job-type events exist. Otherwise you are buying cheaper clicks that never fill the diary.

What a booked-job event should capture for this trade

Stop treating “lead” as the north star. For carpet and upholstery firms, the event that should feed bidding is closer to: suburb, job type, quoted range, and whether a van is on the calendar. Flood extract. Pet urine. Sofa steam. Commercial after-hours. Each has different urgency, ticket size, and response SLA. A 15-minute callback on a flood extract is the difference between a $1,200 job and a competitor who answered first.

Calls still close a huge share of this work. Dynamic numbers on the landing page, unique numbers on Google Business Profile, and a rule that a 60-second conversation is not a conversion unless the dispatcher logs a job ID. Instant Forms on Meta look tidy and wreck quality if they never land in the same CRM row as the Google call. First-party data plus Enhanced Conversions (unified toggle) and a server-side Conversions API path is how you protect against that 20%+ signal loss. “Signals over keywords” is not a slogan here. It is whether Google can tell a booked leather lounge from a quote-shopper.

UTMs must survive the handoff. A Facebook reel that dumps into a generic “contact” page with no campaign, ad set, or creative ID is how you get “unreliable attribution” in the weekly meeting. Performance Max may drive the bulk of search now, but PMax without a booked-job conversion is a black box that likes cheap forms. Aim for 4x-8x PMax ROAS only after the conversion is a confirmed booking, not a thank-you page.

Audit scorecard

  1. Separate job-type eventsCreate distinct conversions for flood extract, p

    Separate job-type eventsCreate distinct conversions for flood extract, pet urine / odour, sofa and mattress steam, leather, and commercial carpet. Do not let one “submit” event train all campaigns.

  2. Call quality, not call startsFire a conversion only after duration and a

    Call quality, not call startsFire a conversion only after duration and a job ID in the diary. Missed calls and 12-second hang-ups stay as diagnostics, not bidding fuel.

  3. Value in AUDPass estimated job value (even a conservative band) so Targe

    Value in AUDPass estimated job value (even a conservative band) so Target ROAS has something real. A $90 cushion clean is not a $1,400 extract.

  4. Page speed as a tracking issueAs of the HTTP Archive's October 2024 repo

    Page speed as a tracking issueAs of the HTTP Archive's October 2024 report, only ~56% of origins globally pass all three Core Web Vitals. A laggy quote form on mobile silently drops the conversion Google never sees.

  5. One customer IDPhone, form, and Meta Instant Form must share a CRM key s

    One customer IDPhone, form, and Meta Instant Form must share a CRM key so last-click cannot count the same lounge twice.

  6. Landing matchFlood ads go to flood pages with after-hours proof

    Landing matchFlood ads go to flood pages with after-hours proof. Steam ads go to sofa proof. Homepage traffic is how 20-30% of SEM waste hides.

Not sure where your funnel leaks?
Get a free marketing audit - we review your search, ads, and landing pages and send back what to fix first.
Get a free audit

A Brisbane shop that counted quotes until the diary went quiet

A Head of Marketing at a four-van Brisbane cleaner watched Google Ads CPL fall from $58 to $31 over six weeks. The owner was thrilled until Saturday extract work dried up. The mechanism was simple: they had pointed Performance Max and Search at one “Get a quote” button. Smart bidding discovered cheap sofa-steam forms from inner-west apartments. Flood extract, which paid the overtime, almost vanished from the auction because it converted slower and cost more per click.

They split events, added call tracking with a 90-second plus job-ID rule, and sent extract ads to a page with insurance wording and a same-day CTA. CPL rose to $47. Booked extract jobs recovered 11 days later. One number moved: extract share of diary from 18% back to 41%. That is the kind of “quality leads (not just more leads)” conversation CFOs actually want.

They also found the thank-you page fired twice because of an embedded booking iframe. Google thought every quote was two conversions. Automated bidding looked genius until the bank account disagreed. Constant structure tweaks would have reset learning. They left campaign structure alone and only fixed the signal. That is the trade-off: do not rebuild the account every Monday. Rebuild the event.

Lead tracking for Australian carpet and upholstery companies

A tracking rebuild you can run from the workshop office

The dispatcher who pencils jobs into ServiceM8 or Fergus is already doing the hardest part of attribution - matching a name to a truck slot. GTM and GA4 just need to speak the same language as that diary. Keep Enhanced Conversions on. Push hashed email and phone when the form captures them. If Meta is in the mix, Conversions API plus Event Match Quality matters more than stacking lookalikes from 2020. Creative is your targeting on Meta; tracking is what tells that creative which job types to chase.

Action checklist

  1. List every path into the diary: Google Search, PMax, Google Business Profile calls, Meta Instant Forms, organic “carpet cleaning near me,” and referral URLs. If a path has no UTM or unique number, it is invisible.
  2. Map job types to landing pages. Flood extract, pet urine, sofa steam, mattress, leather, commercial after-hours. One primary CTA per page: call or book, not both fighting.
  3. In GTM, fire a unique event name per job type on thank-you and on qualified calls. Import only booked-job events as primary conversions in Google Ads. Demote “form submit” to an observation event.
  4. Pass value in AUD. Use a conservative default if the quote is not yet written: extract $900, steam $220, commercial survey $0 until accepted. Wrong value is still better than zero.
  5. Turn on Enhanced Conversions and, if you use Meta, the Conversions API. Expect residual loss from blockers; do not chase 100% match.
  6. Check the quote form on a mid-range Android on Telstra 4G. If INP feels sticky, you are losing mobile conversions Google never records. Slow forms create a tracking blind spot - if the page doesn't render before the user taps away, Google never records the intent.
  7. Reconcile weekly: ads conversions vs job IDs in the diary for the same 7 days. A 15% gap is normal. A 2x gap means double-firing or counting quotes as jobs.
  8. Watch session recordings on the extract and steam pages. If people tap the click-to-call then bounce, the number may be firing without a human answering. HeyLead Insights is built for that post-click leak, heatmaps and form abandon included.

Do not promise a specific CPL before you have seen the account, the landers, and unit economics. Realistic signal quality takes weeks, not a Friday afternoon toggle. Automated bidding is not the villain. Garbage events are.

Prefer to just ask? Message Martin directly on WhatsApp: Chat with us on WhatsApp

What marketing leaders are seeing

In accounts we’ve audited, the pattern repeats: CPL falls while the diary empties, because sofa-steam forms are cheaper to buy than extract calls. The diary is the only report that told the truth.

PMax can look like 4x until job IDs are matched. Half the “conversions” often turn out to be double-fires from an iframe. Bidding gets addicted to quotes, not vans.

Lead tracking for Australian carpet and upholstery companies

FAQs

Mark these up with FAQ schema (use the schema validator in the toolkit below) - carpet cleaning FAQs with direct answers regularly earn rich results on Australian mobile SERPs.

Should Australian carpet firms still use last-click in Google Ads?

Use last-click as a diagnostic, not the CEO answer. Import booked-job conversions as primary, keep form submits as secondary, and reconcile to the diary. Last-click still helps you catch a broken number. It cannot explain a Meta-to-Search journey.

Do we need unique phone numbers on every campaign?

You need enough numbers to separate Google Ads, organic GBP, and Meta. You do not need a number per keyword. Over-splitting creates missed-call chaos. Pair numbers with UTMs and a CRM job ID.

Will Enhanced Conversions fix ad-blockers?

They recover a chunk of the 20%+ loss, not all of it. Combine hashed first-party fields, server-side where you can, and honest offline uploads of booked jobs. Smart bidding needs fewer, cleaner events more than it needs volume.

Is Performance Max usable without perfect tracking?

It will spend. It will not spend well. PMax ROAS in the 4x-8x band shows up in accounts with dedicated landers and a booked-job conversion. Without that, it hunts cheap forms.

How often should we change conversion actions?

Rarely. Fix the definition once, then let learning run. Daily tweaks reset the algorithm and make Meta and Google look more volatile than they are.

Putting it to work

Execution sprint

This week

  1. Pull 30-90 days of performance for Australian carpet and upholstery (Search Console, ads, CRM, or call logs - whatever you have).
  2. Flag the top leak: wrong intent, weak page, slow response, or dirty conversion tracking.
  3. Ship one fix on the highest-traffic money path (page, campaign split, or response rule).
  4. Run the free tools below on that same URL or account and log the findings.

Next 30 days

  1. Expand the fix to the next one or two money paths only after the first one shows cleaner bookings.
  2. Align creative, keywords, or content with the same offer the page now states.
  3. Review booked outcomes weekly; cut anything that still only produces unqualified volume.

Pull the last 60 days of enquiries and tag each row with source, job type, and whether a van actually ran. That single spreadsheet will show you whether Google is buying extracts or sofa steam.

This week

  • Export ads conversions and diary job IDs for the same fortnight and mark the gap.

  • Split or rename events so flood extract is not lumped with steam.

  • Add UTMs to every live ad using the UTM link builder.

  • Run the quote pages through the Core Web Vitals checker.

  • Confirm call conversions require duration plus a job ID.

Next 30 days

  • Import only booked-job events as primary conversions and give PMax time to relearn.

  • Build one extract and one steam landing page that match the ads.

  • Upload offline conversions weekly in AUD.

  • Watch form abandon on those two pages until the leak is obvious.

If the gap between “leads” and booked vans is what is breaking bidding, HeyLead can own the conversion plumbing, job-type events, and diary reconciliation so Search and Meta stop paying for quotes that never become trucks. Chat with us on WhatsApp

Work with HeyLead
Free marketing audit, or reach Martin directly:
Get a free audit Connect on WhatsApp · [email protected]