What is a good CTR? Benchmarks and how to find your own
A good click-through rate depends on where the ad was shown and what the person was doing when they saw it.
A search ad on your own brand name can expect a CTR many times higher than a display banner on a news site, and both can be performing well. The two things that move CTR most are the channel (search against display or social) and the intent behind the impression (a brand search against a generic one). Position and how closely the ad matches the query do the rest. Any single figure for a good CTR has already averaged across all of that.
Published benchmarks
Industry averages are published every year or so, usually by companies with access to many advertiser accounts. The figures below are the ones those companies published, with the year each one covers. All of them are US campaigns.
| Channel | Published average CTR | Source |
|---|---|---|
| Google Ads, search | 6.64% (median, April 2025 to March 2026, 13,474 campaigns, Google and Microsoft search) | LocaliQ and WordStream, Search Advertising Benchmarks, 2026 |
| Google Ads, display | 0.46% | WordStream, Google Ads benchmarks, 2018 to 2019, the last large public display study |
| Google Ads, shopping | 0.86% | WordStream, Google Shopping benchmarks, 2018 |
| Paid social (Meta, traffic campaigns) | 1.71% (median, April 2024 to June 2025, 554 campaigns) | WordStream and LocaliQ, Facebook Ads benchmarks, 2025 |
The search figure is the only one that is current. WordStream has not published display or shopping benchmarks since 2019, and the two older figures are kept because nothing larger has replaced them.
The search source also splits by industry. In the 2026 edition the highest median search CTR is Arts and Entertainment at 12.75% and the lowest is Attorneys and Legal Services at 5.87% (LocaliQ, 2026). The spread inside one channel is wider than the gap between most channels.
Why benchmarks mislead
Industry mix is the first problem. A benchmark for retail blends a brand that sells one product with a marketplace that sells thousands, and their CTRs have little in common.
Brand traffic is the second. Brand campaigns post high CTRs, so a blended account figure moves with how much brand spend is in it. Your 3.00% might be a strong generic result or a weak blended one, and the benchmark cannot tell you which.
Settings do the rest. Broad match, automatic placements and audience expansion all buy impressions that were never likely to click, which lowers CTR without the ad getting any worse. Differences in how invalid clicks are filtered change the numerator too.
There is also survivorship. The accounts in a benchmark are the ones still running. Campaigns that did badly enough to be switched off are not in the average, which pulls it up.
Clicks are not the aim either. A high CTR on an ad that promises something the page does not deliver is expensive, and a lower CTR with a better conversion rate often costs less per sale. Read CTR alongside CPC and CPA.
Find your own baseline
Your own account, split by campaign type, is the only benchmark that shares your products and your settings. CTR is clicks divided by impressions (the formula page has the detail), computed from totals within each type:
| Campaign type | Impressions | Clicks | CTR |
|---|---|---|---|
| Search, brand | 10,000 | 800 | 8.00% |
| Search, generic | 50,000 | 1,500 | 3.00% |
| Display | 200,000 | 600 | 0.30% |
| All campaigns | 260,000 | 2,900 | 1.12% |
The account figure of 1.12% is dragged down by the display campaign's 200,000 impressions and says nothing useful about search. Compare each row against its own history instead. In Google Sheets, with impressions in column B and clicks in column C:
=IF(B2=0, "", C2/B2)
For a baseline, take one campaign type over the last three months and work out its CTR from totals: =SUM(C2:C13)/SUM(B2:B13) over the monthly rows, never an average of the monthly rates. Then judge this month against that.
Keeping it current
A scheduled Fresh Sheets report can keep Impressions and Clicks for every campaign in a tab of its own, for example one called Google Ads.
Fresh Sheets replaces that tab's contents on every refresh, so keep your formulas on a separate tab. This version finds each column by its heading, so it still works if you add a field and the columns move:
=SUM(INDEX('Google Ads'!A:Z, 0, MATCH("Clicks", 'Google Ads'!1:1, 0))) / SUM(INDEX('Google Ads'!A:Z, 0, MATCH("Impressions", 'Google Ads'!1:1, 0)))
Use SUMIF against the campaign name column to get a baseline per campaign type rather than the blended one.