AI Overviews on 11 top queries cut CTR from 6.1% to 3.4%
AI Overviews now show on 11 of your top 30 queries. On those, CTR fell from 6.1% to 3.4% at the same position, while queries without one held at 5.2% to 5.0%. You are cited in 3 of the 11.
Every Monday: which of your top 30 queries now show an AI Overview, whether it cites you, and what happened to your CTR there at the same position.
Reads
You get
The card on the right is a sample. Yours shows your own numbers and updates in place every run.
What lands on your board
AI Overviews now show on 11 of your top 30 queries. On those, CTR fell from 6.1% to 3.4% at the same position, while queries without one held at 5.2% to 5.0%. You are cited in 3 of the 11.
Clicks are down and position is flat, and nobody can say why. Often the answer sits above the results: an AI Overview that answers the question before anyone scrolls. Search Console does not say which of your queries show one, and SERP tools do not know your click-through rate, so the effect stays a hunch.
Every Monday the agent fetches the live results for your 30 biggest queries through DataForSEO, notes which carry an AI Overview and whether your domain is among its sources, and sets that against your Search Console CTR for the last 28 days and the 28 before, only where your position held steady. Queries without an Overview are the control group, so the card can tell an AI Overview effect apart from a sitewide dip.
Call searchanalytics.query with dimensions: ["query"] and your country filter for the last 28 full days and for the 28 days before that. Take the 30 queries with the most clicks in the recent period, and keep clicks, impressions, CTR and position for both periods.
Send one POST /v3/serp/google/organic/task_post with 30 tasks: keyword in lowercase, your location_code and language_code, depth: 10, load_async_ai_overview: true (without it, Overviews Google builds on request come back missing) and tag set to the keyword. Collect results with tasks_ready and task_get/advanced/<id>.
A query has an Overview when item_types includes ai_overview. Read that item's references (and the references inside its items), normalize each domain (lowercase, strip www.) and mark the query cited when one matches your domain. Note your organic rank_group too.
Join the SERP results to the Search Console rows on the query string. Keep queries whose average position moved by less than 1.0 between the periods, and compute group CTR (sum of clicks / sum of impressions) for both periods in three groups: with an Overview and cited, with one and not cited, without one. The group without an Overview is the baseline.
Post how many of the 30 show an Overview, the CTR change with and without one, the cited count, and the queries that lost most. Save which queries showed an Overview in aio-watch.json, so next week can say which ones are new.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/dataforseo-ai-overview-ctr-impact/install | shAsk Claude Code:
promptRun the dataforseo-ai-overview-ctr-impact skillOr paste the prompt instead of installing:
promptFrom my Google Search Console property (United States), get clicks, impressions, CTR and position by query for the last 28 full days and the 28 days before, and take the 30 queries with most clicks recently. Fetch their Google results with DataForSEO's SERP API on the Standard queue (task_post with 30 tasks, location_code 2840, language_code en, depth 10, load_async_ai_overview true). For each, note whether item_types includes ai_overview and whether my domain is among that item's references. Keep queries whose position moved less than 1.0, and compute total CTR (clicks over impressions) for both periods for queries with an Overview where I am cited, with one where I am not, and without one. Tell me how many of the 30 show an Overview, the CTR change in each group, how many cite me, the queries that lost most, and the one to work on first.Mondays at 9:00, from cron on any machine where Claude Code is signed in:
crontab0 9 * * 1 claude -p "Run the dataforseo-ai-overview-ctr-impact skill"Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works
SKILL.md---
name: dataforseo-ai-overview-ctr-impact
description: "Every Monday: which of your top 30 queries now show an AI Overview, whether it cites you, and what happened to your CTR there at the same position. Use when the user asks for this, or when it runs on a schedule."
---
# AI Overviews eating your clicks: DataForSEO SERPs and Search Console CTR
Every Monday: which of your top 30 queries now show an AI Overview, whether it cites you, and what happened to your CTR there at the same position.
Clicks are down and position is flat, and nobody can say why. Often the answer sits above the results: an AI Overview that answers the question before anyone scrolls. Search Console does not say which of your queries show one, and SERP tools do not know your click-through rate, so the effect stays a hunch.
Every Monday the agent fetches the live results for your 30 biggest queries through DataForSEO, notes which carry an AI Overview and whether your domain is among its sources, and sets that against your Search Console CTR for the last 28 days and the 28 before, only where your position held steady. Queries without an Overview are the control group, so the card can tell an AI Overview effect apart from a sitewide dip.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- Read access to the Search Console property, with the country filter set to the same market as the DataForSEO location.
- DataForSEO API login and password, or the DataForSEO MCP server. A run is 30 Standard-queue SERPs with the AI Overview option, a few cents at list price; test on `https://sandbox.dataforseo.com/v3/` first.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Pull CTR for two periods** (Google Search Console): Call `searchanalytics.query` with `dimensions: ["query"]` and your country filter for the last 28 full days and for the 28 days before that. Take the 30 queries with the most clicks in the recent period, and keep clicks, impressions, CTR and position for both periods.
2. **Fetch the 30 SERPs with AI Overviews loaded** (DataForSEO): Send one `POST /v3/serp/google/organic/task_post` with 30 tasks: keyword in lowercase, your `location_code` and `language_code`, `depth: 10`, `load_async_ai_overview: true` (without it, Overviews Google builds on request come back missing) and `tag` set to the keyword. Collect results with `tasks_ready` and `task_get/advanced/<id>`.
3. **Read the Overview and its sources** (DataForSEO): A query has an Overview when `item_types` includes `ai_overview`. Read that item's `references` (and the `references` inside its `items`), normalize each `domain` (lowercase, strip `www.`) and mark the query cited when one matches your domain. Note your organic `rank_group` too.
4. **Compare CTR at the same position**: Join the SERP results to the Search Console rows on the query string. Keep queries whose average position moved by less than 1.0 between the periods, and compute group CTR (sum of clicks / sum of impressions) for both periods in three groups: with an Overview and cited, with one and not cited, without one. The group without an Overview is the baseline.
5. **Post and keep the history**: Post how many of the 30 show an Overview, the CTR change with and without one, the cited count, and the queries that lost most. Save which queries showed an Overview in `aio-watch.json`, so next week can say which ones are new.
## Route B: the browser
### What you need
- Signed in to Google with access to the Search Console property, and to the DataForSEO dashboard with a funded balance.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://search.google.com/search-console/performance/search-analytics. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Compare two 28-day periods**: Pick the property, add your country filter, then in Date choose Compare, Custom, and set the last 28 days against the 28 before. Turn on all four metrics and sort Queries by Clicks; note the top 30 with CTR and position for both periods.
2. **Check each query for an AI Overview**: Open `https://app.dataforseo.com/`, go to API Playground, SERP API > Google > Organic > Live Advanced, set your location and language, depth `10`, and turn on the option to load asynchronous AI Overviews. Run each of the 30 queries once and note whether `ai_overview` is in `item_types` and whether your domain is in its `references`.
3. **Compare CTR at a steady position**: Keep queries whose position moved by less than 1.0. Add up clicks and impressions for both periods in three groups (Overview and cited, Overview not cited, no Overview) and divide for each group's CTR.
4. **Report**: Give the number of queries with an Overview, the CTR change in each group, the cited count, and the queries that lost most CTR.
Note: Thirty Playground requests take a while and use Live pricing. Searching Google yourself shows whether an Overview appears for you, but it is personalized and does not list every source, so the counts will differ from the API route.
## The report
- **AI Overview reach**: how many of your top 30 queries show one, and how many are new since last week.
- **CTR with and without an Overview**, last 28 days against the 28 before, at a steady position.
- **Cited**: in how many Overviews your domain is a source.
- **The queries that lost most**, with position, CTR before and after, and whether you are cited.
- The query to work on first.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "dataforseo-ai-overview-ctr-impact/<date of this run, e.g. 2026-10-16>",
"item_key": "dataforseo-ai-overview-ctr-impact",
"project": "example.com",
"source": "AI Overviews eating your clicks: DataForSEO SERPs and Search Console CTR skill",
"kind": "update",
"title": "AI Overviews on 11 top queries cut CTR from 6.1% to 3.4%",
"summary": "AI Overviews now show on **11 of your top 30** queries. On those, CTR fell from **6.1% to 3.4%** at the same position, while queries without one held at 5.2% to 5.0%. You are cited in **3 of the 11**.",
"widget": [
{
"type": "Grid",
"props": {
"columns": 3
},
"children": [
{
"type": "Stat",
"props": {
"label": "CTR with an AI Overview",
"value": 3.4,
"unit": "%",
"delta": -44
}
},
{
"type": "Stat",
"props": {
"label": "CTR without one",
"value": 5,
"unit": "%",
"delta": -4
}
},
{
"type": "Stat",
"props": {
"label": "Cited in Overviews",
"value": "3 of 11"
}
}
]
},
{
"type": "Table",
"props": {
"columns": [
"Query",
"Position",
"CTR before",
"CTR now",
"Cited"
],
"align": [
"left",
"right",
"right",
"right",
"left"
],
"rows": [
[
"how to write an invoice",
2.1,
"11.8%",
"5.9%",
"no"
],
[
"what is a proforma invoice",
3.4,
"8.2%",
"4.1%",
"no"
],
[
"invoice payment terms",
4,
"6.5%",
"3.6%",
"yes"
],
[
"how to invoice as a freelancer",
2.8,
"9.9%",
"6.0%",
"no"
],
[
"net 30 meaning",
5.2,
"4.4%",
"2.3%",
"no"
],
[
"what to include on an invoice",
3.1,
"7.7%",
"5.2%",
"yes"
]
]
}
},
{
"type": "Callout",
"props": {
"text": "Start with \"how to write an invoice\": position 2, half the CTR it had, and the Overview cites two rivals but not you. A short numbered answer near the top of the page is what gets cited.",
"tone": "warn"
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Mondays at 9:00 (`0 9 * * 1`). From cron, with the agent signed in on that machine:
```bash
0 9 * * 1 claude -p "Run the dataforseo-ai-overview-ctr-impact skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/dataforseo-ai-overview-ctr-impact#schedule
Source: https://briefkin.dev/skills/dataforseo-ai-overview-ctr-impact
Read access to the Search Console property, with the country filter set to the same market as the DataForSEO location.
DataForSEO API login and password, or the DataForSEO MCP server. A run is 30 Standard-queue SERPs with the AI Overview option, a few cents at list price; test on https://sandbox.dataforseo.com/v3/ first.
npx dataforseo-mcp-server and set DATAFORSEO_USERNAME and DATAFORSEO_PASSWORD to your API login and API password (Dashboard > API Access); add http to the command for clients that want a local HTTP server. A hosted server runs at https://mcp.dataforseo.com/mcp for clients that can send a Basic authorization header. You can turn off the modules a skill doesn't use to keep the tool list short (setup guide).DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD and call the endpoints with curl -u "$DATAFORSEO_LOGIN:$DATAFORSEO_PASSWORD". The free sandbox at https://sandbox.dataforseo.com/v3/ returns sample data at no cost, which is the place to test a skill before it spends money.The API password can spend your balance but cannot sign in to the dashboard or change billing. Set a low balance alert in the dashboard, and give each skill a fixed keyword list and depth so a run costs the same every time.
GOOGLE_APPLICATION_CREDENTIALS at the key and set GSC_SITE_URL to sc-domain:example.com or https://www.example.com/.webmasters.readonly scope and a stored refresh token works for scheduled runs.Ask for webmasters.readonly and add the service account as a Restricted user; the reports only read.
It is an approximation. The SERP API shows whether an Overview appears now, not when it started. The skill saves which queries showed one each week, so after a month it can compare CTR from before and after the week an Overview first appeared. Until then, the group without an Overview tells you how much of the drop is sitewide.
Google does not show Overviews to every searcher on every query, and some are built only after the page loads. The skill sets load_async_ai_overview: true so DataForSEO waits for those, at a small extra cost per SERP. Results still vary by location, so keep the DataForSEO location the same as the Search Console country.
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Yes. Switch the data source to "Your browser" and the steps change to the DataForSEO and Google Search Console pages themselves: the agent opens search.google.com/search-console/performance/search-analytics in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.