[WATCH] Multi-Location Lead Gen
September 21, 2026
Multi-Location Google and Meta Ads: How to Track ROAS Per Location
Most advice about multi-location advertising stops at campaign structure. One campaign per location, or cluster by metro, or ad groups split by city. That debate is the easy half.
The hard half is being able to answer five questions, and each one is harder than the last.
- What is total blended ROAS across every location and both channels?
- What is ROAS per location?
- What is ROAS per channel?
- What is ROAS per location and channel together?
- What is ROAS per location, channel, campaign and individual ad?
Most accounts can answer the first one. A few can answer the second. Almost nobody can answer the fifth, which is the one that actually changes where the money goes. We run this setup for a moving company operating in five major markets across five states, on Google and Meta, and the structure exists to serve those questions. Not the other way around.
Google: location lives at the campaign level
Per location, we run two campaigns. A Search campaign and a Performance Max campaign. Location targeting sits at the campaign level, which is what makes per-location budget control possible without bid adjustment gymnastics.
Inside the Search campaign, ad groups are split by service. Local moving, long distance, packing, storage, commercial. Keywords are mostly phrase match. Each ad group has ads that name both the service and the city, because a City 1 long distance searcher should see a City 1 long distance ad. Local and long distance behave like two different businesses, which we covered in local vs long distance Google Ads.
Every ad group gets its own landing page. "City 1" local moving, "City 1" long distance, "City 1" packing, "City 1" storage. Same wireframe, same layout, same form. Only the slug, the headline and some body copy change. That is a lot of pages, and it is the cost of running a high Quality Score account at scale. The rules we follow are in our post on landing pages for moving companies.
Performance Max works the same way. One campaign per location, asset groups split by service, each pointed at its own landing page. More on why we still run it in Performance Max for service businesses.
Meta: location lives at the ad set level
Meta gets simpler treatment, because simple is what works there.
One leads campaign for the whole business. Inside it, one ad set per location, with ad set budget optimization turned on so we control exactly what each market spends. We could have used a campaign per location. We chose the ad set, and budget control is the reason it still works.
Targeting is broad. No interests. Location is effectively the only filter, plus exclusions for existing customers and leads from the last 30 days. No AI creative enhancements, because toggling them off constantly is not a workflow.
Each ad set carries about 20 ads. Seven are influencer UGC videos, the rest are statics and video. Headlines, primary text and site links call out the city directly. The UGC is outperforming expensive high-production commercial work by a wide margin, which lines up with what we see across Facebook Ads for moving companies.
Meta ads go to a broader city-level landing page rather than a service-level one. We could go a layer deeper. Meta has no Quality Score to reward that relevance the way Google does, so the return on that work is lower.
The UTM decision that makes or breaks the whole thing
Here is the part that gets skipped. Your UTMs have to carry the location, and where location lives is different on each platform.
On Google, location is the campaign, so [utm_campaign] holding the campaign name is enough. We also capture the keyword.
On Meta, location is the ad set. So we set [utm_campaign] to the ad set name, not the campaign name. The campaign name would return one value for the entire business and tell us nothing. And utm_content is the ad name, so we can trace revenue back to a specific creative.
Get this wrong and every downstream report collapses into one blended number.
Why the CRM is not the attribution layer
Leads go to the CRM by webhook, and they are captured in WhatConverts at the same time. WhatConverts is the source of truth for attribution. The CRM is the source of truth for money.
A CRM runs the business. It dispatches trucks, builds quotes, sends invoices. You can store UTMs in it, but it was never built to reconstruct a customer journey or reconcile ad spend against revenue. That mismatch is why Google Ads and your CRM disagree on lead counts.
So quote values and sale values sync out of the CRM into WhatConverts. Ad spend flows in live. Calls get tracked with dynamic number insertion, which we cover in call tracking for service businesses. Then we use dimension grouping to map multiple campaign IDs to a single location label, so nobody is cross-referencing campaign IDs by hand.
That is also what feeds offline conversion tracking back into Google Ads, so Smart Bidding optimizes toward booked jobs instead of form fills.
What this actually unlocks
Filter by medium CPC and you have blended ROAS. Add the location dimension and you have ROAS per market. Add source and you have ROAS per channel per market. Add content and keyword and you can see which single ad in which city produced revenue.
That last view is where decisions change. Meta will show you an ad with the highest cost per lead in a market and you will want to kill it. Look at sale value and that same ad is often the revenue leader, because it attracts long distance jobs at four times the ticket. Cost per lead told you to turn off your best ad. Only revenue data stops you. This is the same reason a 5x can beat a 100x, which we broke down in what is a good ROAS for a service business.
Build it this way before you open the next market. Retrofitting attribution across five locations is far worse than building it for one. If a new market is on the roadmap, start with expanding your service area with Google Ads.
Frequently Asked Questions
Do I need a separate Google Ads campaign for every location?
For service businesses running 3 to 15 markets, yes. Location targeting at the campaign level is the only clean way to control budget per market and report on it without bid adjustment workarounds. Past roughly 15 locations, clustering by metro starts to make sense so Performance Max and Smart Bidding have enough conversion volume per campaign to learn from.
Should each location get its own Meta campaign or its own ad set?
Either works. We use one campaign with an ad set per location and ad set budget optimization turned on, because that keeps Meta simple while still giving us hard budget control per market. The important part is not which level you pick. It is that your UTMs reflect whichever level holds the location.
Why not just track everything in the CRM?
A CRM is built to run operations, not to reconcile ad spend against revenue or reconstruct a multi-touch customer journey. You can store UTMs in one, but you will not get reliable spend-to-revenue reporting per location and per channel. A dedicated attribution layer like WhatConverts sits between the ad platforms and the CRM and does that job properly.
How do I see which individual Meta ad is producing revenue?
Set [utm_content] to the ad name using dynamic URL parameters, so every lead carries the creative that produced it. Then sync sale values from your CRM into your attribution tool and filter by content. Meta's own cost per lead will not tell you this, because Meta does not know what a job sold for.
How many locations before this setup is worth building?
Two +. The work of adding location dimensions to your UTMs and attribution tool is nearly identical whether you have two markets or ten, and retrofitting it later means losing historical data you cannot recover. Build it when you open the second market.
Know Exactly Which Market Is Making You Money
Take your multi-location service business to new heights with conversion tracking built for real revenue reporting. Reach out to Encipher today to start making budget decisions on booked jobs instead of cost per lead with our proven tracking strategies.
