Per-Location Conversion Tracking: Call Tracking Numbers, UTMs, and GA4 Setup
When one website supports dozens of branches, a total lead count is not enough. We need to know which location, channel, and landing page produced each call, form submission, booking, or sale. A consistent per-location conversion tracking system makes that possible without creating unreliable data or confusing reports.
TL;DR
- Assign every conversion a stable location ID so data can move cleanly between call tracking, GA4, and reporting tools.
- Use dynamic number insertion on the website, but protect each location’s primary phone number and test number swapping carefully.
- Standardize UTMs across Google Business Profiles, advertising, and directories, then report location-level results through GA4 and Looker Studio.
The measurement problem when one site has 50 locations
A multi-location website may use one domain, one GA4 property, one advertising account, and one lead management system. The customer journey, however, still happens at the location level.
Someone may find a branch through its Google Business Profile, visit the corresponding location page, call the displayed number, and book an appointment. Another user may enter through a national service page, use the store locator, and submit a form for a different branch.
Without a shared location identifier, both conversions may appear in analytics as generic website leads. The brand sees activity, but the source and destination of each lead remain unclear.
This creates reporting problems across the organization. Marketing teams cannot compare locations fairly. Regional managers cannot determine whether their local campaigns are working. Analysts may need to combine spreadsheets manually, while leadership receives totals that hide weak or underreported branches.
Why page paths are not enough
Location page URLs provide a useful starting point. A page such as /locations/location-a/ clearly identifies a branch when the conversion happens directly on that page.
The problem begins when the customer moves elsewhere.
A visitor may leave the location page and continue to a shared contact form, financing page, booking platform, or checkout process. Unless the selected branch is carried into the next step, the final conversion loses its location context.
The same issue occurs when users enter through a general service page. The landing page does not necessarily reveal which location they will later choose.
This is why per-location conversion tracking should use a stable location ID rather than relying on URLs alone. Each branch should have a unique value, such as loc_014, that remains consistent across the website, call tracking platform, GA4 events, customer relationship management system, and reporting dashboard.
The public location name may change over time. The internal ID should remain the same.
Define what counts as a conversion
Before changing the technical setup, we need a shared definition of a conversion. Different teams often count different customer actions as leads, which makes location comparisons unreliable.
Primary conversions usually represent direct business outcomes, such as qualified phone calls, completed forms, confirmed bookings, purchases, or signed contracts. Secondary conversions may include phone number clicks, appointment starts, store locator searches, direction requests, or interactions with location details.
Both groups provide useful information, but they should not be combined into one total. A phone number click is not necessarily a completed call, and a booking page visit is not the same as a confirmed appointment.
The tracking plan should define each event, explain its business value, list the information that must be collected, and specify the location field attached to it. This gives every team a consistent measurement framework before the data reaches GA4 or a dashboard.
DNI call tracking: setup and pitfalls
Phone calls are often among the most valuable conversions for local businesses. They are also easy to misattribute when several locations share one website.
A static tracking number can show that a particular channel generated calls. However, it offers limited detail when many people visit the website at the same time. Dynamic number insertion, commonly called DNI, provides a more flexible way to connect calls with digital activity.
How dynamic number insertion works
DNI uses a script to replace the phone number displayed on a website with a tracking number. The replacement can be based on the visitor’s source, campaign, landing page, or browsing session.
CallRail’s dynamic number insertion documentation explains how website numbers can be swapped with tracking numbers. Invoca’s documentation describes the use of number pools to assign temporary numbers and connect calls with individual digital journeys.
The tracking number forwards the call to the location’s actual destination number. The platform can then record details such as the traffic source, campaign, landing page, call duration, and visitor journey.
For a multi-location brand, the setup generally requires a separate destination number and tracking configuration for each branch. Someone viewing one location should never receive a number that routes to another.
Protect the location’s primary number
DNI should change the number shown to eligible website visitors. It should not permanently replace the main phone number everywhere the business appears.
Each branch should retain a stable local number as its canonical business number. That number should remain the default number in the website content and the main reference used across business listings.
CallRail’s guidance on NAP consistency explains how referral and landing page information can be used to determine when a website number should be replaced.
The safest approach is to use DNI for session-level website attribution while keeping the branch’s permanent number as the default. This supports accurate tracking without unnecessarily weakening consistency across the location’s online presence.
Handle Google Business Profile numbers separately
A number displayed directly on a Google Business Profile cannot be changed through the website’s DNI script. Tracking calls from a profile usually requires a static tracking number assigned to that specific listing.
When a tracking number is added, the branch’s regular local number should remain connected to the profile as an additional number where possible. This keeps the established business number associated with the listing while still allowing calls to be measured.
Tracking numbers should not be reused across unrelated branches. Each profile needs a number that routes to the correct location and connects to the same location ID used in analytics and reporting.
Watch for common DNI problems
Most call tracking errors come from implementation details rather than the basic use of tracking numbers.
A script may replace every number on the page, including numbers that should remain unchanged. It may fail within an embedded booking system or a third-party form. Website caching can also interfere with the script and prevent numbers from changing correctly.
CallRail’s guidance on DNI and caching plugins notes that some caching configurations can interfere with JavaScript number replacement.
Number pools must also be large enough for expected traffic. When too many visitors need numbers at the same time, a number may be reassigned before the original attribution window has ended. This can connect a call with the wrong session.
Before launching the setup, test organic search visits, paid campaigns, Google Business Profile links, directory referrals, direct visits, mobile devices, and major browsers. Every test should confirm that the correct number appears, routes to the correct branch, and records the expected source and location information.
UTM strategy across GBP, ads, and directories
UTM parameters identify the campaign details attached to a website link. According to Google Analytics guidance on custom campaign URLs, these parameters send values to Analytics so traffic can be categorized by source, medium, campaign, and related fields.
For multi-location brands, UTMs should identify both the marketing channel and the relevant location. Without a standard naming system, the same source may appear under several spellings, abbreviations, or capitalization styles.
Create a naming convention
A practical UTM structure may look like this:
?utm_source=google&utm_medium=organic&utm_campaign=gbp&utm_content=loc_014
In this example, the source identifies Google, the medium identifies unpaid traffic, the campaign identifies the Google Business Profile program, and the content field contains the stable location ID.
The exact structure may vary, but it should be documented and used consistently. Lowercase values are generally easier to manage because analytics platforms may treat capitalized and lowercase versions as separate entries.
A central tracking sheet should record each branch’s location ID, canonical page, Google Business Profile link, tracking numbers, and approved UTM templates. This prevents individual teams, locations, or agencies from creating conflicting naming systems.
Tag Google Business Profile links by location
The website link on each Google Business Profile should point to the most relevant location page rather than automatically sending every visitor to the homepage.
Its UTMs should identify traffic from the profile and include the branch’s stable location ID. Appointment, ordering, booking, and other action links can use separate content values so the dashboard can distinguish them from the main website link.
For example, a website link may use gbp_website_loc_014, while an appointment link uses gbp_appointment_loc_014.
The naming system should remain readable. Adding every available detail creates long URLs that are difficult to manage, audit, and update.
Align paid advertising with auto-tagging
Google Ads commonly uses auto-tagging to send campaign information to GA4. Google’s documentation on manual and automatic tagging explains how campaign and click information can be collected through these methods.
Manual UTMs should not be added to advertising links without a clear reason. The advertising and analytics teams should first decide which platform is the source of truth and whether manual parameters are needed for another reporting system.
The location still needs to be captured separately. It may come from the campaign naming structure, landing page, location selected in a form, call tracking record, or custom GA4 event parameter.
Regardless of the method, the same location ID should be attached to the final conversion.
Use UTMs carefully on directories
UTMs are useful on directory links controlled by the brand, especially when referral traffic would otherwise appear under a broad or unclear source name.
A location’s directory link can include the directory name as the source, referral as the medium, and the location ID in the campaign or content value.
Internal website links should not use UTMs. Adding campaign parameters to internal links can overwrite or disrupt the original source information as visitors move through the site.
UTMs explain how a session reached the website. The location ID identifies the branch connected with the interaction. These fields serve different purposes and should remain separate in the data model.
GA4 setup with custom dimensions for location
GA4 uses an event-based measurement model, so location information should be sent with the individual events that require it.
Google’s event parameter documentation explains how parameters add details to recorded interactions. Google’s custom dimension guidance explains how custom parameter values can be registered and used in reports.
For location-level reporting, a parameter such as location_id should be included with important events.
Use event-scoped location data
An event-scoped custom dimension is generally the most practical option because a user may interact with several locations during one session.
For example, someone may compare two branches before submitting a form for one of them. A user-scoped value could incorrectly assign all activity to one branch. An event-scoped dimension records the location associated with each action.
Useful parameters may include:
| Parameter | Example | Purpose |
| location_id | loc_014 | Stable identifier used across systems |
| location_name | Northside branch | Readable label for reports |
| location_region | Northeast | Regional reporting group |
| conversion_type | appointment_request | Type of lead or outcome |
| lead_channel | website_form | Method used to convert |
Only useful, stable values should be registered as custom dimensions. Google’s guidance on high-cardinality dimensions warns that dimensions with too many unique values can affect reporting and cause values to be grouped into an “other” row.
A fixed list of location IDs is usually manageable. Unique caller information, complete URLs containing random parameters, and individual form entries should not be used as custom dimensions.
Carry the location ID through the customer journey
The website needs a clear rule for determining the correct location.
On a location page, the ID can come from the page template or data layer. In a store locator, it can be assigned when the user chooses a branch. In a shared contact form, the selected branch should be submitted with the form and included in the GA4 event.
When a customer moves to an external booking or checkout platform, the location value must be passed into that system or restored when the conversion is completed. Otherwise, GA4 may record the outcome without knowing which branch received it.
Call tracking events should also include the same location ID when sent to GA4. The website, call tracking platform, analytics property, CRM, and dashboard should all use an identical value.
Choose key events carefully
Events that represent meaningful business outcomes can be marked as key events in GA4. These may include completed lead forms, qualified calls, confirmed appointments, or purchases.
Not every interaction should be treated as a primary conversion. A phone link click and a completed tracked call should not both be reported as separate completed leads unless the dashboard clearly explains the difference.
A cleaner setup separates intent events from completed outcomes. Phone clicks, form starts, and booking starts show customer interest. Completed calls, successful form submissions, and confirmed appointments show actual results.
Validate the setup before reporting
GA4 tracking should be tested through DebugView and Realtime reports before the data is used for decision-making.
Check that each event fires only once, contains the correct location ID, and follows the agreed naming convention. Testing should cover location pages, shared forms, store locator journeys, phone clicks, call tracking integrations, booking tools, and consent settings.
Analytics totals should also be compared with call tracking and CRM records. These systems may not match exactly because they use different attribution methods, time zones, filters, and processing rules. However, large or unexplained differences usually indicate a technical or configuration problem.
Looker Studio dashboards by location
Looker Studio can bring GA4, call tracking, advertising, lead, and revenue data into one location-level report. The goal is not to display every available metric. It is to make performance easy to understand and act on.
Begin with a stable location filter
Every connected data source should contain the same location ID. This allows one dashboard control to filter GA4 events, phone calls, advertising costs, leads, and revenue for the same branch.
Readable location names can still appear throughout the report, but data joins should rely on the permanent ID. Names are more likely to change or appear differently across systems.
A second filter can group branches by region, market type, franchise group, or business unit. This allows users to move from a brand-wide view to a regional summary and then to an individual location.
Organize the dashboard around the customer journey
A clear dashboard should follow the path from discovery to conversion.
The first section can show how customers arrived, including source, medium, campaign, advertising performance, and Google Business Profile traffic. The next section can show engagement, including location page visits, store locator activity, phone clicks, and booking starts. The final section can focus on outcomes such as qualified calls, completed forms, confirmed bookings, sales, and revenue.
This structure makes performance easier to diagnose. A location with strong traffic but weak conversions may have a landing page, offer, or operational issue. A branch with limited traffic but a high conversion rate may need more visibility rather than a complete page redesign.
Show totals and rates together
Lead totals often favor large markets, while conversion rates can make a low-volume location appear stronger than it is. Dashboards should show both volume and efficiency.
Useful measures include sessions, qualified leads, conversion rate, advertising cost, cost per lead, call answer rate, booked-call rate, and revenue, where available.
Brand and regional summaries should also show how performance is distributed across the network. Median results, the percentage of locations meeting targets, and the number of branches with missing data are often more useful than one broad average.
Include data-quality checks
A location dashboard should make tracking problems visible.
Useful checks include missing location IDs, unknown UTM values, branches reporting no calls, sudden drops to zero, duplicate conversions, and major differences between GA4 and CRM totals.
These checks help marketing and analytics teams identify broken forms, expired numbers, incorrect call routing, missing scripts, and tagging errors before they affect an entire reporting period.
FAQ
What is per-location conversion tracking?
Per-location conversion tracking assigns calls, forms, bookings, purchases, and other outcomes to a specific business branch. It allows brands to compare individual locations instead of relying only on sitewide totals.
How does call tracking work for multiple locations?
Each branch is connected to its own destination number and tracking setup. DNI can display a session-based number on the website that forwards to the correct branch. Static tracking numbers may also be used for Google Business Profiles, directories, or offline campaigns.
Should Google Business Profile links use UTMs?
Yes. Consistent UTMs help separate Google Business Profile traffic from other organic visits and identify which branch generated the session. Each profile should use the appropriate location ID within the approved naming system.
Should we use UTMs on internal links?
No. UTMs are designed for external campaigns and referral links. Using them on internal links may disrupt the original source and campaign attribution as visitors move through the website.
What GA4 dimension should we use for a location?
An event-scoped custom dimension based on a parameter such as location_id is usually the most flexible option. It connects each event with the relevant branch, even when a user interacts with several locations.
Should the location name or location ID be the main identifier?
Use a permanent location ID as the primary identifier. Location names may change or be entered differently across platforms. The ID should remain stable and can be matched with a readable name in reports.
Why do GA4 and call tracking totals not match?
The platforms may use different attribution windows, filters, processing rules, time zones, and conversion definitions. Small differences are normal. Large discrepancies may indicate missing scripts, duplicate events, number pool problems, consent restrictions, or incorrect routing.
Sources
- Google Analytics, URL builders: Collect campaign data with custom URLs
- Google Analytics, Traffic-source dimensions, manual tagging, and auto-tagging
- Google Analytics, Event parameters
- Google Analytics, Create event-scoped custom dimensions
- Google Analytics, About custom dimensions and metrics
- Google Analytics, Custom events and high-cardinality reporting
- CallRail, Dynamic number insertion overview
- CallRail, Name, address, and phone number consistency
- CallRail, Dynamic number insertion and caching plugins
- Invoca, RingPool management
- Sterling Sky, Call tracking and local SEO: Five myths busted

Paul Warren is the co-founder and Head of SEO at the Local Agency and has over 15 years of enterprise SEO experience.

