AugmentClaude

Google Search Console

Identify pitfalls in Google Search Console API queries to avoid silent errors.

Installation

  1. Make sure Claude is on your device and in your terminal.

    Skills load from ~/.claude/skills/ when Claude Code starts up β€” so you need it on your machine first. If you don't have it yet, install it once with the command below, then run claude in any terminal to verify.

    One-time setup
    npm i -g @anthropic-ai/claude-code

    Already have it? Skip ahead.

  2. Paste into Claude Code or into your terminal.

    This copies the whole skill folder into ~/.claude/skills/google-search-console-superdesigndev/ β€” the SKILL.md plus any scripts, reference docs, or templates the skill ships with. Safe default: works for every skill.

    Faster alternative (instruction-only skills)

    Skips the clone and grabs only the SKILL.md file. Don't use this if the skill ships Python scripts, reference markdowns, or asset templates β€” they won't be downloaded and the skill will fail when it tries to load them.

    Quick install (SKILL.md only)
    Sign up to copy
  3. Restart Claude Code.

    Quit and reopen Claude Code (or any other agent that loads from ~/.claude/skills/). New skills are picked up on startup.

  4. Just ask Claude.

    Skills auto-activate when your request matches the skill's description β€” no slash command needed. Trigger phrases live in the skill's own frontmatter; you can read them in the β€œWhat this skill does” section above.

Prefer to read the source first? Open on GitHub.

When Claude uses it

Traps to avoid when querying Google Search Console through treg β€” cases where the API returns a confident wrong answer instead of an error, especially around totals and recent-date trends. Use whenever answering questions about organic search clicks, impressions, rankings, or index status.

What this skill does

Search Console via treg β€” what will silently mislead you

You already know the Search Console API. This file is only the things that return a plausible wrong answer with no error. Verified live on 2026-07-22 against sc-domain:example.com, with each trap confirmed by watching three independent agents.

Site id: treg connections ls β†’ resource_ref. If it's empty, no site is pinned β€” list them with treg connections resources <id> and say which one you chose and why. Don't present an inferred site as configured, and don't report the blank as a fault β€” it isn't one.

When nothing is pinned and the question doesn't name a site, pick the site whose domain matches the question and state that you inferred it. Note that subdomains are separate properties, so sc-domain:example.com and sc-domain:app.example.com are different answers β€” say which you used.

1. Recent days are incomplete β€” do not report them as a trend

3 of 3 agents concluded "organic traffic is down ~47%". It wasn't.

GSC lags ~2–3 days and simply omits missing days β€” a 14-day request returns 11–12 rows with no warning. Worse, the newest present days read low. The tail looked like this:

07-15: 640   07-16: 610   07-17: 500   07-18: 520   07-19: 430   ← last 3 days incomplete

Cross-checked against GA4 organic sessions for the same dates, the decline does not exist β€” and GA4 shows 07-20 and 07-21 recovering to 746 and 849, days GSC hasn't reported at all.

Two rules:

  • End ranges β‰₯3 days before today, and never start a window on a local peak.
  • Before calling any GSC trend real, cross-check GA4 organic sessions for the same dates. Two independent sources disagreeing means the GSC tail is an artifact.

2. Dimension sums do NOT equal site totals

Illustrative (the point is that dimension sums miss the true total, not the absolutes):

Grouped byRowsImpressionsvs true total
query4,219~31% β€” loses ~69%
page1,161~151% β€” overcounts ~51%
date28(true total)100% βœ…
(none)1(true total)100% βœ…

query undercounts because Google drops anonymised rare queries; page overcounts because one SERP impression showing several of your pages counts once per page. (Numbers measured; mechanisms are the standard explanation, not measured.)

Never sum a dimension to report a total β€” especially for "how much traffic do my top queries drive?", where summing understates organic traffic by ~69% with total confidence.

3. searchAppearance cannot be combined with any other dimension

Fails loudly with a 400: "Cannot group by search appearance dimension together with another dimension." Query it alone β€” and note that a sparse result there is a correct answer, not a bug.

4. Two API surfaces on one host

  • webmasters/v3/... β€” search analytics, sitemaps
  • v1/urlInspection/index:inspect β€” URL Inspection

Guessing webmasters/v3/urlInspection/... returns a Google HTML 404, not a JSON error. Two of three agents hit this. The HTML-vs-JSON tell is worth knowing generally: HTML means the path never routed.

Everything else

Standard API. ctr is a fraction (0.0882 = 8.82%); position is an average, so don't average it across rows. rowLimit accepts 25000 (default reported as 1000 β€” unverified). Sitemap contents[].indexed returned "0" for a fully-indexed site with 1,079 URLs β€” use URL Inspection for real index status. Subdomains are separate properties.

Both sc-domain:example.com and sc-domain%3Aexample.com work in the path β€” verified via the audit log. Encoding is optional; don't debug a 403 by adding it.

⚠️ Unverified: URL-prefix properties (https://example.com/, trailing slash) β€” none available to test. A 403 is reported to usually mean the wrong property form rather than missing permission.

Writes (PUT/DELETE on sitemaps) change what Google crawls. Untested by design β€” get an explicit target and human go-ahead first.

Related skills