Local-Service Lead Attribution: Calls, Forms, Google Business Profile, and CRM Revenue
A practical architecture for preserving acquisition context across calls, forms, GBP, ads, qualification rules, and CRM outcomes.
Local SEO reporting often stops at impressions, profile interactions, sessions, or form counts. Those are useful operational signals, but a service business usually needs a harder answer: which calls, forms, and bookings became qualified opportunities, and which parts of that journey are still unknown?
The answer is not one dashboard. It is a chain of records that preserves acquisition context as a buyer moves from a search result or Business Profile to a landing page, an inquiry, a CRM record, and an outcome. Each system sees a different part of the chain.
A defensible setup does not pretend that every person can be followed perfectly. It uses stable first-party fields where appropriate, respects consent and platform rules, deduplicates overlapping events, and labels modeled or unmatched records instead of forcing certainty.
Define the lead chain before choosing tools
Start with the business record, not the marketing chart. A local service lead normally passes through five states: acquisition context, landing experience, inquiry, qualification, and commercial outcome. A different system may own each state, so the join fields and handoff rules matter more than the logo on the dashboard.
| Stage | Useful fields | Primary question |
|---|---|---|
| Acquisition | source, medium, campaign, referrer, click identifier when permitted | What context brought the visit? |
| Landing | landing URL, page group, service, location, first timestamp | What promise and page did the buyer encounter? |
| Inquiry | lead ID, inquiry type, form/call/booking timestamp, consent state | Was a contact action accepted and recorded? |
| Qualification | service requested, geography, urgency, fit status, reason code, owner | Was this a real opportunity for the business? |
| Outcome | appointment, estimate, proposal, won/lost, value band, close date | What happened after the inquiry? |
The lead ID is the durable spine. It should be created once when an inquiry is accepted and carried into the CRM, call record, booking record, or server-side event where the systems allow it. Email address and phone number are customer data, not ideal public analytics identifiers; keep them in systems designed and governed for that purpose.
Preserve acquisition context without overwriting it
Google Analytics recognizes manual campaign parameters such as utm_source, utm_medium, and utm_campaign. The values are case sensitive, so “GBP,” “gbp,” and “Google_Business_Profile” can become different rows. Pick one naming standard, document it, and test the complete destination URL after every redirect.
Preserve first-touch, inquiry-touch, and latest-touch values as separate fields. The first known visit, the session that produced the inquiry, and the most recent known visit may be different. Keep the collected raw values alongside any normalized channel grouping so reporting rules can change without erasing the original evidence.
Use campaign tags on links you control, such as the website link on a Business Profile, an email, a partner profile, or a QR code. Do not add UTMs to ordinary internal links; that can create a new campaign context inside the same visit and distort acquisition reporting. Preserve auto-tagging parameters for paid traffic rather than replacing them casually with manual values.
Measure accepted inquiries, not just clicks
A phone-link click, form start, form submit, booking-page visit, and accepted lead are different events. Name them separately. For forms, emit the lead event after the application confirms a successful server response—not merely when the visitor presses the submit button. That prevents validation errors and network failures from inflating the lead count.
GA4 recommends generate_lead for a generated lead. The implementation can include non-personal context such as service, form ID, page group, or a coarse value model. Do not send names, emails, phone numbers, free-text messages, or other personally identifiable information to analytics fields.
| Event | Fire condition | Useful non-personal parameters |
|---|---|---|
| phone_click | Visitor activates a tel link. | page_group, service, CTA location |
| form_start | Visitor meaningfully begins the form. | form_id, page_group, service |
| generate_lead | Server accepts a legitimate inquiry and returns success. | opaque event ID, form_id, service, page_group |
| booking_complete | Booking provider confirms the appointment. | booking_type, service, provider, event ID |
| working_lead | A representative begins active work on the inquiry. | event ID, service, owner group |
| qualify_lead / disqualify_lead | CRM applies a controlled qualification state and reason. | event ID, service, reason code, value band |
| close_convert_lead / close_unconvert_lead | CRM records the terminal commercial outcome. | event ID, service, value basis, sales-cycle bucket |
Separate Business Profile actions, phone clicks, and completed calls
Google Business Profile Performance reports interactions such as call-button clicks, website clicks, directions, messages, and eligible bookings. A call metric is a click on the profile’s call button; it is not proof that the call connected, was answered, lasted long enough to be useful, or became a qualified job.
Website analytics can record a tel: activation, but the browser normally cannot see what happened after the dialer opened. A call platform can add ring, answer, duration, recording, or qualification evidence, subject to local law, consent, and configuration. The CRM should remain the place where the business records fit and outcome.
If dynamic number insertion is used, keep the business’s canonical number consistent where local listings and customers expect it, define which sessions receive a tracking number, and test number swapping, forwarding, missed calls, voicemail, mobile rendering, and source preservation. Do not let an attribution mechanism break the actual contact path.
Make qualification a controlled CRM field
Keep the inquiry object separate from the contact. A contact is a person or organization; an inquiry is one attempt to engage. The same contact can call, submit a form, book later, return for another service, or create a legitimate repeat inquiry. Deduplicate people without deleting the history of distinct inquiries.
“Lead quality” should not live only in a salesperson’s memory or a free-text note. Create a small controlled vocabulary: qualified, unqualified, duplicate, spam, existing customer, out of area, wrong service, no response, or another business-specific state. Pair the state with an owner and timestamp.
Preserve the raw acquisition values separately from normalized channel groups. A normalization rule can classify google / organic, a Business Profile campaign, and a ChatGPT referral into reporting groups without destroying the original values. When the rule changes, the history remains auditable.
Minimum CRM handoff fields
- One stable lead or inquiry ID shared across the available records.
- Original landing URL and first known source, medium, and campaign values.
- Inquiry channel: call, form, booking, chat, message, or walk-in.
- Service, location or service area, urgency, and assigned owner.
- Qualification state plus a controlled reason code.
- Commercial stage and outcome date, with a value band where appropriate.
- Consent or contact-permission state required by the business and jurisdiction.
- An explicit unmatched or unknown state instead of a fabricated source.
Reconcile systems and keep the mismatches
Platform totals will disagree. Search Console measures Google Search clicks and impressions. Business Profile counts eligible profile interactions. GA4 processes sessions and events under its collection, consent, and attribution rules. A call platform counts telephony events. The CRM counts the records the team created and updated. Different time zones, identity rules, spam filters, windows, and late processing all matter.
Reconciliation is therefore a control process, not a demand that every total match. Compare daily or weekly counts by source and inquiry channel, inspect samples of unmatched records, and maintain reason categories such as blocked analytics, missing UTM, duplicate form, forwarded call, offline entry, cross-device journey, or owner not updated.
| System | Strongest evidence | What it cannot prove alone |
|---|---|---|
| Search Console | Google Search visibility and clicks for the verified property. | On-site behavior, completed calls, qualification, or revenue. |
| Business Profile | Eligible profile views and interactions on Search and Maps. | Whether a call connected or an inquiry was commercially qualified. |
| Web analytics | Tagged sessions, page behavior, and configured events. | A complete person-level journey across consent gaps, devices, calls, and offline activity. |
| Call or booking platform | Operational details for the contact handled by that platform. | All prior marketing touchpoints or final sales outcome. |
| CRM | Qualification, ownership, pipeline, and recorded outcome. | Perfect acquisition context when intake fields or team updates are incomplete. |
Implement one path, then prove the controls
Start smaller than the final dashboard. One service, one landing-page group, one call or form path, one CRM pipeline, and one weekly reconciliation view is enough to expose most failures. Expand only after the business can reproduce the event and trace it to an accepted lead record.
Launch and QA checklist
- Document the source taxonomy and lowercase UTM naming rules.
- Test redirect behavior so campaign and click identifiers reach the final page.
- Confirm analytics consent and storage behavior for the intended jurisdictions.
- Trigger test calls, forms, and bookings from desktop and mobile.
- Test cross-domain schedulers and prevent the booking provider from becoming a self-referral.
- Verify that lead events fire once and only after a confirmed success state.
- Confirm that analytics parameters contain no names, emails, phone numbers, or free-text messages.
- Trace the test inquiry into the CRM and update qualification and outcome fields.
- Compare platform, operational, and CRM totals; record why test records differ.
- Assign an owner for weekly data-quality review and taxonomy changes.
Source ledger
These sources support the operating guidance above. Platform behavior and documentation can change, so volatile implementation details should be rechecked before a rollout.
- Understand your Business Profile performance and insights — Google Business Profile Help. Defines profile interactions such as call-button clicks, website clicks, directions, messages, and eligible bookings.
- Link Business Profile to Analytics — Google Analytics Help. Documents the June 2026 integration, available profile metrics, rolling retention window, and multi-profile reporting limits.
- URL builders: Collect campaign data with custom URLs — Google Analytics Help. Documents UTM parameters, case sensitivity, naming consistency, and how campaign values populate acquisition reports.
- Recommended events — Google Analytics. Defines lead-lifecycle events including generate_lead and the parameters used for consistent reporting.
- Measurement Protocol — Google Analytics Help. Explains how server-side or offline events can supplement web collection and how session identifiers preserve prior attribution context.
- Scopes of traffic-source dimensions — Google Analytics Help. Distinguishes user-, session-, and event-scoped acquisition values and documents attribution-model differences.
- Traffic-source dimensions, manual tagging, and auto-tagging — Google Analytics Help. Explains manual UTM tagging, auto-tagging, channel dimensions, and the reporting impact of missing parameters.
- Data collection — Google Analytics Help. Documents the identifiers and default information used by the standard Analytics implementation and the effect of disabled analytics storage.
- About modeled key events — Google Analytics Help. Explains that some reported key events can be modeled, can update after collection, and remain subject to traffic and privacy limitations.
The practical next step
Choose one high-value inquiry path—such as organic landing page to phone call to qualified estimate—and instrument it end to end. Validate the records manually for two weeks before expanding the schema to every channel and service line.