Ch 19 — Search Console internals & APIs¶
Part VII — Measurement & diagnosis · The Technical SEO Reference
Playbook coupling:
seo-checklist.mduses GSC throughout but covers it as a product in two lines — property type choice + takeover permissions audit (Phase 1, line 73) and the monthly review cadence (Phase 7, line 206). This chapter is the connective tissue every other chapter assumes: property scoping and why data differs, verification-token hygiene, UI data limits, the three programmatic escapes (Search Console API, URL Inspection API, Bulk Data Export), and the 2026 platform properties.
Search Console is the book's measurement instrument, and instruments have calibration rules. The three that matter most: scope (what a property does and doesn't include decides what every report shows), limits (the UI truncates; the escapes are API and BigQuery), and ownership (verification tokens are credentials — auditable, revocable, and a documented hack-persistence vector).
19.1 Property types — scope decides your data¶
🟢 From the property types help, fetched live:
- Domain property: "Includes all subdomains (m, www, and so on) and multiple protocols (http, https, ftp)." Verification: "DNS record verification only" (Google-hosted exceptions aside).
- URL-prefix property: "Includes only URLs with the specified prefix, including the protocol." Many verification methods.
- The worked example: domain property example.com includes https://example.com/…, http://www.example.com/…, even http://support.m.example.com/…; URL-prefix http://example.com/ excludes the https and www variants entirely.
- 🟢 Choice doctrine: domain "if you want your property to match any protocol or subdomain"; URL-prefix "if you need to limit your data by URL path segments or by protocol."
⚠️ Practical consequences the help page doesn't spell out (⚪, derived from scope): a URL-prefix property silently under-reports anything living on other variants (the classic "our traffic halved" that's actually a protocol migration moving data to the other property); path-scoped prefix properties are the only way to get section-level isolation (e.g. /blog/); migrations need all variants verified (→ Ch 16 §16.6–16.7 — the CoA tool is domain-level and doesn't move subdomains); and site-reputation-abuse containment analysis wants a path-scoped property per leased section (→ Ch 18 §18.3).
19.2 Verification, tokens, and ownership hygiene¶
- 🟢 Verification methods create durable tokens (HTML file, meta tag, DNS record, GA/GTM snippet). ⚠️ Removing a user without removing their token doesn't lock them out — they re-verify. The Japanese-keyword-hack persistence trick is exactly this (→ Ch 17 §17.7): 🟢 "If you've received a notification that someone you don't know has verified your site in Google Search Console, there's a strong possibility that your site has been hacked" (web.dev, fixing the Japanese keyword hack, verified live).
- The audit (playbook line 73, expanded): Settings → Users and permissions (remove departed people/agencies) and Settings → ownership verification (remove their tokens: stray HTML files, meta tags, DNS TXT records). On takeovers, do both on day one.
- 🟢 Access tiers (managing owners, users, and permissions, fetched live): Owner ("full control… can add and remove other users, configure settings, view all data, and use all tools" — verified vs delegated owners have identical powers; delegated owners hold no token), Full user ("view rights to all data and can take some actions"), Restricted user ("simple view rights on most data"), plus Associates (act on the site's behalf without Search Console access). ⚪ Grant agencies Full, not Owner, unless they genuinely need settings control.
19.3 UI data limits — where the interface stops¶
- 🟢 The Performance report UI's 1,000-row table cap: "The table is limited to 1,000 rows, which can limit the amount of data shown" — and the truncation happens before the report ("The data is truncated to 1,000 rows before it reaches this report"), so re-sorting won't surface row 1,001 (Discover performance help, fetched live; same cap across the performance reports). 🟢 16-month retention: the Date filter's maximum window is "Last 16 months" — Google's own drop-debugging procedure says "Choose the Date filter on top of the chart and select Last 16 months" (debugging traffic drops, 2025-12-10); the playbook's Phase 7 method rides on it. ⚪ Filters are contains/regex per dimension.
- ⚠️ Anonymized queries: 🟢 "Some queries are omitted from the report to protect user privacy. These are called anonymized queries" (dimensions & data groupings, fetched live) — query-dimension totals < overall totals, always. Not a bug; a floor on query-level analysis that only Bulk Export acknowledges explicitly: 🟢 its table schema carries an
is_anonymized_queryboolean, withquerynull when true (table reference, fetched live). - ⚠️ Sampling/aggregation quirks by report: rich-result reports sample items (→ Ch 12 §12.10); CWV groups URLs (→ Ch 15 §15.3); the video report counts pages not videos (→ Ch 14 §14.14). Reading any GSC number without knowing its report's counting rule is how audits invent problems.
19.4 The three programmatic escapes¶
🟢 Quotas from the API limits page (2025-08-28, fetched live):
| Interface | What it unlocks | Limits |
|---|---|---|
| Search Analytics API | Row limits far beyond the UI's 1,000 (paginated), full dimension combinations, scripted pulls | Per-site & per-user 1,200 QPM; per-project 40,000 QPM / 30M QPD |
| URL Inspection API | Programmatic index status: verdict, canonical (Google-selected vs declared), last crawl, robots/indexing state — audit-scale inspection | ⚠️ Per-site 2,000/day, 600 QPM (per-project 10M QPD) — 2,000/day sizes your daily audit batch per property |
| Bulk Data Export → BigQuery (help, fetched live) | The full-fidelity feed: no row caps, anonymized-query accounting, joinable with logs/CrUX | Requires Cloud project with billing + BigQuery APIs; grant search-console-data-export@system.gserviceaccount.com BigQuery Job User + Data Editor; first export "up to 48 hours" after setup; ⚠️ not retroactive — "If you want to see historical data that precedes your initial setup, use the Search Console API or the reports"; "Data will be accumulated forever… unless you set an expiration time" (subject to storage/query costs; partition expiration ≥14 days) |
⚪ Selection rule: UI for triage; API for recurring reports and audit tooling; Bulk Export for any property where query-level completeness or long history matters — and because it's not retroactive, switch it on the day a serious engagement starts (log pipeline integration → Ch 20).
19.5 Platform properties (July 2026) — canonical home¶
🟢 Announced Jul 7, 2026, globally available Jul 29, 2026 (with a companion analysis guide): "platform properties" is a new Search Console property type letting site owners and creators — including those without a website — see how social/video content performs on Google surfaces. Exactly four platforms: 🟢 "Search Console supports the following platforms: Instagram, TikTok, X, YouTube" (About platform properties, fetched live). Three reports per that help doc: Performance ("total clicks, impressions, average click-through rate (CTR), and average search position," filterable by post, across Google Search, Discover, and Google News), Insights (recent traffic trends, top-performing content), and Achievements (growth/milestones). ⚠️ Scope discipline — 🟢 verbatim: "Platform properties only show how your content performs on Google Search. They don't track when people see your content on the platform itself (for example, they won't show how many times your video appeared on TikTok)." For the portfolio: brand-satellite social accounts' Google visibility becomes measurable first-party data (relevant to entity-consistency work → Ch 13, reviews/ context).
19.6 GSC report inventory — pointer map¶
The reports themselves live with their subject matter; this is the dispatch table the book's chapters hang off:
| Report | Chapter home |
|---|---|
| Crawl Stats | Ch 2 §2.7 |
| robots.txt report | Ch 3 |
| Page indexing (full status taxonomy) | Ch 7 |
| Sitemaps | Ch 9 |
| Removals | Ch 7 §7.8 / Ch 14 §14.9 |
| Rich result / enhancement reports | Ch 12 §12.10 |
| Core Web Vitals + HTTPS | Ch 15 §15.3 / Ch 17 §17.4 |
| Video indexing | Ch 14 §14.14 |
| Security Issues | Ch 17 §17.6 |
| Manual Actions | Ch 18 §18.2 |
| Performance (+ Branded queries filter, Search Generative AI reports) | Ch 21 + playbook Phases 6–7 |
| Change of Address | Ch 16 §16.7 |
| Platform properties | §19.5 |
Symptoms & diagnosis¶
| Symptom | Likely cause | Where |
|---|---|---|
| "Traffic halved" after HTTPS/www change | URL-prefix property scoped to the old variant | §19.1 |
| Query report totals ≪ overall totals | Anonymized queries — structural, not a bug | §19.3 |
| Ex-agency still has access after user removal | Their verification token survived | §19.2 |
| Audit script dying at ~2k inspections | URL Inspection API per-site daily quota | §19.4 |
| BigQuery export missing last year's data | Bulk Export isn't retroactive | §19.4 |
| Section-level analysis impossible in a domain property | Add a path-scoped URL-prefix property alongside | §19.1 |
| Unknown owner appears in GSC | Hack persistence — incident response | §19.2, Ch 17 |
Sources¶
Fetched live 2026-08-04 by the drafter; re-verified live 2026-08-04 by the V2 auditor:
- Property types · Bulk Data Export · API usage limits (2025-08-28)
- V2 additions (fetched 2026-08-04): Performance report, Discover (1,000-row cap) · Dimensions & data groupings (anonymized queries) · Bulk-export table reference (is_anonymized_query) · Owners, users & permissions (access tiers) · About platform properties (platforms, reports, on-Google scope) · I don't recognize this new owner · web.dev Japanese keyword hack (verification-persistence quote)
- Platform properties dates (Jul 7 announcement / Jul 29 global): Search Central Blog posts search-console-social-video-platforms and platform-properties-social-video-guide (dates corroborated by trade coverage; blog bodies did not render to the V2 fetcher — report names and scope quote pinned to the help doc instead)
- V2 items resolved 2026-08-04: 1,000-row + 16-month pinned to exact sentences; access-tier wording quoted; is_anonymized_query confirmed against the table reference; §19.5 report list corrected to Performance / Insights / Achievements per the help doc