If you’ve had any experience with Google core update then you definitely heard about Glenn Gabe. No doubt, he is the most competent person out there when it comes to analyzing impacts of Core Updates on websites. His famous Kitchen Sink Approach to Remediation, has a pivotal element: the Delta Reports.
A delta report is a comparison report that shows what changed between two time periods. In our case, that would be pre-update and post-update comparative report. This would require you to export data from Google Search Console, build massive Excel workbooks, create pivot tables, check for losers & gainers, and look for patterns.
It works, and it’s the gold standard for a reason.
However, working with large chunks of data on larger websites, is where things get tricky. Google core updates don’t impact singular pages. They either downgrade (or upgrade) the entire site, or certain clusters of the site. Clusters can be explicitly categorized by URL structure, or they can be topical clusters. When there’s no explicit structure in place, clustering topics requires semantic analysis. And who better to do this than LLMs.
Another challenge no one is thankful for: anyone who’s tried getting the getting the full picture of a site’s search performance in GSC knows that while Google flaunts new flashy features to GSC, its full functionality and usefulness is limited. You either export 1,000 rows, or have to depend on third party extensions, whose free version allows you to process up to 25,000 rows.
So the two problems are clear:
- The data volume: core update analysis requires tens or hundreds of thousands of rows to see the full picture, and processing that much data manually is brutal
- GSC export limitations: 1,000 rows from the UI, 25,000 from free extensions. A normal site needs more.
So, me being the lazy slob I am, had to come up with something myself. As the old perverted saying goes: “Why buy the cow when you can get the milk for free?”
Now, I tackled both problems. The first using the GSC API connected directly to Google Sheets, pulling unlimited rows without paid tools. The second by feeding the results to Claude AI, which handles the pattern analysis, semantic clustering, and cannibalization detection that would take hours in a spreadsheet.
Quick Tips Before We Get Started
- Wait for the rollout to finish. Don’t analyze mid-rollout. Google confirms when core updates are complete.
- Compare equal time periods. 28 days vs 28 days. Not 14 vs 30.
- Start a new Claude conversation per site + update. Name it “ClientName – March 2025 Core Update.”
- Keep your spreadsheet as the source of truth. The sheet is your persistent artifact, the full dataset you reference and share.
Important: What This Replaces (and What It Doesn’t)
This replaces the manual work: Excel & pivot table workflow. It’s faster, more iterative, and is your core update assistant.
What it doesn’t replace is your judgment. Claude helps you find the patterns and groups, but you still need to be the one interpreting everything. A page losing 60% of its clicks could mean thin content, cannibalization, a SERP feature stealing clicks, or Google simply preferring a competitor.
Although this solution helps you find out what happened more efficiently, in the end you’ll be the one figuring out why.
What You Need
Before you start, make sure you have everything installed and ready. Most of this is a one-time setup. In my experience on Windows, VS code is by far the most intuitive code editor, so this article covers the setup using VS Code and Windows OS.
For the Google Sheet:
- A Google account with access to at least one Google Search Console property.
- A Google Cloud project with the Search Console API enabled (free, instructions below)
For Claude Desktop + MCP:
- Python 3.11 or newer — during install, check “Add Python to PATH”
- Node.js LTS
- Claude Desktop — you need a Claude account; Pro plan ($20/mo) recommended for longer analysis sessions
- VS Code or any terminal you’re comfortable with
Both steps use the same Google Cloud project, you only need to create one.
Note: The Google Sheet, Apps Script, GSC API, and MCP server are all free. Claude has a free tier, or Claude Pro at $20/mo for heavier use. The MCP live connection is Claude Desktop-specific. But you can export the report data and paste it into any LLM for a basic analysis.
How This Works
The workflow has two parts:
- The Google Sheet generates your delta report. An Apps Script pulls data directly from the GSC API, paginating in 25,000-row batches. It compares your pre-update and post-update periods, computes the deltas, and writes a formatted comparison report.
- Claude Desktop analyzes the data through a live GSC connection. You connect Claude Desktop to your Search Console using an open-source MCP (Model Context Protocol) server. Now Claude has direct access to your GSC data. You tell it your date ranges and ask it to find the biggest losers, cluster them by topic, check for cannibalization, cross-reference with indexing issues.
Step 1: Get the Template
→ Copy the Google Sheet template
Click the link, then File → Make a copy.
Step 2: Set Up Google Cloud & Create OAuth Credentials
First set up the Google Cloud project, call it “GSC Delta” or whatever.
- Go to console.cloud.google.com and create a new project
- Go to APIs & Services → Library, search for “Google Search Console API”, and click Enable
- Open your copy of the Google Sheet, go to Extensions → Apps Script
- In Apps Script, click the gear icon (Project Settings)
- Under “Google Cloud Platform (GCP) Project”, click Change project
- Paste your GCP project number (the number, not the ID, which you can find on the Cloud Console dashboard)
- Click Set project, go back to the sheet and refresh
You should see a “GSC Reports” menu in the toolbar.
Since you’re already there, you can create the OAuth Credentials in the same project.
- Go to Google Auth Platform (or APIs & Services → OAuth consent screen)
- Under Branding, fill in an app name and your email
- Under Audience, set to External
- Under Clients, create an OAuth client with type Desktop app
- Download the JSON file and save it as
client_secrets.jsonin yourmcp-gsc-mainfolder
Step 3: Install the MCP Server
Go to github.com/AminForou/mcp-gsc. The MCP server is mcp-gsc by Amin Foroutan, released under the MIT license.
Click Code → Download ZIP. Extract it somewhere simple:
C:\Users\YourName\Desktop\mcp-gsc-main
If your Windows username has spaces, wrap paths in quotes when using the terminal.
Open VS Code, open the mcp-gsc-main folder (File → Open Folder), open the integrated terminal (Ctrl + `), and run:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
If you hit ModuleNotFoundError errors, install the missing packages manually:
pip install platformdirs
pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client
pip install mcp
Step 4: Configure Claude Desktop
Press Win + R, type %APPDATA%\Claude and hit Enter. If there’s no Claude folder, open Claude Desktop first — it creates the folder on launch.
Create claude_desktop_config.json with:
{
"mcpServers": {
"gscServer": {
"command": "C:\\Users\\YourName\\Desktop\\mcp-gsc-main\\.venv\\Scripts\\python.exe",
"args": ["C:\\Users\\YourName\\Desktop\\mcp-gsc-main\\gsc_server.py"],
"env": {
"GSC_OAUTH_CLIENT_SECRETS_FILE": "C:\\Users\\YourName\\Desktop\\mcp-gsc-main\\client_secrets.json"
}
}
}
}
Replace YourName with your actual Windows username. Double backslashes required.
The, in Claude Desktop, go to Settings and find the Developer section. Enable it. Without this, Claude Desktop won’t read your config file.
After everything is set up in Claude you need to exit the app completely, and re-open it. Closing the window to tray isn’t enough. You can run a test prompt like “List all my GSC Properties”. If it returns the list of properties you’re good to go. We’re not there just yet!
Step 5: Configure the Sheet and Run
Back to the Google sheet. Open the Config sheet and set these values:
| Setting | Example | Notes |
|---|---|---|
| property | sc-domain:example.com |
Exactly as it appears in GSC |
| periodA_start | 2025-03-28 |
Post-update start |
| periodA_end | 2025-04-25 |
Post-update end |
| periodB_start | 2025-02-13 |
Pre-update start |
| periodB_end | 2025-03-12 |
Pre-update end |
| dimensions | query,page |
Start here for the full picture |
| rowLimit | 100000 |
Increase for larger sites |
| sortBy | clicks_diff |
Sort by biggest click changes |
| sortDirection | ascending |
Losers first |
There should be a new menu item titled GSC Reports. Click GSC Reports → Run Comparison Report.
First run asks for authorization. If you see “This app isn’t verified”, click Advanced → Go to [project name]. This is safe, the script runs under your own Google account and you can read the full source code in Apps Script.
The script paginates through the GSC API in 25,000-row batches. Depending on site size, this takes 30 seconds to a few minutes. This overwrites the report sheet. So make sure to copy your data before running another report.
Step 6: Run the Prompts in Claude Desktop
Now that you have the raw report, you can ask Claude to analyze the data. You will have to set a date range in the prompt as well, so make sure the range is consistent with the one you set in the Config sheet.
See the prompt library below:
Prompt Library
Both pieces are in place. The spreadsheet has your raw delta data. Claude has live access to your GSC. Open a new conversation in Claude Desktop and start querying.
Big picture delta
Start here
Compare search performance for [site URL] for [pre-update dates] vs [post-update dates]. Show me total clicks, impressions, CTR, and average position for both periods with percentage change. Then show me the top 30 biggest losers by click decline and top 20 winners.
Group losers by site section
Group the losing pages by URL directory pattern (e.g. /blog/, /products/, /services/). Which sections got hit hardest? Show me the total click loss per section.
Topical cluster analysis
Analyze the losing pages semantically, not by URL pattern, but by topic. Group them into topical clusters based on the queries they rank for. Are certain topics getting demoted across the board?
Query-level drill-down
For the top 10 losing pages, show me query-level data for both periods. Did these queries lose position, lose impressions, or both? Flag any query where position dropped but impressions stayed flat, that’s a ranking loss, not a SERP change.
Cannibalization check
Look at the queries driving traffic to the top 20 losing pages. Are any of those same queries appearing for other pages on the site? Flag anything ranking for multiple URLs.
Indexing cross-reference
Check indexing status for the top 20 losing pages. Flag any with crawl issues or that haven’t been crawled recently. Are any of the losers deindexed?
Device split analysis
Compare mobile vs desktop performance for both periods. Did one device type get hit harder? Show me top losers by device separately.
Winner analysis
For the top 15 winning pages, what do they have in common? Group by URL pattern and show me query-level data. What kind of content is gaining?
All Prompts
Save Credits
Compare search performance for [site URL] for [pre-update dates] vs [post-update dates]. Show me total clicks, impressions, CTR, and average position for both periods with percentage change. Then show me the top 30 biggest losers by click decline and top 20 winners.
Then, group the losing pages by URL directory pattern (e.g. /blog/, /products/, /services/). Which sections got hit hardest? Show me the total click loss per section.
Then, analyze the losing pages semantically, not by URL pattern, but by topic. Group them into topical clusters based on the queries they rank for. Are certain topics getting demoted across the board?
For the top 10 losing pages, show me query-level data for both periods. Did these queries lose position, lose impressions, or both? Flag any query where position dropped but impressions stayed flat, that’s a ranking loss, not a SERP change.
Look at the queries driving traffic to the top 20 losing pages. Are any of those same queries appearing for other pages on the site? Flag anything ranking for multiple URLs.
Check indexing status for the top 20 losing pages. Flag any with crawl issues or that haven’t been crawled recently. Are any of the losers deindexed?
Compare mobile vs desktop performance for both periods. Did one device type get hit harder? Show me top losers by device separately.
For the top 15 winning pages, what do they have in common? Group by URL pattern and show me query-level data. What kind of content is gaining?
Finally, generate this report in PDF and CSV format.
