- A plumber emergency click costs CHF 37.44 in Zürich — versus CHF 8.72 in Solothurn. Same search, 4× the price.
- CPCs are not fixed. They change hourly depending on competitor budgets, quality scores and time of day.
- Google Ads Agentur is cheaper in Zürich (CHF 54.39) than in Bern (CHF 63.77) — smaller markets can have higher CPCs when few bidders go aggressive.
- Rural regions offer lower entry costs, but volumes are thin. Works best when job value per client is high.
- Data: DataForSEO / Google Keyword Planner, April 2026. 30-day averages.
A snapshot, not a fixed price list
Before the numbers: these are averages. Google Ads works as an auction, and every auction is different. A competitor raising their daily budget at 8am on a Monday changes the price you pay at 8:01am. A business pausing a campaign on a Friday afternoon drops competition for every remaining bidder.
What this data shows is the structural pattern — which regions consistently cost more, which industries attract aggressive bidding, and where the relative differences lie. Those patterns are stable even when the exact figures shift. The 30-day averages below come from DataForSEO in April 2026, pulling directly from Google's Keyword Planner API.
The data: 13 industries, four regions
Key finding: Zürich is the most expensive region in 10 of 13 industries tested. The average CPC gap between Zürich and Solothurn across all categories is 47%. For emergency plumbing, it reaches 329%.
We pulled CPC and volume data for 13 service categories across Zürich, Bern, Luzern and Solothurn. Luzern data uses the district-level location code rather than the city code, which returns more complete auction data for mid-size markets.
| Industry | Zürich | Bern | Luzern | Solothurn |
|---|---|---|---|---|
| Sanitär Notfall | CHF 37.44 | CHF 10.87 | — | CHF 8.72 |
| Google Ads Agentur | CHF 54.39 | CHF 63.77 | CHF 61.46 | CHF 62.79 |
| Umzugsunternehmen | CHF 14.14 | CHF 10.48 | CHF 10.30 | CHF 8.36 |
| Elektriker | CHF 4.55 | CHF 1.93 | CHF 2.39 | CHF 2.45 |
| Immobilienmakler | CHF 5.74 | CHF 3.41 | CHF 6.11 | CHF 4.31 |
| Steuerberatung | CHF 6.15 | CHF 3.97 | CHF 3.99 | CHF 3.63 |
| Webdesign Agentur | CHF 9.41 | CHF 13.64 | CHF 9.60 | CHF 9.56 |
| Anwalt | CHF 6.42 | CHF 3.84 | CHF 4.01 | CHF 3.77 |
| Fenster kaufen | CHF 5.83 | CHF 4.71 | CHF 5.61 | CHF 4.70 |
| Elektriker | CHF 4.55 | CHF 1.93 | CHF 2.39 | CHF 2.45 |
| Maler | CHF 3.66 | CHF 3.13 | CHF 2.05 | CHF 3.36 |
| Dachdecker | CHF 2.08 | CHF 3.97 | CHF 1.29 | CHF 3.62 |
| Schreiner | CHF 1.51 | CHF 1.93 | CHF 1.21 | CHF 1.92 |
⚠ These are 30-day averages from April 2026 (DataForSEO, April 2026). Actual CPCs shift daily and even hourly. Use these as directional benchmarks, not fixed rates.
What stands out
Biggest regional CPC gaps (April 2026)
- Emergency plumbing: CHF 37.44 (Zürich) vs. CHF 8.72 (Solothurn) — 4.3× difference
- Electrician: CHF 4.55 (Zürich) vs. CHF 1.93 (Bern) — 2.4× difference
- Google Ads agency: CHF 54.39 (Zürich) vs. CHF 63.77 (Bern) — Zürich is cheaper
- Carpenter: CHF 1.21–1.93 — smallest regional gap of all 13 industries
Sanitär Notfall is the starkest gap. Zürich (CHF 37.44) costs 4.3× more than Solothurn (CHF 8.72). Both searches come from someone whose pipes are already flooding. The service is identical. The difference is how many plumbing businesses are competing for that moment of panic in each market.
Elektriker follows the same pattern. Zürich at CHF 4.55 versus Bern at CHF 1.93. More than double. Both cities are urban, both have strong purchasing power, but Zürich's density of electrical contractors bidding on the same keywords pushes every auction higher.
Umzugsunternehmen shows a clean staircase. Zürich CHF 14.14, Luzern CHF 10.30, Solothurn CHF 8.36. This is the clearest example of the city-size gradient — volume and competition decrease together as population drops.
The counterintuitive result
Not every big city costs more. Google Ads agency keywords are cheaper in Zürich than in all three comparison regions — evidence that CPC follows bidder aggression, not city size.
Google Ads Agentur is cheaper in Zürich (CHF 54.39) than in Bern (CHF 63.77), Luzern (CHF 61.46) or Solothurn (CHF 62.79).
That looks wrong. But it makes sense once you understand auction mechanics. In Zürich, dozens of agencies compete — budgets are spread across many bidders, and the competition normalises prices. In Bern or Solothurn, a handful of aggressive agencies bid with high maximum CPCs on thin volume. A small number of determined bidders in a low-volume market can push CPCs higher than a crowded one.
This is why "more competition = higher CPC" is an oversimplification. What actually matters is how aggressive the bidders are relative to the volume available.
Why location drives CPC
Short answer: the more active, well-funded bidders competing in a given region and industry, the higher the auction prices. Purchasing power, ad quality and competitor budgets all play a role — but bidder density is the strongest driver.
Google Ads runs a real-time auction for every search. The winner is not the highest bidder — it is the business with the best combination of bid and Quality Score. Quality Score captures ad relevance, expected click-through rate and landing page experience.
In Zürich, more businesses with professional campaign management compete for the same clicks. Budgets are larger. Quality Scores are often higher because accounts are better maintained. All of this pushes winning auction prices up, even for businesses with strong quality scores of their own.
Population density is a contributing factor but not the whole story. What really drives CPCs is the density of active, well-funded bidders in a given category and geography. A single determined competitor with a high-converting landing page and a large budget can meaningfully move CPCs for everyone else in a local market.
This is also why the same keyword can cost completely different amounts on the same day depending on the time. More on that below.
What moves prices hour to hour
Four factors move CPCs inside the day: competitor daily budgets, Quality Score changes, seasonal demand, and bid adjustments by hour or device. The practical point is simple. The CPC in Keyword Planner is not a fixed tariff. It is an average across many live auctions (DataForSEO, April 2026).
Every click triggers a separate auction. Between two auctions for the same keyword, several things can shift:
Competitor daily budgets. This is the fastest swing factor I see in local accounts. A business with a CHF 500 daily cap can be aggressive in the morning and then disappear from the auction by early afternoon. When that happens, the remaining bidders often get cheaper clicks without changing anything in their own account.
Quality Score changes. Google keeps recalculating the relationship between keyword, ad, and landing page. Two advertisers can bid the same amount and still pay different CPCs because one account is cleaner. In account audits, this is one of the most underestimated drivers of long-term CPC stability.
Seasonal demand spikes. Demand pulls bidders into the auction. I see that clearly in moving, roofing, and tax-related searches. Spring pushes moving terms up. Storm events change roofing demand fast. Filing periods make tax clicks more expensive. Those patterns do not affect every day equally, but they do reshape the averages.
Device and hour-level bid pressure. Many advertisers apply bid adjustments by device and time block. That means a click at 10:00 on mobile can cost more than the same keyword at 16:30 on desktop. The average CPC hides that volatility. The market structure does not.
The takeaway is not that every account will pay the same premium at the same hour. It is that market averages tell you where pricing pressure lives. Day-to-day execution still decides what you actually end up paying.
Three strategies, three regions
The right strategy depends on the market, not just the budget. Zürich needs precision. Bern and Luzern often offer cleaner economics. Rural regions can work surprisingly well when job value is high enough.
The regional CPC gap changes what a good campaign should look like, and this is where I see a lot of Swiss accounts go wrong. Businesses often copy a Zürich-style setup into lower-cost markets, or they run broad regional campaigns and never see where the waste sits.
Zürich needs precision over reach. In the live dataset, service clicks ranged from roughly CHF 14 to CHF 37 depending on category (DataForSEO, April 2026). At that level, broad targeting gets expensive very fast. Exact and phrase match, tight negatives, and cleaner ad-group structure matter more here than in cheaper markets. If one irrelevant plumbing click costs CHF 37.44, sloppiness is no longer a minor optimisation issue. It is a budget leak. Improving your Quality Score is still one of the fastest ways to reduce CPC pressure without cutting reach. See our Swiss Google Ads benchmarks for the wider performance context.
Bern and Luzern are often the better starting point for SMEs. Lower CPCs mean more data per franc. That matters when the account is still learning. A local trades business usually does not need hundreds of leads. It needs a manageable flow of profitable ones. In that environment, a good but simple campaign can often go further before account complexity becomes necessary.
Rural regions work when economics beat volume. This is where many businesses underestimate the opportunity. Lower search volume does not automatically make a market unattractive. If the average order value is high enough, a thinner market with cheaper clicks can outperform a bigger city on efficiency. The trade-off is volatility. Some months will simply have less available search demand, so forecasting has to stay realistic.
If you are unsure which regional setup fits your business, a free account audit will show you what the data actually looks like for your industry and geography. For the broader strategic framework, visit our Google Ads services page.
CPC and search volume: DataForSEO / Google Keyword Planner, April 2026. Location codes: Zürich city (1003854), Bern city/district (20228), Luzern district (20227), Solothurn district (20229). Language: German (de). All values are 30-day averages and change continuously.
Quality Score methodology: Google Ads Help Center.

