GSC Portfolio Audit

Gsc portfolio audit

by OpenClaudia · MIT license · ★ 705 on GitHub

Gsc portfolio audit cover

Audit EVERY Google Search Console property at once — rank all sites by clicks and impressions with period-over-period deltas, then diff keywords per site to surface what is newly ranking, rising, dropping, lost, or ranking well without…

---
name: gsc-portfolio-audit
description: >
  Audit EVERY Google Search Console property at once — rank all sites by clicks and
  impressions with period-over-period deltas, then diff keywords per site to surface what
  is newly ranking, rising, dropping, lost, or ranking well without earning clicks.
  Built for agencies and multi-site owners. Use when asked to compare all sites, rank
  properties by traffic, find new keywords across a portfolio, or spot which site is down.
  Trigger phrases: "audit GSC", "all my sites", "rank my properties", "portfolio search
  performance", "which sites are down", "what new keywords are we ranking for",
  "client site performance", "GSC report across accounts".
  For ONE site's queries, pages, or index coverage, use the search-console skill instead.
---

# GSC Portfolio Audit

Answers "how is everything doing?" across every property on a Search Console account, which is the question the per-site tooling can't answer without dozens of manual exports.

Overview

Answers "how is everything doing?" across every property on a Search Console account, which is the question the per-site tooling can't answer without dozens of manual exports.

Manual install (npx, ZIP)
Claude Codenpx skills add OpenClaudia/openclaudia-skills --skill gsc-portfolio-audit -g -a claude-code
Claude Code (degit)npx degit OpenClaudia/openclaudia-skills/skills/gsc-portfolio-audit#main ~/.claude/skills/gsc-portfolio-audit
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md4.1 KB
Read SKILL.md here
OpenClaudia/main1 file shown
SKILL.md
Show the full text68 lines
gsc-portfolio-audit/SKILL.md68 lines · 4.1 KB

GSC Portfolio Audit

Answers "how is everything doing?" across every property on a Search Console account, which is the question the per-site tooling can't answer without dozens of manual exports.

Setup

Requires an OAuth refresh token with https://www.googleapis.com/auth/webmasters.readonly:

export GOOGLE_GSC_CLIENT_ID=...      # or GOOGLE_CLIENT_ID
export GOOGLE_GSC_CLIENT_SECRET=...  # or GOOGLE_CLIENT_SECRET
export GOOGLE_REFRESH_TOKEN=...
export GSC_EXCLUDE="olddomain.com"   # optional, comma-separated
pip install requests

The most common setup failure is unauthorized_client on token refresh. It means the refresh token was issued for a different OAuth client than the id/secret you paired with it. Accounts that have added Google integrations over time usually have several clients; match the pair that minted the token.

Run it

python3 scripts/audit_gsc.py            # full: ranking + keyword diff for the top 12
python3 scripts/audit_gsc.py portfolio  # just the ranked table
python3 scripts/audit_gsc.py queries --site sc-domain:example.com
python3 scripts/audit_gsc.py --days 90  # quarter over quarter

Flags: --days (window, compared against the window immediately before it), --site (repeatable), --top, --limit, --min-clicks.

Sections and what they mean

Section Read it as
NEW queries with zero clicks last period. Where growth is actually coming from.
RISING up ≥50%. Check whether position moved too — if it didn't, demand rose, not your ranking.
DROPPING down ≥40% off a real base. Position tells you which kind: rank fell = ranking loss; rank held but clicks collapsed = something took the clicks above you (AI Overview, a new SERP feature, or the query changed shape).
LOST ranked before, no data now.
CTR GAP ≥1,500 impressions, top 10, under 2% CTR. Title and description rewrites, the cheapest wins available.

Interpreting

  • Report clicks first, impressions second. One large property can swing portfolio impressions enough to mask that everything else grew.
  • Separate brand from non-brand. A site whose entire keyword set is its own name (or misspellings of a competitor's) has no acquisition engine, however good the click count looks. Say so plainly in the report.
  • A whole-site collapse on its own head term is usually not SEO. Check ownership before diagnosing rankings: whois <domain> | grep -i "registrar\|updated date" plus whether it still resolves. Expired, transferred, or disputed domains produce a textbook ranking cliff that no amount of SEO work will fix.
  • "new" in the portfolio table means zero clicks in the prior window, which for a recently launched site is a launch, not a data gap.
  • Don't skip queries in languages you can't read. On multi-market sites the growth is usually in non-English long tail; translate the interesting ones rather than filtering them out.
  • A property returning 403 is verified for listing but not for search analytics. The script reports it instead of hiding it.

Notes

  • GSC data lags about 3 days; the script offsets for this automatically.
  • Both periods are fetched per property in parallel, so a 40-property account takes seconds.
  • Query rows are capped at 25,000 per period, well above what any single site returns for a 28-day window.
1---
2name: gsc-portfolio-audit
3description: >
4 Audit EVERY Google Search Console property at once — rank all sites by clicks and
5 impressions with period-over-period deltas, then diff keywords per site to surface what
6 is newly ranking, rising, dropping, lost, or ranking well without earning clicks.
7 Built for agencies and multi-site owners. Use when asked to compare all sites, rank
8 properties by traffic, find new keywords across a portfolio, or spot which site is down.
9 Trigger phrases: "audit GSC", "all my sites", "rank my properties", "portfolio search
10 performance", "which sites are down", "what new keywords are we ranking for",
11 "client site performance", "GSC report across accounts".
12 For ONE site's queries, pages, or index coverage, use the search-console skill instead.
13---
14 
15# GSC Portfolio Audit
16 
17Answers "how is everything doing?" across every property on a Search Console account, which is the question the per-site tooling can't answer without dozens of manual exports.
18 
19## Setup
20 
21Requires an OAuth refresh token with `https://www.googleapis.com/auth/webmasters.readonly`:
22 
23```bash
24export GOOGLE_GSC_CLIENT_ID=... # or GOOGLE_CLIENT_ID
25export GOOGLE_GSC_CLIENT_SECRET=... # or GOOGLE_CLIENT_SECRET
26export GOOGLE_REFRESH_TOKEN=...
27export GSC_EXCLUDE="olddomain.com" # optional, comma-separated
28pip install requests
29```
30 
31**The most common setup failure is `unauthorized_client` on token refresh.** It means the refresh token was issued for a different OAuth client than the id/secret you paired with it. Accounts that have added Google integrations over time usually have several clients; match the pair that minted the token.
32 
33## Run it
34 
35```bash
36python3 scripts/audit_gsc.py # full: ranking + keyword diff for the top 12
37python3 scripts/audit_gsc.py portfolio # just the ranked table
38python3 scripts/audit_gsc.py queries --site sc-domain:example.com
39python3 scripts/audit_gsc.py --days 90 # quarter over quarter
40```
41 
42Flags: `--days` (window, compared against the window immediately before it), `--site` (repeatable), `--top`, `--limit`, `--min-clicks`.
43 
44## Sections and what they mean
45 
46| Section | Read it as |
47|---|---|
48| NEW | queries with zero clicks last period. Where growth is actually coming from. |
49| RISING | up ≥50%. Check whether position moved too — if it didn't, demand rose, not your ranking. |
50| DROPPING | down ≥40% off a real base. **Position tells you which kind:** rank fell = ranking loss; rank held but clicks collapsed = something took the clicks above you (AI Overview, a new SERP feature, or the query changed shape). |
51| LOST | ranked before, no data now. |
52| CTR GAP | ≥1,500 impressions, top 10, under 2% CTR. Title and description rewrites, the cheapest wins available. |
53 
54## Interpreting
55 
56- **Report clicks first, impressions second.** One large property can swing portfolio impressions enough to mask that everything else grew.
57- **Separate brand from non-brand.** A site whose entire keyword set is its own name (or misspellings of a competitor's) has no acquisition engine, however good the click count looks. Say so plainly in the report.
58- **A whole-site collapse on its own head term is usually not SEO.** Check ownership before diagnosing rankings: `whois <domain> | grep -i "registrar\|updated date"` plus whether it still resolves. Expired, transferred, or disputed domains produce a textbook ranking cliff that no amount of SEO work will fix.
59- **"new" in the portfolio table means zero clicks in the prior window**, which for a recently launched site is a launch, not a data gap.
60- **Don't skip queries in languages you can't read.** On multi-market sites the growth is usually in non-English long tail; translate the interesting ones rather than filtering them out.
61- A property returning 403 is verified for listing but not for search analytics. The script reports it instead of hiding it.
62 
63## Notes
64 
65- GSC data lags about 3 days; the script offsets for this automatically.
66- Both periods are fetched per property in parallel, so a 40-property account takes seconds.
67- Query rows are capped at 25,000 per period, well above what any single site returns for a 28-day window.
68 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 705
Checked
Source
OpenClaudia/openclaudia-skills ↗
Creator
OpenClaudia · 78 listings
View creator

Similar skills

See all →
AgentTrading Strategy Builderwshobson/agents · by wshobsonBuild financial models, backtest trading strategies, and analyze market data. Implements risk metrics, portfolio optimization, and statistical arbitrage. Use PROACTIVELY for quantitative finance, trading algorithms, or risk analysis.★ 39.9k GitHub starsAgentPortfolio Risk Managerwshobson/agents · by wshobsonMonitor portfolio risk, R-multiples, and position limits. Creates hedging strategies, calculates expectancy, and implements stop-losses. Use PROACTIVELY for risk assessment, trade tracking, or portfolio protection.★ 39.9k GitHub starsSkillInteractive Portfolio Builderdavila7/claude-code-templates · by davila7Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities. Use when: portfolio, personal website, showcase work, developer portfolio, designer portfolio.★ 32.3k GitHub starsAgentQuantitative Finance AnalystVoltAgent/awesome-claude-code-subagents · by VoltAgentUse this agent when you need to develop quantitative trading strategies, build financial models with rigorous mathematical foundations, or conduct advanced risk analytics for derivatives and portfolios. Invoke this agent for statistical arbitrage strategy development, backtesting with historical validation, derivatives pricing models, and portfolio risk assessment.★ 25.2k GitHub starsSkillHyperliquid Market Readerhimself65/finance-skills · by himself65Read Hyperliquid (app.hyperliquid.xyz) perp + spot market data via opencli (read-only, public info API). Use whenever the user wants Hyperliquid perpetual or spot markets, mark/oracle/mid prices, 24h change, funding rates (hourly or annualized APR), open interest, volume, the L2 order book, OHLCV candles, historical funding, or a cross-venue funding comparison (Hyperliquid vs Binance vs Bybit) for funding arbitrage. Triggers: "Hyperliquid funding for BTC", "HL perp markets", funding on BTC perp", "Hyperliquid order book", "HL open interest", funding arb Hyperliquid vs Binance", "Hyperliquid candles for SOL", Hyperliquid spot markets", "PURR price on Hyperliquid", "hyperliquid", hyperliquid.xyz", "HL DEX". READ-ONLY market data — no account, order, or trade operations.★ 3.3k GitHub starsSkillTradingView Market Datahimself65/finance-skills · by himself65Query TradingView market data through the bundled tradingview MCP server without a desktop app or login. Use whenever the user wants a technical analysis readout (RSI, MACD, Bollinger rating, BUY/SELL summary), multi-timeframe alignment (weekly→daily→4h→1h→15m), exchange-wide scans (Bollinger squeeze, volume breakout, consecutive candles, smart volume), top gainers/losers by exchange, futures market data (NQ/ES/CL/GC overview, overnight movers, category snapshots), pre-market / after-hours quotes, a quick options chain or unusual options activity (volume/OI by strike), bulk stock prices, a global market snapshot, strategy backtests (Sharpe, drawdown, win rate), or crypto exchange scans. Triggers include "TA on X", "multi-timeframe read", "BB squeeze scan", "futures movers", "NQ overnight", "pre-market price", "unusual options activity", "backtest RSI on AAPL", and "top gainers on NASDAQ". For options greeks, watchlists, alerts, or chart screenshots use tradingview-reader instead.★ 3.3k GitHub stars

More from OpenClaudia

SkillA/B Testing FrameworkOpenClaudia/openclaudia-skills · by OpenClaudiaDesign, plan, and analyze A/B tests with statistical rigor. Use when the user asks about A/B testing, split testing, experiment design, statistical significance, sample size calculation, test duration, multivariate testing, or conversion experiments. Trigger phrases include "A/B test", "split test", "experiment", "statistical significance", "sample size", "test duration", "which version wins", "conversion experiment", "hypothesis test", "variant testing".★ 705 GitHub starsSkillAffiliate Marketing ProgramOpenClaudia/openclaudia-skills · by OpenClaudiaBuild and manage an affiliate marketing program. Use when the user says "affiliate program", "affiliate marketing", "affiliate partners", "referral commissions", "affiliate network", "partner program", "affiliate tracking", or asks about creating, managing, or growing an affiliate or partner program.★ 705 GitHub starsSkillAhrefs API ManagerOpenClaudia/openclaudia-skills · by OpenClaudiaManages Ahrefs API usage in Python using `ahrefs-python` library. Use when working with SEO / marketing related tasks or with data including backlinks, keywords, domain ratings, organic traffic, site audits, rank tracking, and brand monitoring. Covers `ahrefs-python` usage including AhrefsClient / AsyncAhrefsClient, typed request/response models, error handling, and all API sections.★ 705 GitHub starsSkillAI Citations Report GeneratorOpenClaudia/openclaudia-skills · by OpenClaudiaGenerate an AI Citations Report (GEO) for a domain — which AI-search prompts cite the site across Google AI Overview and ChatGPT, plus organic-traffic context and per-article citation coverage. Use when the user asks for an 'AI citations report', 'GEO citations report', or 'which AI prompts cite <domain>'.★ 705 GitHub starsSkillB2B Lead EnricherOpenClaudia/openclaudia-skills · by OpenClaudiaResearch and enrich B2B leads using the Apollo.io API. Use when the user says "find leads", "prospect research", "company enrichment", "find decision makers", "B2B leads", "lead research", "enrich contacts", "find VP of marketing at", or asks about finding people at specific companies or in specific roles.★ 705 GitHub starsSkillBacklink Health CheckerOpenClaudia/openclaudia-skills · by OpenClaudiaAudit a domain's backlink profile using the SemRush API. Use when the user says "audit backlinks", "check my backlinks", "backlink analysis", "link profile", "toxic links", "disavow", "link building opportunities", "referring domains", "anchor text", or asks about a site's link authority.★ 705 GitHub stars