google-search-console
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.
git clone --depth 1 https://github.com/superdesigndev/treg /tmp/google-search-console && cp -r /tmp/google-search-console/.agents/skills/google-search-console ~/.claude/skills/google-search-consoleSKILL.md
# 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 by | Rows | Impressions | vs true total | |---|---|---|---| | `query` | 4,219 | | **~31%** — loses ~69% | | `page` | 1,161 | | **~151%** — overcounts ~51% | | `date` | 28 | (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. - Search Analytics query: https://developers.google.com/webmaster-tools/v1/searchanalytics/query - URL Inspection: https://developers.google.com/webmaster-tools/v1/urlInspection.index/inspect - Freshness & anonymisation: https://support.google.com/webmasters/answer/7576553
Add a provider to treg's OAuth registry (the ones treg holds its own approved app for). Use when asked to "add YouTube/Notion/Meta OAuth", "support connecting X", "add a new OAuth provider", or when a connect flow, capability picker, channel/account picker, or provider health probe needs building. Covers the code changes, the platform-side approval steps, and the pitfalls that don't announce themselves.
Use when setting up, changing or debugging treg's own conversion tracking — the ad-click capture, the AdConversion outbox, or the Data Manager uploader — and whenever asked whether conversions are "working", "live" or "verified". Also use before claiming any part of the pipeline is proven.
One-command local dev stack for tools-registry. Use when asked to "start the dev server", "run treg locally", "test login locally", "bring the stack up", or before any manual/browser test against localhost.
Traps when running Google Ads through treg — the API requirements and cleanup semantics that cost round-trips or money. Use whenever asked to analyse ad performance, audit spend, create or change campaigns, adjust budgets or bids, or do media buying.
Traps to avoid when querying Google Analytics 4 through treg — cases where the GA4 Data API returns a confident wrong answer instead of an error. Use whenever answering questions about site traffic, visitors, pageviews, channels, conversions, or revenue from GA4.
tools-registry context + doc upkeep. Use to warm up a fresh session (orient on the architecture + recent commits) or when working on tools-registry — changing code, rules, content, data, or process (proxy · auth/secrets · API · CLI · the registry skill) — loads the relevant fragment(s) from docs/context so you act with accurate, cited context. Accepts an optional focus query (e.g. `/tools-registry-context <area>`). Also runs `/tools-registry-context sync` to update the doc fragments after changes (show → approve → apply). Mention it whenever a push to the main branch is near.
Write a treg.to agent page (/agents/<client>) or use-case page (/use-cases/<category>/<job>). Researches the real problem on Reddit and X with agent-reach BEFORE writing, so the page targets the words buyers actually use and quotes their own questions. Use when adding a page from marketing/pseo-ship-plan.md, or when asked to "write the <job> page" / "add the <agent> page".
Build a treg provider skill — the endpoint map + mistake map that lets an agent do real work on a platform API through treg's proxy. Use when adding a skill for a connected provider (Google Ads, LinkedIn, Meta Ads, TikTok, X, Instagram, Search Console), or when an existing provider skill needs verifying or extending.