Skip to main content
Glama

SEO GSC Wizard MCP

Server Details

Ask your Search Console data in plain language and get real numbers, not guesses. The GSC Wizard MCP plugs your live Google Search Console data straight into Claude, ChatGPT, and any MCP-capable assistant - so the model reads your actual clicks, impressions, position and CTR instead of inventing them.

Ownership verified
Status
Healthy
Uptime
30.6% over 78 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
GSC Wizard - SEO analysis
Claude
–

TDQS

A3.9/5.0

Scored across 131 tools

Disambiguation4/5

Despite the enormous surface area, tool descriptions are unusually explicit about boundaries, repeatedly adding 'Not for X: use Y' cross-references. A few clusters still risk misselection, e.g. get_site_summary vs get_cross_site_summary vs get_tag_group_view vs generate_seo_report, and compare_migration vs get_migration_health, but most overlaps are clearly signposted.

Naming Consistency4/5

Names are overwhelmingly snake_case with a verb-first pattern (get_, list_, query_, create_, update_, delete_, analyze_, detect_). There are minor deviations such as bulk_inspect_urls, check_tracked_url_now, and manage_tags, but the convention remains predictable throughout.

Tool Count1/5

131 tools far exceeds any reasonable single-server scope and creates a very large surface an agent must navigate. Even with strong descriptions, this is an extreme mismatch for the stated purpose.

Completeness5/5

The surface is exceptionally complete across Google Search Console, Bing, Yandex, GA4, Merchant Center, indexing, sitemaps, migrations, annotations, saved filters, reports, and account/property management. CRUD and lifecycle operations are broadly covered with few obvious dead ends.

Available Tools

131 tools
add_migration_redirectsAdd migration redirect mappingsAInspect

Saves redirect mappings (old URL -> new URL) for a site migration, tied to the source property A and target property B they move traffic between. These back the Migration Compare workflow: use compare_migration for the before/after performance read, and these mappings to record which old URL became which new one. Pass label to keep several migrations apart on one account. Rows are APPENDED, never deduplicated against what is already stored, so re-sending the same list stores it twice; clear a set first with delete_migration_redirects if you are re-uploading.

NameRequiredDescriptionDefault
labelNoGroups this batch, e.g. "2026-blog-restructure". Also what delete targets.
siteUrlAYesSource property (the old site), as registered in GSC.
siteUrlBYesTarget property (the new site), as registered in GSC.
redirectsYes

Output Schema

NameRequiredDescription
labelNo
skippedNo
insertedNo
siteUrlANo
siteUrlBNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false, which the append semantics are consistent with. The description adds the genuinely non-obvious behavior: rows are APPENDED and never deduplicated, so re-sending the same list stores it twice. That is exactly the kind of side-effect disclosure annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all load-bearing: purpose, workflow relationship, and the append caveat. The purpose and the alternative routing are front-loaded. Minor slack only — the workflow sentence is slightly verbose relative to the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating batch tool with an output schema present (so return values need no explanation), the description covers purpose, selection, grouping via `label`, and the append/duplicate hazard. It omits the 10,000-item batch cap in `redirects` and any permission/auth expectations, which keeps it short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 75%, the schema already explains each field, and the description adds conceptual meaning by defining A as source and B as target and explaining that `label` keeps several migrations apart on one account. It does not add syntax-level detail beyond that, so it lands just above the baseline rather than at the top.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Saves redirect mappings (old URL -> new URL) for a site migration') and pins the scope to the source/target property pair. It clearly separates this write tool from compare_migration (the read) and delete_migration_redirects (the clear), so an agent can distinguish it from siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to reach for this tool versus alternatives ('use compare_migration for the before/after performance read, and these mappings to record which old URL became which new one') and names the prerequisite cleanup path ('clear a set first with delete_migration_redirects if you are re-uploading'). Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_siteAdd a property to GSC WizardAInspect

Registers a GSC property the user already has access to (in Google Search Console) inside GSC Wizard. The property URL must appear in Search Console and be VERIFIED for the connected Google account: an unverified property is rejected, because Google refuses every data request for one. It is not provisioned by this call. Pass a URL prefix (https://example.com/) or a domain property (sc-domain:example.com); the scheme and host are matched case-insensitively and a missing trailing slash is added. Adding a property that is already registered is not an error: the result has alreadyRegistered: true and the existing row (with activated, as in list_sites).

NameRequiredDescriptionDefault
tagsNo
siteUrlYes

Output Schema

NameRequiredDescription
siteNo
messageNo
accountRepairedNo
alreadyRegisteredNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly=false, destructive=false, openWorld=true); the description adds meaningful behavior beyond them: rejection semantics for unverified properties, idempotent success with alreadyRegistered: true, and URL normalization (case-insensitive scheme/host, trailing slash added). This is exactly the extra context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the key precondition are front-loaded, and each sentence carries distinct information (precondition, non-provisioning, URL formats, idempotency). It is slightly dense, but there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description still notes alreadyRegistered for the idempotent case. The one real gap is the undocumented `tags` parameter, which an agent would have to guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It thoroughly documents siteUrl (URL prefix vs sc-domain form, case-insensitivity, trailing-slash normalization), but the second parameter `tags` is never mentioned, leaving it undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (registers) and resource (a GSC property the user already has access to) inside GSC Wizard, and explicitly contrasts it with provisioning ('It is not provisioned by this call'), which cleanly separates it from create_gsc_property. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions: the property must already appear in Search Console and be VERIFIED for the connected account, and an unverified property is rejected. It also explains idempotent behavior when the property is already registered. It stops short of explicitly naming an alternative tool (e.g., create_gsc_property) for unverified or new properties.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_tracked_urlsAdd URLs to the indexing trackerAInspect

Adds URLs to the GSC Wizard Indexing Tracker for a property, creating the tracker if it does not exist yet. Each URL must belong to the property's domain. Enforces the 1,800-URL-per-tracker cap (URLs over the cap are skipped and reported). Newly added URLs start as "pending"; call check_tracked_url_now to inspect them immediately, or wait for the app's hourly cron.

NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

NameRequiredDescription
addedNo
siteUrlNo
requestedNo
trackerIdNo
alreadyTrackedNo
skippedOverCapNo
capacityRemainingNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write access and open-world behavior, but the description adds substantial non-obvious behavior: tracker auto-creation, domain ownership requirement, the 1,800-URL cap with skipped-and-reported overflow behavior, and initial 'pending' status. This is rich disclosure beyond the annotations, with no contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core action and side effect, then constraints, then next-step guidance. Every sentence adds useful information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the description still explains key operational behavior: auto-creation, domain constraint, cap enforcement, overflow reporting, and pending state. Together with annotations, an agent has what it needs to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate for both parameters. It implies that siteUrl identifies the property and that urls must belong to that property's domain, and explains the 1,800-URL limit, but it does not define the exact expected format or source for siteUrl, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: adds URLs to the GSC Wizard Indexing Tracker for a property, including tracker auto-creation. It is clearly distinguishable from siblings like list_tracked_urls, remove_tracked_urls, and check_tracked_url_now.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for using this tool to populate the indexing tracker, and explicitly routes the agent to check_tracked_url_now for immediate inspection or to the hourly cron for later checks. It does not, however, compare against other sibling URL-submission tools such as submit_indexnow_urls or bulk_inspect_urls, or state when not to add URLs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_cannibalizationAnalyze keyword cannibalizationA
Read-only
Inspect

Use this when the user asks whether several of their pages compete for the same query: finds such queries, ranked by a cannibalization score (Shannon entropy over the pages' impressions: higher means impressions split more evenly across pages, i.e. worse cannibalization), highest first, then by totalImpressions; each query's pages run most impressions first (page ctr is a 0-100 percentage). Not for a plain page-by-query table: use query_search_analytics. Only queries Google lists are analysed: on most properties a large share of clicks has no query row (analyze_sampling_impact measures it). Served from the GSC Wizard ClickHouse warehouse when available: it keeps only queries ranked by at least two pages before any cut, then scores them most impressions first, up to 10,000 queries or 25,000 page-query rows, whichever comes first. Each query lists at most 50 pages there; pageCount always covers every competing page, and the score is taken over the listed ones. totalClicks and totalImpressions are the query's own figures from Search Console's query view (on both sources), where a search showing two of the pages counts once, so they can be below the sum of the pages' figures, which count it once per page; minImpressions applies to the query's own figure. Otherwise the live Search Console API (see dataSource) reads the top 25,000 page-query rows by clicks, which drops zero-click competing pages first. truncated: true means the cut was hit; scanLimit is that cut (on the warehouse, the number of queries scored when truncated, else the query cap; on the live API, page-query rows). minImpressions defaults to 10; when it is left out and no query qualifies, the tool retries once at 1 on its own and says so in minImpressionsAutoRelaxed (minImpressions is always the floor applied). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
minImpressionsNoMinimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given.

Output Schema

NameRequiredDescription
noteNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
scanLimitNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
partialDaysNo
cannibalizedNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
minImpressionsNo
settledThroughNo
warehouseLatestDateNo
minImpressionsAutoRelaxedNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld/non-destructive, and the description goes well beyond that: it discloses the two data sources (ClickHouse warehouse vs live Search Console API), each one's cut (10,000 queries / 25,000 page-query rows vs top 25,000 rows by clicks), the 50-page cap with pageCount covering unlisted pages, and the one-shot minImpressions relaxation reported via minImpressionsAutoRelaxed. It stops short of stating auth/permission requirements or expected latency, so it is not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly — purpose and ranking semantics come first, operational caveats after. But it is a single dense paragraph that partly duplicates schema text (minImpressions default of 10 and the auto-relax rule, the 28-day default window) and buries the warehouse-vs-live-API distinction mid-sentence, making it harder to scan than its content warrants.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with an output schema, this is more than complete: it explains the score's meaning, the per-page ordering, ctr as 0-100, the truncated/scanLimit semantics, and the known under-count of totalClicks/totalImpressions relative to page sums. Nothing an agent needs to call it correctly or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description fills the important gaps: minImpressions applies to the query's own figure (not the sum of page figures), defaults to 10, and is auto-relaxed to 1 when nothing qualifies; date range is optional with a 28-day settled default. `limit` is never explained in either the description or the schema, which is the one remaining hole.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific trigger and verb+resource: 'Use this when the user asks whether several of their pages compete for the same query', and immediately defines the output ordering (cannibalization score from Shannon entropy over impressions, highest first, then totalImpressions). It explicitly names the sibling it is not (query_search_analytics), so the agent can disambiguate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('whether several of their pages compete for the same query'), explicit when-not ('Not for a plain page-by-query table: use query_search_analytics'), and routes a related question to a third tool ('analyze_sampling_impact measures it'). Also states the default date window and that omitting dates is the normal path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_ctr_curveAnalyze CTR-by-position curveA
Read-only
Inspect

Use this when the user asks whether their CTR is normal for where they rank: builds the property's actual CTR curve by average position (buckets 1 to 20, in that order; a bucket with queryCount 0 has no data) and compares each bucket to one or more industry benchmarks. Not for which queries to work on: use find_page_poaching_opportunities. Only queries Google lists are measured (on most properties a large share of clicks has no query row; analyze_sampling_impact measures it), so bucket CTRs are of visible queries. Available sources: awr (Advanced Web Ranking 2026), awr2026 (AWR 2026 CTR study, organic across all SERPs), awrAio (same study, SERPs carrying an AI Overview), firstPageSage (First Page Sage 2026), sistrix (Sistrix 2024), backlinko (Backlinko 2019), or "all" (default, every source at once). Comparing awr2026 with awrAio is the AI Overview click tax for that position. Each bucket carries benchmarks (expected CTR per source) and deltas (actual minus expected; negative = underperforming), plus flat expectedCtr/ctrDelta when a single source is selected. CTR values are percentages (0-100); deltas are percentage points. Served from the GSC Wizard ClickHouse warehouse when available, where every query in the window is measured; otherwise the live Search Console API (see dataSource), which returns only the top 25,000 queries by clicks. truncated: true means that cut was hit: zero-click queries are dropped first, so bucket CTRs read HIGH, not low. scanLimit is the cut applied (null on the warehouse, which has none). minImpressions defaults to 10; when it is left out and no bucket holds a query, the tool retries once at 1 on its own and says so in minImpressionsAutoRelaxed (minImpressions is always the floor applied). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
minImpressionsNoMinimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given.
benchmarkSourceNoall

Output Schema

NameRequiredDescription
noteNo
rangeNo
thenByNo
bucketsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
sourcesNo
warningNo
nextStepNo
orderingNo
sortedByNo
scanLimitNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
minImpressionsNo
settledThroughNo
benchmarkSourceNo
warehouseLatestDateNo
minImpressionsAutoRelaxedNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description does add real behavioral context beyond that, but the vast majority of its extra text (bucket fields, deltas sign, percentage units, truncated/scanLimit flags) describes return-value semantics rather than invocation behavior — and return values are already covered by the existing output schema, which lowers the incremental value here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

All the content is useful, but it is delivered as a single dense run-on paragraph of roughly 250 words with no structure, and the minImpressions default/retry explanation partly repeats the schema description verbatim. The usage trigger is front-loaded, which helps, but readers must wade through return-field commentary to find it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with six parameters, two enums, dual data-source paths and an output schema, the description covers data source, truncation behavior, sampling caveats and date defaults well. Remaining gaps are minor, e.g. no note on expected response size or latency for the live-API fallback.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and one enum in particular, benchmarkSource, carries no schema description at all; the description compensates by spelling out each source (awr, awr2026, awrAio, firstPageSage, sistrix, backlinko, 'all') and the awr2026-vs-awrAio comparison being the AI Overview click tax. It also clarifies minImpressions auto-relax behavior and the date-range default, though it does not add anything for siteUrl.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb-and-resource pair: builds the property's CTR curve by average position in buckets 1-20 and compares each bucket against industry benchmarks. It also explicitly contrasts itself with siblings (find_page_poaching_opportunities for which queries to work on, analyze_sampling_impact for click coverage), so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the triggering user question ('whether their CTR is normal for where they rank') and gives an explicit exclusion with the correct alternative named. It further clarifies which measurements this tool does and does not cover by pointing to analyze_sampling_impact.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_query_shapesQuery shape analysis (AI Mode fingerprints)A
Read-only
Inspect

Use this when the user asks whether AI Overviews / AI Mode fan-out shows in a property's queries: classifies them by SHAPE (the app's Query Analysis report). Not for change over time: use get_query_shape_trend. Buckets: reply artefacts ("yes", "show me"), pivot follow-ups ("what about gemini"), conversational questions, LLM tracker probes, agent harnesses, pasted strings, long uncategorised, and conventional keywords. Returns per-bucket query/click/impression counts and shares (0-100), zero-click counts, average position, and top example queries (ctr 0-100), plus an aiShaped roll-up of the conversational buckets. Shares are of visible queries only: coverage.hiddenClicksShare (0-1) is the share of the property's clicks with no query row. Buckets run in bucketOrder (conventional last), examples by impressions, highest first. Heuristic pattern matching in 27 languages: it judges how a query LOOKS, not what the searcher meant, so treat single rows as evidence rather than proof. Reads the ClickHouse warehouse when available, else the live Search Console API. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
bucketsNoOptional. Only return these buckets, e.g. ["reply_artefact","pivot_follow_up","conversational_question"] for the AI-conversation shapes. Omit for all buckets.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
examplesPerBucketNoHow many top example queries (by impressions) to return per bucket. 0 returns counts only.

Output Schema

NameRequiredDescription
noteNo
rangeNo
thenByNo
totalsNo
bucketsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
aiShapedNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
nextStepNo
orderingNo
sortedByNo
languagesNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
searchTypeNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
settledThroughNo
candidateFilteredNo
candidatesScannedNo
coverageUnavailableNoWhy coverage is null, when it is.
questionFormQueriesNo
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnly/openWorld annotations: discloses the 27-language heuristic pattern matcher and its epistemic limit ("judges how a query LOOKS, not what the searcher meant, so treat single rows as evidence rather than proof"), the ClickHouse-then-live-GSC data path, the ~2-3 day data lag, and the visible-queries-only share caveat with coverage.hiddenClicksShare. Ordering semantics (bucketOrder, examples by impressions) and the aiShaped roll-up are also stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the alternative, then the bucket taxonomy, then caveats — a sensible information hierarchy. It is dense and long for a single paragraph, with the return-shape details packed tightly enough to slow scanning, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs to call and interpret this correctly: trigger, sibling routing, bucket vocabulary, date defaults, data source fallback, lag, coverage caveat, and the heuristic's reliability limits. An output schema exists so return values needn't be explained, yet the description still frames the key fields usefully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 83%, so the baseline is 3; the description still adds real meaning by defining what each bucket name actually contains ("reply artefacts ("yes", "show me"), pivot follow-ups...") rather than leaving the enum opaque. It also reinforces the optional date-range default (omit both → last 28 settled days), though it does not add anything on searchType or examplesPerBucket beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: classifies query rows by SHAPE (AI Mode / AI Overview fan-out) against the app's Query Analysis report. It immediately distinguishes itself from the sibling get_query_shape_trend and from query_top_queries-style tools by naming the SHAPE lens explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ("Use this when the user asks whether AI Overviews / AI Mode fan-out shows in a property's queries") and an explicit exclusion with the correct alternative ("Not for change over time: use get_query_shape_trend"). Nothing about when-to-use is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_sampling_impactAnalyze GSC sampling / anonymization impactA
Read-only
Inspect

Use this when the user asks how much of a property's traffic is hidden from query or page rows. Compares the per-day totals with the summed query rows and page rows; the gap is traffic no row carries. Per dimension, gap says why: anonymisedShare is traffic that belongs to no row at all (privacy-threshold anonymisation; the warehouse stores what the API returned, so it lacks those queries too) and truncatedShare is traffic in rows past the read cap (0 unless the cap was hit, null when the path cannot split the two). Shares are 0-1 fractions; missingClicksPercent is 0-100. note is written from these fields. Not for the totals themselves: use get_site_summary. The response dataSource says which path served the request. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web

Output Schema

NameRequiredDescription
noteNo
rangeNo
totalsNo
siteUrlNo
warningNo
dataSourceNo
partialDaysNo
dataMaturityNo
pageSamplingNo
querySamplingNo
settledThroughNo
warehouseLatestDateNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive), but the description adds real behavioral context: data lags ~2-3 days, the warehouse mirrors what the API returned, shares are 0-1 vs missingClicksPercent 0-100, and null signals an inseparable path. Slightly dense but genuinely beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the 'use this when' trigger, then mechanism, then field interpretation, then exclusions. Dense but each sentence carries signal; the output-field unpacking borders on verbose for a description when an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even though an output schema exists, the description makes the return values interpretable (what gap/anonymisedShare/truncatedShare mean, unit scales, dataSource path). Nothing needed to call or interpret the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 75% schema coverage the schema documents siteUrl, startDate, endDate, and the searchType enum in detail; the description mostly restates the date-lag/omit-default rule the schema already covers. Its richer text describes output fields (gap, anonymisedShare, truncatedShare) rather than clarifying input parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific analytical purpose (quantify hidden traffic) with a precise mechanism: compares per-day totals against summed query and page rows, gap being rowless traffic. It explicitly distinguishes itself from the sibling get_site_summary, so an agent can route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the triggering user question ('how much of a property's traffic is hidden'), and states the negative case: 'Not for the totals themselves: use get_site_summary.' It also gives default behavior for the optional date range (omit to get last 28 settled days).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_onpage_seoOn-page SEO auditA
Read-only
Inspect

Use this when the user asks for a technical or on-page SEO check of specific pages or of the top pages. Crawls a property's pages and runs a technical on-page/SEO audit per URL: HTTP status, indexability (noindex / canonicalised), title & meta-description length, H1s, word count, canonical, internal/external links, image alt coverage, structured data, Open Graph, viewport, hreflang, and a scored list of issues by severity. Pages come back worst first: by issueCount, then impressions. Pass explicit urls, or omit them to audit the top pages by Search Console impressions. URLs must belong to the property. Fetches each page live and stops after about 50 seconds: when truncated is true, the pages in notAudited were not fetched, so call again with urls set to that list to finish. Not for whether Google indexed a URL: use inspect_url.

NameRequiredDescriptionDefault
urlsNoExplicit page URLs to audit (max 25). Omit to auto-pick top pages.
maxUrlsNoHow many pages to audit when auto-picking (default 10, max 25).
siteUrlYes
minImpressionsNoWhen auto-picking, only consider pages with at least this many impressions (28-day).

Output Schema

NameRequiredDescription
pagesNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
messageNo
siteUrlNo
skippedNo
summaryNo
nextStepNo
orderingNo
sortedByNo
crawlNoteNo
sortOrderNo
thenOrderNo
truncatedNo
budgetNoteNo
dataSourceNo
notAuditedNo
robotsNoteNo
contextNoteNo
auditedCountNo
contextRangeNo
emptyBecauseNo
methodLimitsNo
metricsUnavailableNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, it discloses real operational behavior: pages are fetched live, the run stops after ~50 seconds, and truncated=true means the URLs in notAudited still need a follow-up call. It also states result ordering (issueCount, then impressions) and the constraint that URLs must belong to the property — none of which the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and purpose, then scope, then pagination/continuation semantics, then the sibling exclusion — a sensible order. The single long enumeration of audited checks is dense but earns its place by telling the agent what the report will contain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described; instead the description covers what the agent can't infer — ordering, truncation, and the continuation pattern. For a live-crawl tool with a time budget, that is the hard part and it is handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description adds meaning the schema does not: URLs must belong to the property, top pages are picked by Search Console impressions, and notAudited can be fed back into `urls` for a continuation run. The maxUrls/minImpressions auto-pick knobs are left to the schema, which documents them adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource (“runs a technical on-page/SEO audit per URL”) with an enumerated scope of what's checked. It explicitly distinguishes itself from inspect_url, which is the nearest sibling, so an agent can separate the two without consulting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the triggering condition (“Use this when the user asks for a technical or on-page SEO check of specific pages or of the top pages”) and closes with an explicit exclusion plus the named alternative: “Not for whether Google indexed a URL: use inspect_url.” Both when-to-use and when-not-to-use are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

breakdown_by_pathBreakdown by subdomain / pathA
Read-only
Inspect

Use this when the user asks how a site section, folder or subdomain performs. Aggregates page-level performance into a subdomain and first-folder breakdown. Each page URL is parsed and grouped by its host plus the first depth path segments (depth 1 -> /folder, depth 2 -> /folder/subfolder, etc.). Returns per-group clicks, impressions, CTR (a 0-100 percentage), impression-weighted average position, and the number of distinct pages. Groups are sorted by clicks, highest first. Not for single pages: use query_top_pages. Served from the ClickHouse warehouse when available (every page is grouped), otherwise the live Search Console API (up to 25,000 page rows are grouped; see dataSource). truncated says when pages or groups were left out; quote totals from coverage.siteTotals, not summed groups. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
depthNo
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web

Output Schema

NameRequiredDescription
noteNo
depthNo
rangeNo
groupsNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
groupCountNo
partialDaysNo
dataMaturityNo
pageRowsCappedNo
settledThroughNo
truncationNoteNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, but the description adds substantial context beyond them: the dual data source (ClickHouse vs live Search Console API with a 25,000 page-row cap), the meaning of the `truncated` flag, and the instruction to quote totals from `coverage.siteTotals` rather than summed groups. It also discloses data lag (~2-3 days) and the 28-day default window, which materially affect interpretation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the exclusion, then mechanics, then caveats in a logical order. It is dense but nearly every clause carries decision-relevant information; the only slight excess is restating return fields (clicks, impressions, CTR, position) when an output schema already exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs to call and interpret it: grouping semantics, default window, data lag, source fallback with row caps, truncation signaling, and which totals field to trust. An output schema exists, so the extra return-value detail is bonus rather than a necessity, and nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; the schema documents startDate, endDate, and searchType but leaves depth, limit, and siteUrl bare. The description compensates well for the most semantically ambiguous parameter, spelling out depth 1 -> /folder and depth 2 -> /folder/subfolder, and reinforces the optional-date semantics. It says nothing about `limit` (default 100, max 1000), which is the remaining documented gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (aggregates) and resource (page-level performance grouped by subdomain plus first-folder), and immediately scopes it with 'Use this when the user asks how a site section, folder or subdomain performs.' It explicitly excludes single-page use and names query_top_pages as the alternative, so an agent can distinguish it from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit trigger ('when the user asks how a site section, folder or subdomain performs') and an explicit anti-trigger ('Not for single pages: use query_top_pages'), plus default behavior when dates are omitted. The when/when-not/alternative triad is fully present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_inspect_urlsInspect multiple URLsAInspect

Runs the Google URL Inspection API against a list of URLs, persisting each result to GSC Wizard's inspection history. Each result carries the verdict, coverage, the Google-selected and user-declared canonicals (null when Google did not report one) and a Search Console link. Google caps inspections at 2,000 per property per day (shared across the UI and every MCP call); this tool counts each inspection against that cap and stops once it is reached, returning the URLs it could not get to. A Google rate limit, quota refusal or property-level permission refusal also stops the run: the URLs not yet inspected come back skipped, with skipReason, and the result carries stopReason (and retryAfterSeconds when Google gave one). Call get_inspection_quota first if you want to see remaining headroom. Each inspection takes about 7 seconds at Google, run 5 at a time, so a call takes up to 25 URLs (about 35 seconds); for larger sets add them with add_tracked_urls, where this connection offers it, and let the Indexing Tracker inspect them in the background (check_tracked_url_now inspects a few of them immediately).

NameRequiredDescriptionDefault
urlsYesUp to 25 URLs per call; use add_tracked_urls for more, where this connection offers it.
siteUrlYes

Output Schema

NameRequiredDescription
countNo
quotaNo
failedNo
messageNo
resultsNo
siteUrlNo
skippedNo
succeededNo
stopReasonNo
quotaExhaustedNo
retryAfterSecondsNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/open-world/destructive flags, and the description adds far more: the 2,000-per-property-per-day cap shared with the UI, mid-run stop behavior, the shape of partial results (skipped URLs with skipReason, stopReason, retryAfterSeconds on Google rate limits or permission refusals), and the ~7s/5-concurrent timing model. This is exactly the operational context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary action and its persistence behavior, then layers quota, failure mode, and timing details in order of usefulness. The closing sentence packing add_tracked_urls, Indexing Tracker, and check_tracked_url_now is dense but each clause earns its place; slightly long overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still previews the meaningful return fields (verdict, coverage, canonicals, Search Console link, skipped/stopReason), so an agent knows both how to call it and what to expect. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: 'urls' is documented in the schema (maxItems 25, pointer to add_tracked_urls), while 'siteUrl' has no schema description. The description compensates by framing siteUrl as the property ('per property per day', 'property-level permission refusal'), clarifying its meaning beyond the bare string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Runs the Google URL Inspection API against a list of URLs') and immediately distinguishes itself from the single-URL sibling by scope ('list of URLs') and by side effect ('persisting each result to GSC Wizard's inspection history'). It also names the role each related tool plays (get_inspection_quota, add_tracked_urls, check_tracked_url_now), so an agent can place it in the family without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing rules: call get_inspection_quota first for headroom, use this tool for sets of up to 25, and switch to add_tracked_urls for larger sets so the Indexing Tracker runs them in the background. That is when-to-use plus the concrete alternative, not just implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_tracked_url_nowCheck tracked URLs nowAInspect

Triggers an immediate Google URL Inspection for up to 10 tracked URLs in the GSC Wizard Indexing Tracker, updating each URL's status, warnings, and append-only history. Each result carries the Google-selected and user-declared canonicals (null when Google did not report one). Counts against the daily 2,000-inspection/property quota. If the quota is exhausted, the call returns a quota message instead of running. URLs are inspected five at a time (about 7 seconds each at Google). If Google rate-limits the property or refuses access to it, the URLs not yet inspected come back with skipped: true and a skipReason (plus retryAfterSeconds when Google gave one) and are left untouched; retry them later. Use sparingly; the app's hourly cron checks tracked URLs automatically. This is a server-side write and is audit-logged.

NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

NameRequiredDescription
countNo
messageNo
resultsNo
siteUrlNo
stoppedNo
notCheckedNo
quotaExhaustedNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds substantial behavior beyond them: the 2,000-inspection daily quota and its exhaustion response, 5-at-a-time batching at ~7s each, rate-limit handling via skipped/retryAfterSeconds, untouched-on-skip semantics, and audit-logging. This is exactly the operational context an agent needs before invoking a quota-consuming write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though dense at roughly six sentences, the purpose is front-loaded and each subsequent sentence conveys distinct operational detail (quota, batching, skip semantics), so little is wasted. It is information-rich rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be enumerated, yet the description still flags the canonical fields and null case. Combined with the quota, rate-limit, and audit-logging behavior, an agent has everything needed to call this correctly and interpret partial results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It partially does: 'up to 10 tracked URLs' clarifies the urls array bound, and 'per property' hints that siteUrl is the GSC property. But neither parameter's format or accepted values is explained, so the schema remains largely silent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: triggering an immediate Google URL Inspection for up to 10 tracked URLs, plus the side effect of updating status, warnings, and history. It scopes to 'tracked URLs in the GSC Wizard Indexing Tracker,' which implicitly separates it from generic inspect_url/bulk_inspect_urls, though those siblings are not named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use sparingly; the app's hourly cron checks tracked URLs automatically' gives a clear when-to-use constraint and an implicit when-not (don't manually re-run what the cron covers). However, it never names inspect_url or bulk_inspect_urls as alternatives, so the routing between inspection tools is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_migrationCompare a site migration (A vs B)A
Read-only
Inspect

Use this when the user asks whether a site migration, domain move or restructure lost or gained traffic: a before/after Search Console comparison. Three modes: "cross-property" compares two GSC properties (old domain vs new); "two-urls" compares two URL-prefix sections within one property; "regex" splits one property by two regexes. Returns the daily clicks/impressions trend for each side (date order), per-side totals (avgCtr 0-100) and the query and page winners and losers by click delta (topGainers by clicksDelta descending, topLosers ascending: biggest loss first). Without goLiveDate both sides share one date window (startDate/endDate). With goLiveDate it becomes a before/after comparison around the launch: side A is read over the before window and side B over the after window, placed by windowStrategy ("recent", the default: the last windowDays settled days vs the windowDays before go-live; "from-go-live": the first windowDays from go-live vs the windowDays before; "full": the 90 days before go-live vs every day since). windowDays defaults to 28; yoyBaseline compares with the same weeks a year earlier instead. The go-live result adds windows (dates, days since go-live, warnings), recoveryPct (B clicks per day as a % of A clicks per day; null under 10 baseline clicks) and trend buckets (lost, declined, stable, improved, new) for queries and pages; pages of two properties are joined by path. Not for the health verdict (risk score, redirect checks, recommendations, projected recovery): use get_migration_health. Query figures cover only the queries Google lists, so they describe visible queries, not the whole site (analyze_sampling_impact measures the gap). Reads the ClickHouse warehouse when available, else the live Search Console API. Query and page lists cover at most the top 25,000 rows by clicks per side; truncated / truncationNote flag a reached cap. Regexes are capped at 2,000 characters and must not nest quantifiers (for example (a+)+). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
modeYescross-property | two-urls | regex.
limitNoMax query/page winners and losers to return per list (default 50).
regexANoSide A page regex (required for regex mode).
regexBNoSide B page regex (required for regex mode).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYesSide A property (and the single property for two-urls/regex).
siteUrlBNoSide B property (required for cross-property).
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
goLiveDateNoOptional. First day the new setup was live, as YYYY-MM-DD. When given, side A is read over the before window and side B over the after window around this date (see windowStrategy), and the result adds windows, recoveryPct and trend buckets. Do not combine with startDate/endDate.
urlPrefixANoSide A URL prefix (required for two-urls): a full URL ("https://acme.com/old-blog/"), a host ("blog.acme.com/") or a path on any host ("/old-blog/"), as list_migrations returns them.
urlPrefixBNoSide B URL prefix (required for two-urls), in the same forms as urlPrefixA.
windowDaysNoOnly with goLiveDate. Window length in days for "recent" and "from-go-live" (default 28). Shortened to the post-launch days available.
yoyBaselineNoOnly with goLiveDate. Compare the after window with the same weeks one year (364 days) earlier instead of the days before go-live, which removes seasonality. Default false.
windowStrategyNoOnly with goLiveDate. "recent" (default): the last windowDays days vs the windowDays days before go-live, where the migration stands now. "from-go-live": the first windowDays days after go-live vs the windowDays days before, the launch dip included. "full": the 90 days before go-live vs every day since (lengths differ; per-day figures and recovery stay comparable).

Output Schema

NameRequiredDescription
modeNo
noteNo
pagesNo
rangeNo
sidesNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
queriesNo
summaryNo
windowsNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
truncatedNo
dailyTrendNo
dataSourceNo
recoveryPctNo
emptyBecauseNo
methodLimitsNo
recoveryNoteNo
truncationNoteNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover safety (readOnly, non-destructive, open-world); the description adds substantial behavior beyond them: how goLiveDate flips the tool into a before/after read, how windowStrategy and windowDays shape the windows, what extra fields appear (windows, recoveryPct, trend buckets), the 25,000-row and 2,000-char regex caps with truncation flags, the ~2-3 day data lag, and the ClickHouse-vs-live-API fallback.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with purpose, then modes, then conditional behavior, and no sentence is filler given the tool's complexity. The weakness is structural: it is one very dense paragraph with no separation for the goLiveDate branch or the caveats, which makes it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter tool with an output schema, the description covers everything an agent needs to call it correctly: mode prerequisites, date handling and defaults, window semantics, caps and truncation, data freshness, and the visible-queries caveat with a pointer to analyze_sampling_impact. Nothing material is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each field; the description nonetheless adds cross-parameter meaning the schema cannot express, notably that without goLiveDate both sides share one window while with goLiveDate they split before/after, and the exact semantics of each windowStrategy value and yoyBaseline. The per-field prose is mostly a restatement of the schema's own descriptions, which keeps this just under a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource (before/after Search Console comparison of a site migration) and enumerates the three comparison modes. It also explicitly distinguishes itself from the sibling get_migration_health, so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('use this when the user asks whether a migration, domain move or restructure lost or gained traffic') and an explicit exclusion with the correct alternative ('Not for the health verdict ... use get_migration_health'). The mode-selection rules (cross-property vs two-urls vs regex) and the goLiveDate vs startDate/endDate choice are also spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_annotationCreate a chart annotationAInspect

Adds a chart annotation. Scope is "account" by default (visible only to the user); pass siteUrl to scope the annotation to a single property. Platform-wide annotations are reserved for system events and cannot be created via this tool.

NameRequiredDescriptionDefault
colorNo
labelYes
siteUrlNoOmit for account-wide; pass to scope to a property.
categoryNo
eventDateYesRequired. The date the event occurred, as YYYY-MM-DD (e.g. 2026-06-08).
descriptionNo
clientRequestIdNoOptional idempotency key (a UUID, one per form session). Resending the same key returns the row the first call created instead of inserting a duplicate.

Output Schema

NameRequiredDescription
annotationNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false (a write) and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the default visibility scope, how to scope to a property, and the restriction that platform-wide annotations are reserved for system events.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences with zero waste. The purpose is front-loaded, followed by scope details and a restriction, all clearly structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations cover the safety profile, so return values and write safety are handled. The description fills in scoping behavior and the platform-wide restriction, but omits any mention of required parameters or the idempotency key, though those are covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (43%), so the description should compensate for undocumented parameters. It only mentions siteUrl, which is already described in the schema, and provides no meaning for color, label, category, or description. For a 7-parameter tool, this leaves significant gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Adds') and resource ('a chart annotation'), making the tool's purpose immediately clear. It does not explicitly differentiate from sibling tools like update_annotation or delete_annotation, but the create action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the default scope ('account', visible only to the user) and instructs when to pass siteUrl versus omit it. It also states a when-not condition: platform-wide annotations cannot be created via this tool, which is a clear exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_content_groupCreate a content groupAInspect

Creates a content group partition on a property. Rules are an array of { type, value } objects (prefix / contains / regex / equals) that match URLs into the group. Group names are unique per site. A regex rule that cannot compile is rejected; one that is valid but unsupported by the warehouse (a lookahead, lookbehind or backreference) or skipped as ReDoS-prone is accepted and reported in ruleWarnings. Relay those to the user, since a skipped pattern matches no pages at all.

NameRequiredDescriptionDefault
nameYes
colorNo
rulesYes
siteUrlYes
descriptionNo

Output Schema

NameRequiredDescription
groupNo
ruleWarningsNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description goes well beyond by disclosing that group names are unique per site, that non-compiling regex is rejected, that valid-but-unsupported or ReDoS-skipped patterns are silently accepted as no-match, and that this is surfaced via `ruleWarnings`. That is exactly the behavioral context an agent needs and cannot get from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose before drill-down into rules and validation behavior. The final regex caveat is longer than average but is high-value operational detail rather than padding; nothing reads as filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be covered, and the description still flags `ruleWarnings` for the agent. Combined with the regex semantics and uniqueness constraint, this is nearly complete for a create tool; only the remaining input parameters (siteUrl, color, description) are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full parameter burden, and it does well on `rules` – explaining the { type, value } shape, the four match types, and regex edge cases – plus the name-uniqueness constraint. However, siteUrl, color, and description are never addressed, leaving half the parameters documented only by their bare JSON types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Creates a content group partition on a property") and immediately scopes what a group is. The verb 'Creates' cleanly distinguishes it from the sibling update_content_group, delete_content_group, and list_content_groups without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the rules-matching explanation, but never states when to reach for this tool versus update_content_group or when a content group is the right construct. No explicit when/when-not guidance or named alternatives; usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_gsc_propertyCreate GSC propertiesAInspect

Creates one or more URL-prefix properties in Google Search Console (Webmasters sites.add) and registers them in GSC Wizard. Use this to add folder-level properties (e.g. https://example.com/blog/) that do not yet exist in Search Console. They are auto-verified if the connected Google account owns the parent domain property. parentSiteUrl is an existing GSC Wizard property whose Google account has access; the new properties inherit it. Every property URL must be under the parentSiteUrl domain (that domain or a subdomain of it). Created properties are added hidden and consume no plan slot until you show them with set_dashboard_visibility, which enforces the dashboard limit. For properties that already exist in GSC, use add_site instead.

NameRequiredDescriptionDefault
registerNoAlso register the created properties in GSC Wizard (default true).
propertyUrlsYesURL-prefix properties to create, e.g. ["https://example.com/blog/"]. Max 50. Each must be under the parentSiteUrl domain (that domain or a subdomain).
parentSiteUrlYesAn already-registered GSC Wizard property whose Google account owns the domain.

Output Schema

NameRequiredDescription
countNo
failedNo
createdNo
resultsNo
registeredNo
parentSiteUrlNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnlyHint=false, destructiveHint=false) but the description adds genuinely non-obvious behavior: auto-verification contingent on parent-domain ownership, inheritance of the parent property's Google account, and the fact that new properties are created hidden and consume no plan slot until shown. It stops short of describing batch failure behavior or partial-success semantics for the multi-URL case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then constraints, then the alternative. Dense and mostly waste-free, though the dashboard/plan-slot sentence and the set_dashboard_visibility pointer add length that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation tool with a full schema and an output schema, everything an agent needs to invoke correctly is present: prerequisites, domain constraint, verification behavior, visibility state, plan-slot implications, and the alternative sibling. Return values are legitimately omitted because an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: parentSiteUrl is 'an existing GSC Wizard property whose Google account has access' and the new properties inherit it, plus the domain/subdomain constraint and the auto-verify implication. The max-50 and URI format are restated from the schema, so it is not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Creates one or more URL-prefix properties in Google Search Console') and names the underlying API operation (sites.add). It also explicitly distinguishes itself from the sibling add_site, which handles already-existing properties, so an agent can route between them without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('folder-level properties ... that do not yet exist in Search Console') and when-not ('For properties that already exist in GSC, use add_site instead'). It even points to set_dashboard_visibility as the follow-up needed to expose hidden properties, which is a real workflow cue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_report_clientAdd a report clientAInspect

Adds a client contact (an email address, plus an optional name) that shareable reports can then be granted to with manage_report_access. Adding a client does NOT email them and does not give them access to anything on its own; it only creates the contact. A new contact's first grant also waits for the account owner to confirm it by email. Emails are stored lowercased and must be unique per account; adding an address that already exists returns the existing client rather than failing.

NameRequiredDescriptionDefault
nameNo
emailYes

Output Schema

NameRequiredDescription
clientNo
createdNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnly=false, destructive=false, openWorld=false. The description adds genuinely non-obvious behavior: normalization to lowercase, per-account uniqueness, idempotent collision handling (returns the existing client instead of failing), and the owner email-confirmation gate on first grant. That is exactly the extra context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the action, then side effects, then edge-case return behavior. No filler; each clause adds a fact the agent would otherwise have to discover by trial.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the mutation's side effects, the prerequisite for downstream use (owner confirmation), duplicate handling, and the normalization rule. With an output schema present, no return-format explanation is needed, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry meaning, and it does: quantifies email as unique-per-account and lowercased, and frames name as optional metadata attached to the contact. It does not mention length constraints, but those are in the schema and are low-stakes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Adds a client contact ... email address, plus an optional name') and immediately positions it against the sibling it complements (manage_report_access). An agent can distinguish it from list_report_clients and manage_report_access without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states what this tool does NOT do ('Adding a client does NOT email them and does not give them access to anything on its own') and names the sibling that performs the granting step. The when-to-use boundary is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_saved_filterCreate a saved filterAInspect

Stores a filter preset against a property, as the dashboard's filter panel would. filters is the list of filter rows (dimension / operator / value), in the same shape list_saved_filters returns, and filterLogic says whether they combine with AND or OR. Saving a preset does not apply it to anything on its own: it appears in the property's filter presets for the user to pick.

NameRequiredDescriptionDefault
nameYes
filtersYesThe filter rows, in the shape list_saved_filters returns. Pass [] for a preset with no rows.
siteUrlYes
filterLogicNoHow the rows combine: "and" (default, every row must match) or "or" (any one row). Matches the dashboard's Match All / Match Any toggle.
clientRequestIdNoOptional idempotency key (a UUID, one per form session). Resending the same key returns the row the first call created instead of inserting a duplicate.

Output Schema

NameRequiredDescription
filterNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the write/safety profile is covered. The description adds genuine behavioral context beyond that: the saved preset has no side effect on querying and simply surfaces in the property's preset list. It does not mention auth requirements or duplicate handling, which the schema partially covers via clientRequestId.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly-written sentences, each front-loaded with its point: what is stored, how the two key fields work, and the non-application caveat. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations cover the safety profile. The description handles the main behavioral nuance (no implicit application) but is silent on the property/site binding and the idempotency behavior, leaving minor gaps for a 5-param write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60% and the description reinforces the two most complex params (`filters` rows as dimension/operator/value and `filterLogic` as AND/OR), plus a useful cross-reference that `filters` matches the shape list_saved_filters returns. It says nothing about `siteUrl`, `name`, or `clientRequestId`, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Stores a filter preset against a property') and immediately clarifies the resource's nature by comparing it to the dashboard's filter panel. It does not name update_saved_filter or delete_saved_filter as siblings, so the create-vs-modify distinction is left implicit. Purpose is clear without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies an important usage fact — that saving a preset does not apply it — which implicitly tells the agent this is a persistence, not a query, operation. However it gives no explicit when-to-use framing or direction toward alternatives (update_saved_filter, list_saved_filters), so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_shared_reportCreate a shareable reportAInspect

Saves a table of rows as a shareable GSC Wizard report. Pass the rows you got from another tool (e.g. query_top_queries, get_content_group_performance) plus the columns describing which fields to show; the report renders at view time, so the stored payload stays small. THIS IS STEP 1 OF 3: the returned URL opens for NOBODY until access is granted, not even for the account owner, because the viewer is the client portal and requires a client login. To actually share it: (2) create_report_client with the recipient's email, then (3) manage_report_access to grant them the report. A recipient never shared with before also needs the account owner to confirm the share from the email GSC Wizard sends them. Do not hand the URL to anyone before access is granted; it will not open. Up to 50 reports per account; delete old ones with delete_shared_report.

NameRequiredDescriptionDefault
rowsYesThe table rows. Each row is an object keyed by the column `key` values.
titleYes
columnsYesColumn definitions, in display order.
siteUrlNoProperty this report is about; recorded on the report for context.
dateRangeNoReporting period, shown in the report header.
reportTypeNoFree-form label for what produced the report (e.g. "top-queries").mcp
dataSourceTypeNoWhich kind of report this is, for the viewer.inline
comparisonRangeNoComparison period, shown alongside the reporting period.

Output Schema

NameRequiredDescription
noteNo
reportNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false), the description discloses the non-obvious failure mode: the returned URL opens for nobody until access is granted, because the viewer is the client portal. It also states the 50-reports-per-account quota, the delete_shared_report cleanup path, and the view-time rendering that keeps the stored payload small.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and payload shape, then the critical three-step warning. The closing 'Do not hand the URL to anyone before access is granted; it will not open' restates the earlier warning almost verbatim and could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description still explains that the return includes a URL. For an 8-param, nested-schema write tool, the description covers the sequencing and access prerequisites that an agent could not infer from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88%, so the structured schema already carries most parameter meaning. The description adds real linkage semantics — that `rows` should come from another tool's output and `columns` selects which fields render — which clarifies how the two required arrays relate to each other. It does not touch the optional metadata params (siteUrl, dateRange, dataSourceType), which is acceptable given the schema documents them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Saves a table of rows as a shareable GSC Wizard report') and implicitly separates itself from list_shared_reports, delete_shared_report, and manage_report_access. An agent knows immediately this creates the artifact rather than listing or granting it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite (rows from query_top_queries or get_content_group_performance), names the exact follow-up tools (create_report_client, then manage_report_access), and warns what happens if the order is skipped. Also flags the account-owner email confirmation requirement for first-time recipients.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_topic_clusterCreate a topic clusterAInspect

Creates a topic cluster on a property by grouping keywords under a name. Cluster names are unique per property, and the call is idempotent: if the name already exists the existing cluster is returned with alreadyExisted: true instead of an error, so there is never anything to retry. Use update_topic_cluster to change an existing cluster's keywords. Keywords are stored as text and matched against GSC queries in the dashboard.

NameRequiredDescriptionDefault
nameYes
siteUrlYes
keywordsYes

Output Schema

NameRequiredDescription
clusterNo
alreadyExistedNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare generic safety hints (readOnlyHint=false, destructiveHint=false, openWorldHint=false); the description adds genuinely new behavioral facts: per-property name uniqueness, idempotent semantics, the alreadyExisted: true return, and that there is never anything to retry. That is exactly the mutation-behavior context an agent needs beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the action, then idempotency semantics, then the alternative-tool pointer, then storage/matching behavior. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained, and the description still usefully names alreadyExisted. Combined with annotations and the alternative-tool routing, it is nearly complete; the only gap is that siteUrl semantics and the keyword/name limits are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning; it partially does, mapping name (unique per property), keywords (stored as text, matched against GSC queries), and implying the property via siteUrl. It adds no format or constraint detail (URL shape, max 1000 keywords, max 200 chars) for siteUrl or the limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (creates), resource (topic cluster), and scope (on a property, grouping keywords under a name), so the agent knows exactly what is produced. It also explicitly names the sibling update_topic_cluster, distinguishing it from the update path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing ("Use update_topic_cluster to change an existing cluster's keywords") and the precise condition under which the call is a no-op (name already exists returns alreadyExisted: true). Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_annotationDelete a chart annotationA
Destructive
Inspect

Deletes a chart annotation by id. Only annotations the user owns can be removed; platform-scoped annotations cannot be deleted via this tool.

NameRequiredDescriptionDefault
annotationIdYes

Output Schema

NameRequiredDescription
labelNo
deletedNo
annotationIdNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds meaningful context beyond that: an ownership-based authorization constraint and the un-deletable platform-scoped class, which an agent would not otherwise know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler: the action comes first, followed immediately by the constraint that limits it. Nothing is padded or repeated from the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the destructive nature plus authorization boundary are covered. It could go slightly further on failure behavior (e.g., deleting a non-owned or nonexistent id), but for a single-parameter delete this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter with 0% schema description coverage, so the schema supplies only the type and UUID format. The description's 'by id' adds little beyond restating the field name and does not explain where the id comes from or what happens on a mismatched id. Baseline 3 given a single, self-evident identifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Deletes a chart annotation by id'), which is unambiguous against the annotation siblings (create_annotation, update_annotation, list_annotations). It does not explicitly contrast itself with those siblings, but the operation's nature makes the differentiation obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit precondition and exclusion: only user-owned annotations can be removed, and platform-scoped annotations cannot be deleted via this tool. It stops short of naming an alternative path for platform-scoped deletions or clarifying when deletion is preferable to updating.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_content_groupDelete a content groupA
Destructive
Inspect

Deletes a content group by id. The property it belongs to must be one you own or one shared with you with full access.

NameRequiredDescriptionDefault
groupIdYes

Output Schema

NameRequiredDescription
nameNo
deletedNo
groupIdNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is covered structurally. The description adds the authorization requirement (ownership or full-access share), which is exactly the kind of permission context the annotations cannot express. It stops short of stating irreversibility or side effects on related data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler: the action and key are front-loaded, and the permission constraint follows immediately. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive delete with a rich annotation set and an existing output schema, the description covers action, key, and authorization. Return-value behavior is handled by the output schema, so nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for a single parameter. 'By id' clarifies that groupId is the content group identifier, but adds no format (UUID) or lookup guidance beyond the self-evident parameter name. Minimal but not absent compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Deletes a content group') plus the lookup key ('by id'), so an agent knows exactly what the operation targets. It does not name a sibling to contrast with (e.g., delete_topic_cluster, delete_saved_filter), but the resource noun alone disambiguates it within the delete_* family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete precondition for use: the owning property must be one you own or one shared with full access. That is real gating context rather than implied usage, but the description names no alternative (update_content_group, list_content_groups) and gives no when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_migration_redirectsDelete migration redirect mappingsA
Destructive
Inspect

Permanently deletes saved redirect mappings. Narrow the deletion with label and/or the A/B property pair; to delete EVERY mapping on the account you must pass confirmDeleteAll: true, since an unnarrowed delete would also wipe unrelated migrations. Preview exactly what would go with list_migration_redirects using the same filters first.

NameRequiredDescriptionDefault
labelNoOnly mappings carrying this label.
siteUrlANoOnly mappings whose source property is this.
siteUrlBNoOnly mappings whose target property is this.
confirmDeleteAllNoRequired when no label or property filter is given: deletes every mapping.

Output Schema

NameRequiredDescription
deletedNo
filtersNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, but the description goes further: it discloses that deletion is permanent, that an unnarrowed delete would also wipe unrelated migrations, and that confirmDeleteAll: true is a hard prerequisite for that path. This is exactly the collateral-damage and safety-guard context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the destructive nature and scope, then the narrowing/guard rule, then the recommended preview step. Every sentence carries decision-relevant information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation. The description covers purpose, scope, all four parameters' roles, the destructive guard, and the safe workflow, which is everything an agent needs to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains the coupling between the filter params and confirmDeleteAll, and why the guard exists (unrelated migrations would be destroyed). It does not add format or syntax detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Permanently deletes saved redirect mappings') and is immediately distinguishable from the sibling add_migration_redirects and the read-only list_migration_redirects. No ambiguity about what operation is performed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: narrow with `label` and/or the A/B property pair, pass confirmDeleteAll: true only for a full-account wipe, and preview with list_migration_redirects using the same filters first. Names both the required guard condition and the recommended alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_saved_filterDelete a saved filterA
Destructive
Inspect

Deletes a saved filter preset by id. Presets belong to the property, so its owner or anyone with full access to it may delete any of them, as in the GSC Wizard app; read-only access is not enough.

NameRequiredDescriptionDefault
filterIdYes

Output Schema

NameRequiredDescription
nameNo
deletedNo
filterIdNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that: presets belong to the property, and deletion requires ownership or full property access, explicitly noting read-only access is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, action and key front-loaded, with the permission constraint following. The aside 'as in the GSC Wizard app' is slightly extraneous but does not harm comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. For a destructive single-param delete, the description supplies the permission model and scope, leaving only minor gaps (where to obtain the filterId).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter (filterId, uuid) with 0% schema description coverage, so the description must compensate. It only says 'by id' without clarifying format, source (e.g., from list_saved_filters), or whether the id is a preset id versus a property id — minimal added meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (deletes) and resource (saved filter preset) with the identifying key (by id). It is unambiguous against siblings such as delete_site, delete_annotation, and update_saved_filter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the operation's context (removing a saved preset) and states a precondition, but never says when to delete versus update_saved_filter or list_saved_filters first. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_shared_reportDelete a shareable reportA
Destructive
Inspect

Permanently deletes a saved shareable report and every client grant on it, breaking the shared link for anyone who still has it. Only reports owned by the authenticated user can be deleted. Find the id with list_shared_reports.

NameRequiredDescriptionDefault
reportIdYes

Output Schema

NameRequiredDescription
titleNo
deletedNo
reportIdNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, so the bar is lower, yet the description adds exactly the context the rubric calls for: what gets destroyed (all client grants), the blast radius (breaks the shared link for anyone who holds it), and an auth requirement (owner-only deletion). This goes well beyond the structured flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the irreversible action, followed by the ownership constraint and the id-sourcing hint. No sentence is redundant and each adds distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter tool, the description covers permanence, cascade scope, ownership precondition, and id discovery, while an output schema and annotations handle the return value and safety profile. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single reportId at 0% schema coverage, the description must carry the parameter burden. It usefully explains where to source the id (list_shared_reports), but says nothing about the expected format (uuid) or edge cases like non-existent or non-owned ids.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('Permanently deletes a saved shareable report') and immediately extends the scope to the cascading effect ('every client grant on it'). This clearly distinguishes it from create_shared_report and list_shared_reports in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative that supplies the required identifier ('Find the id with list_shared_reports') and states a real precondition ('Only reports owned by the authenticated user can be deleted'). It lacks an explicit when-not-to-use note, but the routing and eligibility constraint give solid guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_siteRemove a property from GSC WizardA
Destructive
Inspect

Unregisters a property from GSC Wizard. Cascades to topic clusters, content groups, saved filters, inspections, and annotations scoped to this property. Does NOT remove the property from Google Search Console itself. Pass confirm=true to acknowledge; this guards against accidental deletes.

NameRequiredDescriptionDefault
confirmYesRequired confirmation. Must be true.
siteUrlYes

Output Schema

NameRequiredDescription
deletedNo
siteUrlNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and openWorldHint=false, but the description goes further by enumerating exactly what is destroyed by the cascade (topic clusters, content groups, saved filters, inspections, annotations) and clarifying the external-system boundary. That is precisely the disclosure an agent needs before invoking an irreversible mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, followed by blast radius and then the scope caveat and guard. No filler, and each sentence carries distinct decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations plus the description cover safety and cascade scope. The remaining gap is that it never states whether the deletion is permanent/reversible or what authorization the caller needs, which matters for a destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: confirm is documented in the schema, but siteUrl is not, and the description only implies it via 'property' without giving format (URL vs. sc-domain: style identifier). Baseline 3 is appropriate since the description adds scope meaning but not parameter syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Unregisters a property from GSC Wizard') with an explicit scope boundary that separates it from the Google Search Console product itself. Among a large family of delete_* siblings, the cascade clause makes clear this is the property-level delete rather than an entity-level one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear when-not condition ('Does NOT remove the property from Google Search Console itself') and the confirm=true guard against accidental deletes. It stops short of naming an alternative for softer operations (e.g. update_site to modify, or remove_tracked_urls to stop tracking a URL), so the agent must infer those.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_topic_clusterDelete a topic clusterB
Destructive
Inspect

Deletes a topic cluster by id. The property it belongs to must be one you own or one shared with you with full access.

NameRequiredDescriptionDefault
clusterIdYes

Output Schema

NameRequiredDescription
nameNo
deletedNo
clusterIdNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered. The description usefully adds an authorization precondition (property must be owned or shared with full access). However, it never states the scope of destruction — e.g. whether pages or groupings inside the cluster are removed — or that the action is irreversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; the core action leads and the access constraint follows. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover the destructive profile. The remaining gap is destruction scope and id provenance, but for a single-parameter delete this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required clusterId parameter. The phrase "by id" merely restates what the schema already declares (a uuid-typed identifier) and adds no format detail, no source for obtaining the id (e.g. list_topic_clusters), and no scoping context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Deletes a topic cluster by id") that cleanly separates it from the many non-topic-cluster delete siblings. It does not explicitly differentiate against update_topic_cluster/list_topic_clusters, but the resource naming makes the intent unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use, when-not-to-use, or alternative guidance. It does not mention update_topic_cluster as the non-destructive alternative, nor when a delete is appropriate versus leaving the cluster in place. The ownership clause is a precondition, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_anomaliesDetect traffic anomaliesA
Read-only
Inspect

Use this when the user asks whether something broke or spiked on a specific day. Flags statistically anomalous days in a property's Search Console series for a chosen metric (clicks, impressions, CTR, or position). Not for level shifts or gradual trends: use detect_change_points. Uses a robust Modified Z-score with median absolute deviation and day-of-week baselines (mean absolute deviation when most days are identical, as on a low-traffic property), then scores each spike/drop by severity (critical to info). Anomalies are listed by date, oldest first; for ctr, actual and expected are 0-100 percentages. direction is numeric (actual above or below expected), so for position "down" is a better ranking; outcome (improved or worsened) is the good-or-bad reading for every metric. Each anomaly carries the day's impressions and clicks. For ctr and position an outlier the day's volume can explain is dropped, and a day under minImpressions is kept but marked lowVolume with severity capped at low. episodes groups flagged days that follow each other: a run of 3 or more (possibleLevelShift) is usually one level shift, not separate events, and nextStep then says how to check it with detect_change_points. Days without rows count as zero for clicks and impressions, so a drop to zero (deindexing) is flagged; the 21-day minimum is measured in calendar days from the first day with data. CTR and position use only days with impressions. coverage reports the days analysed and how an empty tail at the end of the window was treated. Reads the ClickHouse warehouse when available, else the live Search Console API.

NameRequiredDescriptionDefault
daysNoTrailing days of daily data to analyze (min 21, default 90).
metricNoWhich metric to scan for anomalies.clicks
siteUrlYes
sensitivityNoModified Z-score threshold: lower = more sensitive (more anomalies). Default 3.5; 3-4 is typical.
minImpressionsNoctr and position only (ignored for clicks and impressions): a day with fewer impressions is kept but marked lowVolume, severity capped at low. Omit for the automatic floor, the larger of 10 and 20% of the median daily impressions; 0 turns it off. The value used is returned as minImpressions.

Output Schema

NameRequiredDescription
noteNo
rangeNo
metricNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
summaryNo
warningNo
coverageNo
episodesNo
nextStepNo
orderingNo
sortedByNo
anomaliesNo
sortOrderNo
thenOrderNo
dataSourceNo
partialDaysNo
sensitivityNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
minImpressionsNo
settledThroughNo
warehouseLatestDateNo
baselineContaminatedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly, non-destructive, open world); the description goes far beyond by disclosing the statistical method (Modified Z-score with MAD, day-of-week baselines, MAD fallback on low-traffic properties), severity grading, output ordering (oldest first), zero-imputation for missing days, the 21-calendar-day minimum, lowVolume capping, episode grouping rules, and the ClickHouse-vs-live-API data source.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger and the sibling exclusion, then ordered from method to output shape to edge cases — a sensible structure for a complex tool. A few clauses repeat schema content (ctr as 0-100 percentages, the lowVolume cap), which is the only reason it is not a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter statistical tool with an output schema, the description covers everything an agent needs to call it correctly and interpret results: metric caveats, missing-day handling, volume-driven outlier suppression, episode/nextStep guidance, and coverage reporting. Nothing material is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline is 3; the description adds real meaning on top by explaining metric-specific interpretation (for position, 'down' is better; outcome is the good-or-bad reading) and the interplay between minImpressions, lowVolume, and severity capping. It does not elaborate on what sensitivity values imply beyond the schema's own threshold note, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — flags statistically anomalous days in a property's Search Console metric series — and immediately names the sibling it is not (detect_change_points). An agent can distinguish anomaly detection from change-point detection without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('when the user asks whether something broke or spiked on a specific day') and an explicit exclusion ('Not for level shifts or gradual trends: use detect_change_points'). It also routes follow-up cases via episodes/nextStep back to detect_change_points, so both selection and hand-off are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_change_pointsDetect traffic change pointsA
Read-only
Inspect

Use this when the user asks when a property's clicks or impressions moved to a new sustained level (a step, e.g. after a migration, algorithm update or redesign): returns each break's before vs after average and % change, oldest first. Not for one-off spikes: use detect_anomalies; for totals use get_site_summary. Each date is the first day of the new level; breaks at least 14 days apart are found separately. Days without rows count as zero, so a drop to zero (deindexing) is a change point; coverage says how an empty tail was treated. beforeMean and afterMean are the daily means of the full segments either side of the break (to the neighbouring breaks or the series ends), and segmentBefore and segmentAfter date those segments. A gradual trend has no step, so read trendSummary (first vs last 14 days) and, on an empty result, emptyBecause, strongestShift or strongestShiftReason, and any nextStep. Reads the ClickHouse warehouse when available, else the live Search Console API. When a shift starts from a zero baseline (beforeMean 0) it has no percentage: changePercent is 0 by convention, which does not mean no change; describe it as new traffic from zero using afterMean. Each change point has a shape: step (at once), gradual (over rampStartDate to rampEndDate) or ambiguous (the data cannot tell at once from over several weeks); describe a gradual or ambiguous one as nextStep words it, never as a one-day event.

NameRequiredDescriptionDefault
daysNoTrailing days of daily data to analyze (min 14, default 180). Ignored when startDate is given; with endDate alone, the window is `days` long and ends there.
metricNoWhich metric to segment.clicks
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date: omit both startDate and endDate to analyze the trailing `days` window ending at the latest settled date. Pass it with endDate to read a fixed window, for example to reproduce an earlier result; passed alone, the window runs from here to the latest settled date. The window must span 14 to 480 days. Never pass null or the string "null".
sensitivityNoA break is kept when its shift exceeds sensitivity + 1.6 standard errors of the day-to-day noise inside the segments: lower = more sensitive (more change points). Default 2.

Output Schema

NameRequiredDescription
noteNo
countNo
rangeNo
metricNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
coverageNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
partialDaysNo
sensitivityNo
changePointsNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
trendSummaryNoOverall movement, present even when count is 0: first vs last 14-day means, their ratio (null from zero: fromZero), slopePerDay, direction (up / down past 10% and count noise, else flat) and halfwayDate for a 1.5x+ move.
settledThroughNo
strongestShiftNoAlways present. On an empty result, the strongest split: stdDevs is its score in sensitivity units (the name predates the 2026-10 method), and a rerun with sensitivity stdDevs reports it when nextStep offers that rerun. Null otherwise, with strongestShiftReason saying why.
warehouseLatestDateNo
strongestShiftReasonNoPresent exactly when strongestShift is null: no_data (no rows), too_short (under 14 calendar days), constant (every day equal), change_points_found (the result is not empty), edge_start / edge_end (the strongest split sits on the first or last day a break can fall on, so it cannot be dated), trend (a straight line explains it) or small_shift (under 10%).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations it discloses data-source fallback (ClickHouse when available, else live Search Console API), the 14-day spacing rule for separate breaks, zero-fill semantics for missing rows, and the changePercent-is-0-from-zero-baseline convention that would otherwise be misread. The shape taxonomy (step/gradual/ambiguous) and instruction never to describe a gradual break as a one-day event is exactly the kind of interpretive guardrail annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loading is strong: intent, exclusions, then output semantics. But it is a single dense block that drifts into explaining return fields (beforeMean, segmentAfter, coverage, emptyBecause) that the output schema already documents, so several sentences are duplicative rather than additive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers what an agent needs to call and interpret the tool: window behavior, source fallback, zero-baseline handling, and the gradual-vs-ambiguous caveat. Slight over-completeness given the output schema exists, but no critical gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the schema already defines days, metric, startDate/endDate and sensitivity in detail. The description adds no parameter-specific syntax or defaults beyond implying the 14-day minimum via break spacing; it spends its parameter budget on output interpretation instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('detect change points' in clicks/impressions that moved to a sustained level) and immediately names the sibling it is not ('Not for one-off spikes: use detect_anomalies; for totals use get_site_summary'). An agent can route on the first sentence alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit triggering user intent ('when the user asks when a property's clicks or impressions moved to a new sustained level'), two named alternatives with the conditions that select them, plus a fallback path when no step exists (read trendSummary, emptyBecause, strongestShiftReason).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_decaying_contentFind decaying contentA
Read-only
Inspect

Use this when the user asks which pages or queries are losing clicks. Finds queries or pages losing traffic between a baseline (earlier) period and a recent period. startDate/endDate is the RECENT period; comparisonStartDate/comparisonEndDate is the BASELINE period. Not for a period-by-period matrix (clicks/impressions/position per month or week, like the app's Query Decay / Content Decay pages): use get_decay_overview; for position movers, get_ranking_changes. A key is considered when its baseline has at least minImpressions impressions (default 100; when you leave it out and nothing qualifies, the tool retries once at 10 and reports minImpressionsAutoRelaxed; a value you pass is always applied as given) and at least minBaselineClicks clicks (default 5; decliners under it are counted in belowClickFloor). Each row has clicksLost (baseline minus recent) and a severity that needs both a share and an absolute loss: severe = over 50% AND at least 5 clicks lost, moderate = over 20% AND at least 2, otherwise mild. lowConfidence: true marks a loss under 2 Poisson standard deviations ((baseline - recent) / sqrt(baseline + recent) < 2), which chance alone produces. pattern is the LIKELY cause read from the key's own totals (proving a query-mix shift needs a page x query read); first match wins: lost_from_search (no recent impressions), ranking_loss (position 3+ worse), long_tail_pruned (position 3+ better AND impressions down 30%+: low-ranked impressions dropped away, which lifts the average position), demand_drop (position steady, impressions down 20%+), low_volume (under 10 baseline clicks), ctr_loss (position and impressions steady, CTR down), else unclear. positionDelta is recentPosition - baselinePosition, so POSITIVE means WORSE; it is 0 for a key with no recent row. Returns at most limit rows (default 100, max 1000), ordered by sortBy: clicksLost (default, largest loss first) or clickChangePct (most negative first); sortedBy/sortOrder state it. With dimension query only the queries Google lists can appear: on most properties a large share of clicks has no query row (analyze_sampling_impact measures it). The baseline is scanned for its top scanLimit keys by clicks (warehouse: max(limit*10, 1000), capped at 50000; live API: 25000 rows per period). On the warehouse every scanned key's recent figure is exact. On the live API the recent period is its own top 25000, so a key missing from a full recent read is not known to be at zero: its recent clicks are at most the smallest count that read kept. When that ceiling is still below the key's baseline, the row is reported with recentIsUpperBound: true: recentClicks is the ceiling, the real loss is AT LEAST |clickChangePct| (and clicksLost), severity is a floor, and its recent impressions and position are unknown (0). When the ceiling shows no loss, the key is left out and counted in unresolvedKeys. When the two windows differ in length the comparison is per day: baseline clicks are scaled to the recent window (windowNormalization says so; each row adds baselineClicksScaled, which clickChangePct, clicksLost and minBaselineClicks use, and baselineClicks stays the raw total). truncated: true means a read hit its cap, so counts are measured within the scan, not across the whole property. Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoMaximum decaying rows to return (1-1000).
sortByNoRow order: clicksLost (largest absolute loss first, the default) or clickChangePct (most negative first).clicksLost
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
dimensionNopage
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
minImpressionsNoMinimum baseline impressions per key (default 100). When left out and nothing qualifies, the tool retries once at 10 and reports `minImpressionsAutoRelaxed`; a value you pass, including 100, is always applied as given.
comparisonEndDateNoOptional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here.
minBaselineClicksNoMinimum baseline clicks per key (default 5). Decliners under it are left out and counted in `belowClickFloor`; 1 lists every decliner.
comparisonStartDateNoOptional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here.

Output Schema

NameRequiredDescription
noteNo
countsNo
recentNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
baselineNo
decayingNo
nextStepNo
orderingNo
sortedByNo
dimensionNo
scanLimitNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
minImpressionsNo
settledThroughNo
unresolvedKeysNo
belowClickFloorNo
minBaselineClicksNo
warehouseLatestDateNo
windowNormalizationNo
minImpressionsAutoRelaxedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/non-destructive; the description adds substantial behavior: default minImpression auto-relax to 10 with the minImpressionsAutoRelaxed flag, severity rules requiring both share and absolute loss, lowConfidence Poisson threshold, deterministic pattern-classification order, warehouse vs live-API scan caps, recentIsUpperBound semantics, windowNormalization, and truncated counts. This is exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly: the selection cue and date-role explanation come first. It is long and dense, though, and some implementation detail (the exact Poisson formula, warehouse row caps) is heavier than an agent needs for selection, so a little trimming would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool that switches between a warehouse and the live API and has an output schema, the description covers the traps that would cause wrong calls or wrong interpretation: upper-bound rows, unresolved keys, per-day normalization, and truncation. Nothing material to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 82%, so the baseline is 3; the description still adds real meaning beyond the schema — which date pair is recent vs baseline, that a passed minImpressions is never auto-relaxed, that minBaselineClicks decliners land in belowClickFloor, and that sortBy ordering is largest-loss or most-negative-percentage first. Remaining gaps are minor (siteUrl and searchType behavior are left to the schema).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+user intent ('which pages or queries are losing clicks') and immediately names the baseline-vs-recent comparison model. It explicitly distinguishes itself from get_decay_overview (period matrix) and get_ranking_changes (position movers), so the agent can select it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('when the user asks which pages or queries are losing clicks'), explicit when-not-to-use, and names two concrete alternatives with the conditions that select each. It also flags the query-dimension sampling caveat and points to analyze_sampling_impact.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_page_poaching_opportunitiesFind page poaching opportunitiesA
Read-only
Inspect

Use this when the user asks which queries could gain the most clicks by moving up. Finds queries ranking just outside the top positions (between minPosition and maxPosition) and estimates the click upside of pushing them to a target position. Not for an impression-weighted score across positions 3-30: use score_opportunities. The upside uses the property's OWN CTR at the target position (measured over every query in the window on the warehouse), not an industry benchmark. Only queries Google lists are scanned: on most properties a large share of clicks has no query row (analyze_sampling_impact measures it). When the property has no queries at the target position, or fewer than 100 impressions there, it falls back to the industry benchmark named by fallbackBenchmark: awr (Advanced Web Ranking 2026, default), awr2026 (AWR 2026 CTR study, organic), awrAio (same study, SERPs with an AI Overview), firstPageSage (First Page Sage 2026), sistrix (Sistrix 2024), or backlinko (Backlinko 2019). The response reports targetCtr (the expected CTR used; it and each row's ctr are 0-100 percentages), ctrSource ("own" or the benchmark key) and ctrSourceNote (why). Sorted by potentialClicks, largest first. Scans up to 25,000 queries: on the warehouse the ones with the most impressions; on the live API its click order. truncated: true means the scan hit that cap (scanNote says what that left out). minImpressions defaults to 10 (it also floors the own CTR curve); when it is left out and no query passes, the tool retries once at 1 on its own and says so in minImpressionsAutoRelaxed (minImpressions is always the floor applied). Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
maxPositionNo
minPositionNo
minImpressionsNoMinimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given.
targetPositionNo
fallbackBenchmarkNoawr

Output Schema

NameRequiredDescription
noteNo
rangeNo
paramsNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
scanNoteNo
sortedByNo
ctrSourceNo
scanLimitNo
sortOrderNo
targetCtrNo
thenOrderNo
truncatedNo
dataSourceNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
ctrSourceNoteNo
opportunitiesNo
minImpressionsNo
settledThroughNo
warehouseLatestDateNo
minImpressionsAutoRelaxedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint/destructiveHint already covering safety, the description still discloses the non-obvious mechanics: own-CTR-at-target-position calculation, the full fallback benchmark ladder and its trigger conditions, the 25,000-query scan cap with truncation semantics, the auto-relax retry behavior for minImpressions, warehouse-vs-live-API sourcing, and the ~2-3 day data lag. Nothing here contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in sentence one, and nearly every sentence adds decision-relevant detail (fallback conditions, scan cap, auto-relax) rather than restating the name. It is a single ~350-word block, though, and would be easier to scan if the fallback/scan/date-range material were broken out.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters, a low schema coverage, and an output schema, the description supplies everything an agent needs to invoke correctly: range semantics, defaults, fallback selection, truncation risk, and date-lag handling. Return-value explanations (targetCtr, ctrSource, scanNote) partly duplicate the output schema but don't leave gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description has to carry weight — and it does: it explains minImpressions' default, auto-relax retry, and floor role, expands each fallbackBenchmark enum value, and gives meaning to minPosition/maxPosition/targetPosition. It never mentions `limit`, leaving one parameter undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — finds queries ranking just outside the top (between minPosition and maxPosition) and estimates click upside of moving them to a target position. The opening sentence is framed as a user question, and the explicit contrast with score_opportunities makes it distinguishable from siblings without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ("Use this when the user asks which queries could gain the most clicks by moving up") and an explicit exclusion with the alternative named ("Not for an impression-weighted score across positions 3-30: use score_opportunities"). The when and the when-not are both stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forecast_trafficForecast organic trafficA
Read-only
Inspect

Use this when the user asks how much search traffic to expect in coming weeks or months. Projects future Search Console clicks (or impressions) for a property using the app's forecasting model: multiplicative seasonal decomposition (ratio-to-moving-average) plus an auto-selected trendline (linear / polynomial / log / exponential / power by best R-squared), re-seasonalised for each future period. Not for explaining a past change: use detect_change_points. forecast runs oldest period first, candidateTrendlines best r2 first; *Sessions fields count the chosen metric (clicks or impressions). Optionally applies a manual growth rate and derives revenue from a conversion rate and average order value. History needs: weekly needs 13 complete weeks and monthly 6 complete months, after the first and last (possibly partial) period are dropped, so about 105 days (weekly) or 240 days (monthly) of data. Days and periods without rows count as zero. A constant history (for example all zero) gets a flat forecast with forecastNote. Reads the ClickHouse warehouse when available, else the live Search Console API.

NameRequiredDescriptionDefault
aovNoOptional average order value (in currency units) used with cvr for revenue.
cvrNoOptional conversion rate as a decimal (0.025 = 2.5%) to derive forecast revenue.
metricNoMetric to forecast (treated as "sessions" by the model).clicks
siteUrlYes
currencyNoCurrency label for the revenue fields (display only).USD
growthRateNoOptional manual growth rate per period as a decimal (0.05 = +5%). Default 0.
granularityNoForecast granularity. Weekly needs about 105 days of history (13 complete weeks), monthly about 240 days (6 complete months).weekly
historyDaysNoTrailing days of history to fit on (default 480 ≈ 16 months; more improves seasonality).
trendlineTypeNoForce a trendline model, or "auto" for the best R-squared (default).auto
compoundGrowthNoCompound the growth rate across periods (default true).
forecastPeriodsNoHow many future periods (weeks or months) to project. Default 26.
additionalSessionsNoOptional flat sessions added to every forecast period. Default 0.

Output Schema

NameRequiredDescription
noteNo
metricNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
currencyNo
forecastNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
trendlineNo
dataSourceNo
granularityNo
partialDaysNo
dataMaturityNo
forecastNoteNo
historyRangeNo
settledThroughNo
seasonalIndicesNo
historicalPeriodsNo
candidateTrendlinesNo
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, and the description adds substantial context beyond them: the modeling approach, minimum history thresholds with the partial-period dropping rule, zero-filling of missing days/periods, the constant-history flat-forecast edge case with forecastNote, and the warehouse-vs-live-API data source. These are exactly the behaviors an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly: use case, exclusion, then mechanics, so an agent can decide before reading the modeling internals. It is dense and near the useful limit — the trendline-algorithm enumeration and R-squared asides add credibility but are more than an agent needs to invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter forecasting tool with an output schema, the description covers the remaining unknowns: history minimums and data-window math, partial-period handling, zero-fill semantics, degenerate-history behavior, and degraded-mode data source. Nothing an agent needs in order to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 92%, so the baseline is 3; the description earns one more by explaining cross-parameter behavior the schema doesn't: growthRate/cvr/aov optionally combine for revenue, metric choice propagates into the *Sessions output fields, and history requirements differ per granularity. Much of the detail (defaults, enums) is redundant with the schema, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Projects future Search Console clicks (or impressions) for a property") and names the scope (coming weeks/months). It also explicitly separates itself from the closest sibling, detect_change_points, so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit when-to-use trigger ("user asks how much search traffic to expect in coming weeks or months") and immediately gives a when-not plus the named alternative ("Not for explaining a past change: use detect_change_points"). Both halves of the routing decision are stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_seo_reportGenerate full SEO reportA
Read-only
Inspect

Use this when the user wants a full SEO report or health check for one property: runs the whole analysis suite in one call (overview, top queries/pages, countries & devices, CTR curve vs benchmark, opportunities, ranking changes, decaying content, query decay matrix, cannibalization, section breakdown, data coverage, sitemaps, GA4 when linked). Far faster than calling each analysis tool separately (one round trip, shared auth + property resolution, server-side parallel reads), and served from the ClickHouse warehouse when available. Not for one headline number: use get_site_summary. format="compact" gives a few numbers per section, each with a drill naming the tool and arguments that reproduce it: use it to answer from the numbers or to chain into those tools for follow-ups. format="html" (default) is a finished, self-contained report styled like the GSC Wizard app, to hand to the user. format="json" is every sub-result in full (large).

NameRequiredDescriptionDefault
daysNoLength of the reporting window (and each comparison window).
formatNohtml
siteUrlYesProperty URL from list_sites (e.g. "sc-domain:example.com").
includeSitemapNoFetch + join the property’s sitemap (adds a network fetch).

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/openWorldHint/destructiveHint=false, so safety is covered; the description adds real behavioral context beyond that: single round trip, shared auth and property resolution, server-side parallel reads, and a ClickHouse warehouse serving path. It stops short of stating latency expectations, failure modes, or cost on large properties.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the trigger, the scope, the differentiator, and the exclusion all arrive before the format detail. The long parenthetical enumeration of sub-analyses is the only place it could be trimmed, but it doubles as scope disclosure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary, and the description still covers the decisions an agent must make: when to use it, when not to, and which format to request for which downstream behavior. Nothing material is missing for a 4-parameter, non-nested tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description carries the key gap itself: it explains all three format values (compact with `drill` pointers, self-contained html default, full json) even though the schema's format enum has no description. It also gestures at the sitemap inclusion and analysis breadth, though `days` is left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('runs the whole analysis suite in one call' for a 'full SEO report or health check for one property') and enumerates the sub-analyses included. It explicitly distinguishes itself from the sibling get_site_summary, so an agent can pick it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user wants a full SEO report or health check for one property') and an explicit exclusion with the alternative named ('Not for one headline number: use get_site_summary'). It also routes by output need via the format values.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_infoGet account infoA
Read-only
Inspect

Use this when the user asks which Google accounts, scopes or plan their GSC Wizard login has. Returns the authenticated user, the connected Google accounts (email + scopes), and the subscription status. Useful as a first call to confirm the MCP server is wired up correctly and the user has the data sources you expect. Not for the property list: use list_sites. googleAccounts are oldest first (connectedAt ascending); the first is isPrimary, the default account.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
userNo
accessNo
apiKeyNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
warningNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo
subscriptionNo
googleAccountsNo
profileUnavailableNo
subscriptionUnavailableNo
googleAccountsUnavailableNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the description adds value with non-obvious behavior: the googleAccounts ordering (connectedAt ascending) and that the first entry is the primary/default account. It stops short of stating failure modes, such as what is returned when no Google account is connected or a token has expired.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition, followed by the payload, a diagnostic use case, and the sibling exclusion, then the ordering caveat. Every sentence carries distinct information; nothing restates the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape needn't be spelled out, yet the description still names the three returned components and their ordering. For a zero-parameter, read-only info tool this covers everything an agent needs to select and call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate and the baseline is 4. The return-ordering note is the closest thing to a semantic hint and is already covered above.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get/returns) plus the exact payload: authenticated user, connected Google accounts with email + scopes, and subscription status. It also explicitly separates itself from list_sites, so the agent can distinguish it from the property-listing siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both triggers ('when the user asks which Google accounts, scopes or plan') and a second diagnostic use case ('first call to confirm the MCP server is wired up'). It also names the exclusion and the correct alternative: 'Not for the property list: use list_sites.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_crawl_issuesBing crawl issuesA
Read-only
Inspect

Use this when the user asks which of their URLs Bing has trouble crawling. URLs where Bing found crawl issues for a property: HTTP 4xx/5xx, 301/302 redirects, robots.txt blocks, DNS/timeout errors and malware, each with the HTTP code, inbound-link count, and decoded human-readable issue labels. Rows are sorted by inbound links, most first, then by URL A to Z. Not for daily crawl totals: use get_bing_crawl_stats; for Google's view of one URL use inspect_url. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
limitNoMax issue URLs to return, most inbound links first (default 200, uncapped).
siteUrlYes

Output Schema

NameRequiredDescription
hintNo
rangeNo
issuesNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safe-read profile (readOnlyHint, destructiveHint=false), but the description adds genuinely new behavioral facts: the sort order (inbound links desc, then URL A-Z) and the 'notConfigured: true' state when no Bing API key exists for the property. The remaining row-level field listing is largely duplicative of the output schema, keeping it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, then issue types, then ordering, then exclusions — a sensible priority order with no filler sentences. Slightly dense in the middle enumeration, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and annotations already present, the description only needs to add what structure can't express: the use case, the sort order, and the notConfigured failure mode. All three are covered; the only minor hole is siteUrl formatting, which is a parameter-level rather than completeness-level gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% and the undocumented parameter is siteUrl — the required one. The description says issues are returned 'for a property' but never specifies the expected URL format (bare domain vs. full URL vs. Bing site identifier), so an agent must guess. The 'limit' semantics are fully handled by the schema, which is why this sits at the baseline rather than lower.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('which of their URLs Bing has trouble crawling') and enumerates the exact issue classes returned (4xx/5xx, redirects, robots.txt blocks, DNS/timeout, malware) plus the fields attached to each row. It is clearly distinguishable from get_bing_crawl_stats and inspect_url, which are named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks which of their URLs Bing has trouble crawling') and adds two exclusions with the correct alternatives: daily crawl totals go to get_bing_crawl_stats, single-URL Google view goes to inspect_url. No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_crawl_statsBing crawl statsA
Read-only
Inspect

Use this when the user asks how Bing crawls and indexes their site over time. Bing's daily crawl statistics for a property (roughly the last 6 months): pages crawled, pages in the index, inbound links, and a breakdown of response codes (2xx, 301, 302, 4xx, 5xx), robots.txt blocks, crawl errors and malware flags. Rows are sorted by date, oldest first; a day Bing did not report is missing, not zero. Not for the URLs behind the errors: use get_bing_crawl_issues. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".

Output Schema

NameRequiredDescription
hintNo
dailyNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past readOnlyHint/openWorldHint annotations by disclosing row ordering (date, oldest first), the missing-vs-zero semantics for unreported days, and the notConfigured:true failure mode when no Bing Webmaster API key exists for the property — none of which the annotations or schema convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the trigger, then scope, then return shape, then the exclusion. Every sentence carries either routing or data-shape information; nothing is restated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-required-param reporting tool with an output schema, all gaps are covered: when to call, what is returned, ordering, sparse-day semantics, and the auth-missing configuration state. Nothing an agent needs to call or interpret it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the date parameters are already documented in-schema, so the description's main contribution is the ~6-month crawl-data retention window that frames what the date range can span. It does not clarify the siteUrl format (URL vs. property string), which the schema leaves undocumented, so it stops short of full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource — 'Bing's daily crawl statistics for a property' — and enumerates the metric families returned (crawled pages, index count, inbound links, response-code breakdown, robots.txt blocks, errors, malware). It also differentiates itself from the Bing sibling it is most likely confused with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how Bing crawls and indexes their site over time') and closes with an explicit exclusion plus the alternative ('Not for the URLs behind the errors: use get_bing_crawl_issues'). Both when-to-use and when-not-to-use are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_feedsBing submitted sitemapsA
Read-only
Inspect

Use this when the user asks which sitemaps Bing has for their site, or whether Bing reads them cleanly. Sitemaps and feeds submitted to Bing Webmaster Tools for a property, sorted by URL, with each feed's decoded status (Success / Pending / Warning / Error), type (Sitemap / RSS / Atom / ...), submitted and last-crawled dates, URL count and file size. A date of 1601-01-01 is Bing's empty value, not a real date. Not for Google sitemaps: use list_sitemaps, its Google counterpart. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
hintNo
feedsNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides highly specific operational behavioral knowledge, including the meaning of the empty date (1601-01-01), what data points are returned (status, type, URL count), and the exact failure mode (returns notConfigured: true when no API key is set).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While somewhat verbose due to the complexity of the data returned, every sentence has a critical function, covering purpose, scope, behavior, and exclusion efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the returned data (multiple status types, dates, counts, and configuration errors), the description is exceptionally complete in defining the operational contract of the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only one simple required parameter (`siteUrl`) and 0% schema description coverage, the description adds no semantic value to the input itself. It meets the baseline expectation for single-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the function (getting submitted sitemaps) and uses strong differentiation by explicitly stating its counterpart ('list_sitemaps') for Google sitemaps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly provides conditions for usage ('when the user asks which sitemaps Bing has') and provides a direct negative guidance/alternative use case, directing the agent away from the wrong tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_keyword_statsBing keyword impression historyA
Read-only
Inspect

Use this when the user asks how much Bing search demand a keyword has, or how it moves with the seasons. Bing Webmaster Tools' historical impression volume for a single keyword (weekly buckets, oldest first), plus its broad-match impressions. This is Bing marketplace demand data, not tied to any of your properties, so it needs no siteUrl. Not for your site's Bing queries: use get_bing_query_stats. Returns notConfigured: true when no Bing Webmaster API key is set up in the GSC Wizard app.

NameRequiredDescriptionDefault
countryNoTwo-letter market/country code Bing scopes the demand to (default "us").us
keywordYesThe keyword / search term to look up.
languageNoBCP-47 language tag for the market (default "en-US").en-US

Output Schema

NameRequiredDescription
hintNo
countNo
statsNo
thenByNo
countryNo
keywordNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
warningNo
languageNo
nextStepNo
orderingNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and open-world, but the description adds material context: weekly buckets ordered oldest-first, inclusion of broad-match impressions, that it is marketplace demand data requiring no siteUrl, and the notConfigured: true failure mode when no API key exists. That last item is an error behavior an agent could not infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each doing distinct work: trigger, what it returns, scope clarification, sibling exclusion, and failure mode. The trigger and the sibling routing are front-loaded, and nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return shape needn't be explained, and the description still covers the non-obvious parts an agent needs: bucket granularity and ordering, broad-match inclusion, no siteUrl requirement, and the notConfigured precondition. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so country, language, and keyword are fully documented in the schema and the default values are visible. The description only adds the negative fact that no siteUrl is needed, which clarifies scope rather than parameter usage. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('historical impression volume for a single keyword') plus the analysis angle ('how it moves with the seasons'), and explicitly contrasts with the sibling get_bing_query_stats. An agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how much Bing search demand a keyword has') and gives an explicit exclusion with the named alternative ('Not for your site's Bing queries: use get_bing_query_stats'). Covers both when and when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_page_queriesBing queries for a pageA
Read-only
Inspect

Use this when the user asks which Bing searches lead to one page. The Bing search queries that led to ONE landing page (clicks, impressions, CTR as a 0-100 percentage, over 100 if Bing logs more clicks than impressions, and impression-weighted average position per query): Bing's per-page keyword view, and the drill-down after get_bing_page_stats. Bing reports only the page's top queries, dated by week, so they sum to at most its get_bing_page_stats row. Not for Google: use query_search_analytics filtered to the page. Rows are sorted by clicks, then impressions, highest first. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
pageYesThe landing page URL to break down, exactly as get_bing_page_stats returns it (e.g. https://example.com/blog/post/). Bing matches the full URL, not a prefix.
limitNoMax queries to return, ranked by clicks then impressions (default 100, uncapped).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".

Output Schema

NameRequiredDescription
hintNo
pageNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
queriesNo
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only/open-world safety profile, but the description adds substantial context: data is limited to the page's top queries, dated by week, and sums to at most the get_bing_page_stats row; rows are sorted by clicks then impressions; and it returns notConfigured: true when no Bing Webmaster API key exists. That is genuine failure-mode and data-completeness disclosure an agent could not infer elsewhere.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The use case is front-loaded in the first sentence and every subsequent sentence carries real information. The middle sentence is a dense run-on with a long parenthetical about CTR and position, which slows parsing slightly but does not waste words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter read tool with an output schema, the description covers everything extra an agent needs: data retention (~16 months), top-query truncation, weekly granularity, sort order, and the notConfigured failure state. Return values need not be explained further given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80% and already documents page, limit, startDate and endDate thoroughly, so the baseline is 3. The description adds one useful semantic detail ('dated by week') that affects how date windows behave, and explains the CTR/position computation, but it never mentions siteUrl — the one parameter with no schema description — leaving that gap unfilled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('The Bing search queries that led to ONE landing page') and opens with the exact user question it answers. It explicitly distinguishes itself from get_bing_page_stats (this is the drill-down) and from query_search_analytics (the Google equivalent), so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a positive trigger ('when the user asks which Bing searches lead to one page'), a workflow position ('drill-down after get_bing_page_stats'), and a named exclusion with the alternative ('Not for Google: use query_search_analytics filtered to the page'). Both when and when-not are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_page_statsBing top pagesA
Read-only
Inspect

Use this when the user asks which pages Bing sends the most traffic to. Top landing pages on Bing Webmaster Tools for a property, aggregated across the window (clicks, impressions, CTR as a 0-100 percentage, and impression-weighted average position). Not for Google pages: use query_top_pages; for one page's queries use get_bing_page_queries. Bing dates page rows by week, so a window selects whole weeks by date. Rows are sorted by clicks, then impressions, highest first. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
limitNoMax pages to return, ranked by clicks then impressions (default 100, uncapped).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".

Output Schema

NameRequiredDescription
hintNo
pagesNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover safety (readOnly/openWorld), while the description adds real behavioral context: weekly date bucketing, row sort order, metric scaling (CTR 0-100, impression-weighted average position), and the notConfigured return when no API key exists. It stops short of describing pagination or result-size behavior beyond the limit param, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case first, then metrics, then alternatives and gotchas. Nearly every sentence carries a distinct constraint, though the metric parenthetical and the week-bucketing note make it dense for a single paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape needn't be described, and the description covers the remaining gaps an agent needs: data source (Bing Webmaster Tools), date-window semantics, sort order, and the no-key failure mode. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and already documents limit, date format, and the omit-both-dates behavior. The description still adds meaning the schema lacks: that a date window snaps to whole weeks because Bing buckets page rows weekly, which affects how an agent should pick start/end dates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Top landing pages on Bing Webmaster Tools for a property', with the metrics returned named inline. It explicitly distinguishes itself from query_top_pages (Google) and get_bing_page_queries (queries for one page), so an agent can route without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the triggering user question ('which pages Bing sends the most traffic to') and names both alternatives plus the condition that selects each. Exclusion ('Not for Google pages') and the one-page-per-query alternative are stated directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_query_page_statsBing query + page pairsA
Read-only
Inspect

Use this when the user asks which Bing queries drive which of their pages. Bing Webmaster Tools query+landing-page pairs for a property, aggregated across the window (clicks, impressions, CTR as a 0-100 percentage, over 100 if Bing logs more clicks than impressions, and impression-weighted average position per pair): the basis for per-page keyword analysis and cannibalisation checks. Bing has no endpoint that returns these combinations, so they are assembled with one request per top page; pass query to pair from a single query instead, or use get_bing_page_queries for one page's queries. Coverage is bounded by seedLimit and by Bing's own top-value sampling, so totals are a lower bound (truncated says when). Bing dates the rows by week, so a window selects whole weeks by date. Not for Google cannibalisation: use analyze_cannibalization. Pairs are sorted by clicks, then impressions, highest first. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
limitNoMax query/page pairs, ranked by clicks then impressions (default 100, uncapped).
queryNoOptional. Pair from this single search query (Bing lists the pages that ranked for it) instead of fanning out over the top pages. Use it to answer "which pages compete for this term?".
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".
siteUrlYes
seedLimitNoHow many top pages to expand into pairs (default 25, max 100). Each one is a separate Bing request, so raising it widens coverage but is slower and likelier to hit Bing rate limits. Only applies to the page fan-out, so a call that passes `query` uses it only if that path has to fall back to pairing by page.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".

Output Schema

NameRequiredDescription
hintNo
notesNo
pairsNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
pairedByNo
rowCountNo
sortedByNo
dateBasisNo
seedCountNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Well beyond the annotations (readOnly/openWorld/non-destructive are already declared): it discloses that Bing has no endpoint for these combinations, that they are assembled with one request per top page (rate-limit implications), that coverage is a lower bound bounded by seedLimit and Bing's own sampling with a `truncated` flag, and that rows are dated by week. The only missing piece is a note on latency/cost of raising seedLimit beyond the schema's own text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger phrase, and each sentence carries distinct information (aggregation, fan-out mechanics, coverage bounds, weekly dating, sort order, notConfigured). It is a single dense paragraph, though, and the parenthetical of metrics plus the coverage caveats make it slower to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values needn't be spelled out, yet the description still flags the notConfigured: true case an agent must handle. Combined with the fan-out cost model, truncation caveat, weekly date semantics and sort order, an agent has everything needed to call and interpret this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 83% schema coverage the baseline is 3, and the description earns above that by explaining the `query` shortcut (pair from a single query instead of fanning out) and the interaction where seedLimit only applies to the page fan-out or a fallback path. This meaning is partly duplicated in the schema property descriptions, but the description makes the query/seedLimit tradeoff explicit in one place.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: Bing Webmaster Tools query+landing-page pairs for a property, aggregated over a window with clicks, impressions, CTR and impression-weighted position. It explicitly differentiates itself from siblings by naming get_bing_page_queries and analyze_cannibalization as the tools for adjacent questions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks which Bing queries drive which of their pages') and gives three alternatives with the conditions that select them: pass `query` for a single query, use get_bing_page_queries for one page, use analyze_cannibalization for Google. When-to-use and when-not-to-use are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_query_page_trendBing query + page trendA
Read-only
Inspect

Use this when the user asks whether a page slipped on Bing for one search term. Clicks, impressions, CTR (0-100 percentage) and position over time for ONE exact query+landing-page combination on Bing, the only Bing endpoint that carries a true pair-level position. Each row in daily is one date and position Bing recorded (Bing records about once a week, and a date can repeat with a second position); totals.position is impression-weighted. Take the query and page verbatim from get_bing_query_page_stats or get_bing_page_queries. Not for Google: use get_query_performance with a page. Rows are sorted by date, oldest first, then by position. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
pageYesThe landing page URL, exactly as Bing reports it (full URL, not a prefix).
queryYesThe search query, exactly as Bing reports it.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".

Output Schema

NameRequiredDescription
hintNo
pageNo
dailyNoOne row per week and position Bing recorded, so a date can repeat.
queryNo
rangeNo
thenByNo
totalsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld annotations: it discloses that Bing records position roughly weekly, that a date can repeat with a second position, that totals.position is impression-weighted, that rows are sorted oldest-first then by position, and that the call returns notConfigured: true when no Bing Webmaster API key exists. These are non-obvious traits an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the metric list, then row semantics, then input sourcing, then the alternative, then the error case — a logical order with no filler. It is dense and long-ish with several clauses packed per sentence, which costs it a point on readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Five parameters, an output schema, and a real mutation-free read path are all covered: the description explains the shape of `daily` and `totals.position`, the sort order, the API-key failure mode, and where to obtain valid inputs. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the schema already documents page, query, startDate and endDate. The description still adds value by stressing the verbatim, exact pair requirement and by naming the sibling tools to copy the values from, but it does not add anything about the date window beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (query+page trend for one Bing query/landing-page pair) and states the exact metric set returned (clicks, impressions, CTR, position). It explicitly distinguishes itself from the nearest siblings by claiming it is 'the only Bing endpoint that carries a true pair-level position'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the trigger ('when the user asks whether a page slipped on Bing for one search term'), names the exclusion ('Not for Google: use get_query_performance with a page'), and points to the two sibling tools that supply the exact inputs. When/when-not/alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_query_statsBing top queriesA
Read-only
Inspect

Use this when the user asks which Bing searches bring them traffic. Top Bing Webmaster Tools queries for a property, aggregated across the window (clicks, impressions, CTR as a 0-100 percentage, and impression-weighted average position). Not for Google queries: use query_top_queries; for one page use get_bing_page_queries. Bing reports only its top queries, dated by week: a window selects whole weeks, and the rows do not sum to get_bing_traffic_stats totals. Rows are sorted by clicks, then impressions, highest first. rowCount counts the rows returned (at most limit), totalRows the distinct queries Bing reported before that cut. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
limitNoMax queries to return, ranked by clicks then impressions (default 100, uncapped).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".

Output Schema

NameRequiredDescription
hintNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
queriesNo
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
totalRowsNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/open-world, but the description discloses substantial extra behavior: Bing reports only top queries, data is dated by week so a window snaps to whole weeks, rows do not reconcile with get_bing_traffic_stats totals, sort order, and a notConfigured: true failure mode when no API key exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition, then caveats, then sorting/count semantics and the error case. Dense but every sentence carries decision-relevant information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still clarifies the two ambiguous count fields and the notConfigured case, and the weekly-aggregation caveat prevents a common misreading of the results. Nothing an agent needs to select or call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and already documents limit/startDate/endDate formats. The description adds real meaning on top: it explains that a date window selects whole weeks, that rowCount is capped by `limit` while totalRows is the pre-cut distinct query count, and the aggregation semantics of the window.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Top Bing Webmaster Tools queries for a property') and enumerates the returned metrics (clicks, impressions, CTR, average position). It is immediately distinguishable from Google-query and single-page siblings by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the exact user phrasing that should trigger it ('which Bing searches bring them traffic') and names both alternatives with their selecting conditions: query_top_queries for Google, get_bing_page_queries for a single page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_traffic_statsBing daily trafficA
Read-only
Inspect

Use this when the user asks how much traffic Bing sends their site over time. Daily clicks and impressions from Bing Webmaster Tools (Bing/Yahoo/DuckDuckGo organic) for a property, up to about 16 months, plus window totals. Complements Google Search Console data with the Bing side of organic search. Not for Google traffic: use get_site_summary. Rows are sorted by date, oldest first. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string "null".

Output Schema

NameRequiredDescription
hintNo
dailyNo
rangeNo
thenByNo
totalsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
dateBasisNo
sortOrderNo
thenOrderNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a read-only, non-destructive, open-world read, so the safety profile is covered; the description adds real behavioral value on top: the ~16-month data horizon, oldest-first date sorting, window totals, and the notConfigured: true state when no Bing API key exists. It doesn't discuss pagination or rate limiting, but the special return state is exactly the kind of operational detail annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case, then scope, then exclusions, then output behavior — a sensible order with no filler. The GSC-complement sentence is mildly redundant with the preceding one, keeping it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no prose, and the description still flags the notable notConfigured case and sort order. Parameters and the required siteUrl are handled by the schema, so an agent has what it needs to call this correctly; only minor detail (multiple properties, date semantics) is left to schema inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the two optional date parameters already have thorough schema descriptions (format, omit-both-for-everything, 16-month limit). The description only alludes to a 'window' and 16-month horizon; it never explains startDate/endDate behavior or the required siteUrl. With the schema doing most of the work, this lands at the baseline 3 rather than higher.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get daily Bing traffic stats) and pins the scope precisely: daily clicks and impressions from Bing Webmaster Tools for a property, up to ~16 months, plus window totals. It explicitly names the sibling it is not (get_site_summary for Google traffic) and positions itself relative to Google Search Console, so an agent can distinguish it from the many other bing_* tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening sentence gives the exact triggering question ('how much traffic Bing sends their site over time'), and 'Not for Google traffic: use get_site_summary' supplies an explicit exclusion plus the correct alternative. That covers when-to-use, when-not, and the redirect target in two sentences.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_url_submission_quotaBing URL submission quotaA
Read-only
Inspect

Use this when the user asks how many URLs they can still submit to Bing today or this month. Remaining Bing Webmaster Tools URL-submission quota for a property: the daily and monthly allowances left for submitting URLs to Bing's index. Not for IndexNow submission history: use list_indexnow_submissions. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
hintNo
rangeNo
siteUrlNo
warningNo
dateBasisNo
dailyQuotaNo
dataSourceNo
bingSiteUrlNo
partialDaysNoRequested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today.
completenessNo
monthlyQuotaNo
notConfiguredNo
latestDataDateNoNewest date with a row in everything Bing sent for this call, before the window filter.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, non-destructive, and open-world behavior, so the description does not need to restate those traits. It adds useful behavioral context beyond annotations: quota is scoped to a property and returns notConfigured: true when no Bing Webmaster API key is configured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loads the usage condition, then defines the resource, then gives the exclusion and notConfigured behavior. Every sentence adds distinct guidance without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description need not explain return fields. It covers purpose, usage, alternative routing, and the notConfigured case. The main remaining gap is siteUrl format, which is not clarified in either the schema or the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for the single siteUrl parameter. It implies siteUrl identifies a property, but it does not specify expected format (full URL vs. hostname) or validation constraints beyond minLength. This is minimally adequate but leaves a meaningful gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: remaining Bing Webmaster Tools URL-submission quota for a property, covering daily and monthly allowances. It clearly distinguishes the tool from IndexNow submission history by naming the sibling tool to use instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool ('when the user asks how many URLs they can still submit to Bing today or this month') and when not to use it ('Not for IndexNow submission history: use list_indexnow_submissions'). That is direct routing guidance with an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_blended_landing_pagesBlended GSC + GA4 landing pagesA
Read-only
Inspect

Use this when the user asks how a page's Search Console clicks line up with its GA4 outcomes. Joins Search Console (clicks, impressions, CTR, position) with GA4 (sessions, bounce rate, key events, revenue) per landing page, on the canonical path (no query/hash, no trailing slash). Flags GSC-only and GA4-only pages so neither side is silently dropped. Rows are sorted by clicks, highest first (ties by sessions), period by period with dateGranularity. Not for value per search query: use get_query_value_attribution. By default GA4 metrics are limited to google / organic sessions so both sides describe the same traffic (organicOnly: false for all-traffic GA4 metrics). Units differ by source: ctr is a percentage 0-100 (like every GSC CTR here) while bounceRate is a GA4 fraction 0-1. For a URL-prefix property with a path (e.g. https://example.com/blog/) only GA4 landing pages under that path are joined. Requires a GA4 property linked to the site in GSC Wizard; returns notConfigured otherwise. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoRows to return. Applies per period when dateGranularity is set.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
organicOnlyNoLimit GA4 metrics to google / organic sessions so they line up with GSC. Default true; set false for all-traffic GA4 metrics.
dateGranularityNoSplit the range into periods and return one set of rows per period, each tagged with a `date` (the period start, clamped to the requested range). Use this to chart a tool's output over time instead of getting a single aggregate: "month" gives month-on-month, "week" gives Monday-aligned weeks, "day" gives a daily series. Default "none" returns one aggregate over the whole range, unchanged. `limit` applies per period when set. Comparison fields (prev*) compare each period against the period before it.none
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, but the description adds substantial behavior beyond them: canonical path normalization (no query/hash, no trailing slash), GSC-only/GA4-only flagging so neither side is dropped, sort order, the organicOnly default and its rationale, and different units per source (ctr 0-100 vs bounceRate 0-1). The notConfigured failure mode and the ~2-3 day data lag are exactly the operational details an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the selecting question and the exclusion, which is the right ordering for an 8-parameter join tool. It is long but most sentences carry non-derivable detail; however several clauses (organicOnly default, dateGranularity behavior) duplicate the input schema's own descriptions, adding mild redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary; the description instead covers what the schema cannot: join key semantics, URL-prefix property path scoping, default date window, provisioning prerequisite, and cross-source unit mismatches. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88%, so the schema already explains most parameters; the baseline is 3. The description adds genuinely new semantics: that limit applies per period when dateGranularity is set, that comparison fields compare each period to the prior one, and the ctr-vs-bounceRate unit split. It restates some schema content (organicOnly default, dateGranularity default), which caps it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('joints Search Console ... with GA4 ... per landing page') and even names the canonical-path join key. It explicitly distinguishes itself from the sibling get_query_value_attribution, so the agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the exact user question that selects this tool ('how a page's Search Console clicks line up with its GA4 outcomes') and gives an explicit exclusion plus alternative ('Not for value per search query: use get_query_value_attribution'). It also states prerequisites (GA4 property linked in GSC Wizard, returns notConfigured otherwise) and defaults (omit dates for last 28 settled days).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_branded_performanceBranded vs non-branded performanceA
Read-only
Inspect

Use this when the user asks how much search traffic is branded: splits it into BRANDED and NON-BRANDED using the branded keywords saved on the property (set them with update_site; a keyword wrapped in slashes like /acme ?corp/ is treated as a regex, otherwise it is a case-insensitive substring). Not for other keyword groups: use get_topic_cluster_performance. Returns totals, the branded share of clicks, a daily clicks trend for both sides (date ascending), and the top queries on each side (clicks descending), with optional comparison-period totals. nonBranded is the property total minus branded, so the two sides add up to the property total (total) and brandedClickShare is branded clicks over that total (0-100, like ctr). Search Console leaves anonymised queries out of any query-filtered read, so they cannot be matched against the keywords: these long-tail searches are counted in nonBranded and reported on their own as anonymized, so brandedClickShare is a floor, and coverage.hiddenClicksShare (0-1) is the share of the property's clicks with no query row. topNonBrandedQueries lists named queries only. Returns notConfigured (not an error) when the property has no branded keywords yet. Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoHow many top queries to return per side.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
noteNo
dailyNo
rangeNo
totalNo
reasonNo
thenByNo
brandedNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
nextStepNo
orderingNo
previousNo
sortedByNo
sortOrderNo
thenOrderNo
anonymizedNo
dataSourceNo
nonBrandedNo
searchTypeNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
hasComparisonNo
notConfiguredNo
savedKeywordsNo
settledThroughNo
brandedKeywordsNo
comparisonRangeNo
brandedClickShareNo
topBrandedQueriesNo
brandedKeywordCountNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo
topNonBrandedQueriesNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give readOnly/openWorld/destructive hints; the description adds substantial context beyond that: anonymised-query exclusion and how it affects brandedClickShare as a floor, coverage.hiddenClicksShare, notConfigured as a non-error, and the ClickHouse-vs-live-API dataSource fallback. This is exactly the extra behavioral detail the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use-case and routing before the return-value anatomy, and nearly every clause carries information (branded share math, anonymization caveat, dataSource). It is dense and somewhat run-on in the long middle sentence, which slightly hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param tool with an output schema, the description is complete: it explains the return shape (totals, branded share, daily trend ordering, top queries ordering), the anonymized edge case, and the notConfigured state. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 86%, so the baseline is 3, but the description adds real meaning: the regex-vs-substring keyword matching rule, the optional date range defaulting to 28 settled days, and the comparison-period semantics beyond the schema. It omits per-parameter detail (limit, searchType enum), so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('splits search traffic into BRANDED and NON-BRANDED') and immediately names the sibling it is not for ('get_topic_cluster_performance'). An agent can distinguish it from other performance tools without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use this when the user asks how much search traffic is branded' plus a clear exclusion ('Not for other keyword groups: use get_topic_cluster_performance') and the configuration prerequisite (keywords set with update_site). This is the strongest form of routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_content_group_performanceContent group performanceA
Read-only
Inspect

Use this when the user asks how a section or content group of their site performs. Measures a property's content groups: clicks, impressions, CTR, impression-weighted average position, distinct page count and share of clicks per group (CTR and clickShare 0-100), plus an "uncategorized" bucket for pages no group claims. Pass groupId to drill into one group's top pages instead (by clicks, descending). Matching is first-match-wins in the groups' saved order, the same as the web app, and groups keep that order (matchOrder 1 first), not a ranking by clicks. Served from the GSC Wizard ClickHouse warehouse when available (where group totals are EXACT over every page of the property), otherwise from the live Search Console API over the top 25,000 pages by clicks (see dataSource and truncated). Not for the definitions: use list_content_groups (create_content_group adds one); for folder totals without saved groups use breakdown_by_path. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoRow cap for the groupId page drill-down.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
groupIdNoDrill into one group: returns its top pages instead of the per-group aggregates. Accepts a content group id or the literal "uncategorized".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
noteNo
pagesNo
rangeNo
groupsNo
thenByNo
groupIdNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
groupNameNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
groupCountNo
searchTypeNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
hasComparisonNo
uncategorizedNo
fallbackReasonNo
settledThroughNo
comparisonRangeNo
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/non-destructive; the description adds substantive behavior: warehouse vs live-API sourcing with the top-25,000-page truncation exposed via dataSource/truncated, exact vs approximate totals, the ~2-3 day data lag and 28-day default window, first-match-wins group ordering (matchOrder 1 first, not a click ranking), and the 'uncategorized' bucket. These are exactly the caveats an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case, then drill-down behavior, then matching semantics, then data-source caveats — a sensible priority order with no filler sentences. It is dense and long for a single paragraph, but nearly every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not enumerate return fields, and it instead spends its words on the things structure cannot convey: data provenance, truncation, group match order, the uncategorized bucket, and default date handling. Nothing required to invoke or interpret it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88%, so the schema already carries most parameter meaning. The description still adds value the schema does not: groupId changes the response shape entirely (top pages, clicks descending) rather than filtering aggregates, and omitting both dates yields the last 28 settled days. It does not touch searchType or the comparison pair beyond what the schema already explains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: measures a property's saved content groups with named metrics (clicks, impressions, CTR, impression-weighted position, page count, click share). It explicitly carves itself out from list_content_groups, create_content_group, and breakdown_by_path, so an agent can distinguish it from every nearby sibling without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user asks how a section or content group of their site performs'), an explicit mode switch ('pass groupId to drill into one group's top pages'), and explicit exclusions routed to named alternatives ('not for the definitions: use list_content_groups...; for folder totals without saved groups use breakdown_by_path').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_core_web_vitalsCore Web Vitals history (CrUX)A
Read-only
Inspect

Use this when the user asks about real-user page speed or Core Web Vitals. Chrome UX Report field data for a property (or a single page): the weekly history of Core Web Vitals (LCP, INP, CLS) plus FCP and TTFB, each with its p75 value (milliseconds; CLS is unitless), good/needs-improvement/poor rating, and the good-bucket density trend (a 0-1 fraction). periods run oldest first (28-day windows) and every series lines up with them by index. Also reports any week-over-week rating regressions. Where Chrome detected ads, adMetrics adds four experimental ad metrics (ad count, ad density, ad CPU, ad network weight) as a p75 trend each, with no thresholds and no rating; absent for sites with no ads. Needs a Chrome UX Report API key configured in the app; returns notConfigured otherwise, or noData when CrUX has too little real-world traffic for the target. Not for on-page HTML checks: use audit_onpage_seo.

NameRequiredDescriptionDefault
urlNoOptional single page URL to measure instead of the whole origin.
siteUrlYes
formFactorNoDevice class: ALL (default), PHONE, DESKTOP, or TABLET.ALL

Output Schema

NameRequiredDescription
hintNo
noDataNo
targetNo
thenByNo
docsUrlNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
messageNo
metricsNo
periodsNo
siteUrlNo
nextStepNo
orderingNo
sortedByNo
adMetricsNo
keySourceNo
sortOrderNo
thenOrderNo
formFactorNo
periodCountNo
regressionsNo
emptyBecauseNo
latestPeriodNo
methodLimitsNo
periodLabelsNo
notConfiguredNo
softNavMetricsNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, destructive=false, openWorld=true, so the safety profile is covered. The description still adds real behavioral context beyond them: the API-key prerequisite, the notConfigured and noData failure modes, and the conditional presence of adMetrics with no thresholds or rating. It stops short of describing the return envelope or error surface further, so a 3 rather than a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case and the exclusion comes last, which is the right ordering. It is a single dense paragraph and almost every sentence carries information the agent needs, though the adMetrics sentence is long enough to be scanned over.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description doesn't need to enumerate return values, yet it still explains periods ordering, index alignment, p75 units and ratings, and week-over-week regressions. Combined with the stated failure modes, an agent has enough to call this and interpret the result; only the siteUrl format is thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, so url and formFactor are already documented in-schema, and only the bare siteUrl is undocumented. The description's 'for a property (or a single page)' does clarify how siteUrl and url relate, but it adds no format or domain guidance for siteUrl itself and never mentions formFactor. Baseline 3 is the right call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence pairs a specific trigger condition with the resource ('real-user page speed or Core Web Vitals'), and the body names the exact data source (Chrome UX Report field data) and metrics (LCP, INP, CLS, FCP, TTFB). It explicitly rules out the nearest sibling, audit_onpage_seo, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives both a positive trigger ('when the user asks about real-user page speed') and an explicit exclusion with a named alternative ('Not for on-page HTML checks: use audit_onpage_seo'). Prerequisite (CrUX API key configured) and the fallback path when unmet are also stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cross_site_summaryCross-site performance summaryA
Read-only
Inspect

Use this when the user asks how all their properties are doing, or which gained or lost most. Aggregates a last-N-days clicks/impressions summary across the account's registered Search Console properties (optionally filtered to those carrying a given tag), with a same-length prior period for comparison and per-site totals. Without a tag it also covers properties shared with the account (marked shared: true; tags are the caller's own, so a tag filter covers owned properties only). The MCP equivalent of the app's Global Reports page. Set includeSearchTypes to also split every property across web / image / video / news / discover, and includeCountries for a country leaderboard aggregated over the whole portfolio; their ctr and clickShare are 0-100. perSite and countries are sorted by clicks, descending. Each site routes independently to the ClickHouse warehouse or the live Search Console API, so dataSource is reported per site; a site whose read fails, or a share that no longer grants access, is reported in errors with a reason rather than failing the whole call, and the totals then cover only sitesIncluded properties, which warning says. Not for one property: use get_site_summary; for a tag's daily trend and top queries and pages use get_tag_group_view. Processes at most maxSites properties per call (default and maximum 100; scope.truncated says when more matched, so narrow by tag). The rate-limit cost scales with the number of properties and the breakdowns requested.

NameRequiredDescriptionDefault
tagNo
daysNo
maxSitesNoHow many properties to process, at most 100 (the default). When more match, `scope.truncated` is true; filter by `tag` to cover the rest.
searchTypeNoSearch type of the headline totals and the per-site comparison; `all` sums web, image, video, news and discover, like the app's "All" filter.web
countryLimitNoHow many countries to return when includeCountries is set.
includeCountriesNoAlso return a country leaderboard aggregated across every property, with the number of properties contributing to each country. Costs one extra read per property.
includeSearchTypesNoAlso break every property down by search type (web, image, video, news, discover) for the current period. Costs five extra reads per property.

Output Schema

NameRequiredDescription
rangeNo
scopeNo
deltasNo
errorsNo
thenByNo
currentNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
perSiteNo
warningNoPresent only when the totals do not cover every property.
nextStepNo
orderingNo
previousNo
sortedByNo
countriesNo
sortOrderNo
thenOrderNo
comparisonNo
searchTypesNo
sitesFailedNoProperties left out of the totals, each named in errors.
countryTotalNo
emptyBecauseNo
methodLimitsNo
sitesIncludedNoProperties whose numbers are in the totals.
sharedLookupFailedNo
sharedLookupPartialNoSome properties shared with the caller could not be listed: the ones that could are in the totals, the rest are missing.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, open-world, non-destructive behavior. The description adds substantial context beyond them: per-site warehouse-vs-live-API routing, per-site error handling that reports failures in `errors` rather than failing the whole call, truncation via `scope.truncated`, rate-limit cost scaling with properties and breakdowns, and shared-property inclusion semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the first sentence states the user scenario, followed by scope, alternatives, failure behavior, and limits. Every sentence contributes operational detail for a tool with many edge cases; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the presence of an output schema, the description covers everything an agent needs: when to call, when not to call, scope of shared properties, per-site data sources, error handling, truncation, and cost trade-offs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, so the baseline is 3, but the description meaningfully extends several parameters: `tag` is the caller's own and filters to owned properties, `includeSearchTypes` splits each property across web/image/video/news/discover, `includeCountries` aggregates a portfolio-wide leaderboard, and ctr/clickShare are on a 0-100 scale with perSite and countries sorted by clicks descending. `days` and `searchType` are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: aggregates last-N-days clicks/impressions across all registered Search Console properties with prior-period comparison. Explicitly distinguishes itself from get_site_summary (one property) and get_tag_group_view (tag trend and top queries/pages).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the exact user question this answers, then names the alternatives and when to use them instead: 'Not for one property: use get_site_summary; for a tag's daily trend and top queries and pages use get_tag_group_view.' Also clarifies that a tag filter covers owned properties only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_decay_overviewDecay overview (per-period matrix)A
Read-only
Inspect

Use this when the user asks how queries or pages trended month by month (or week by week). Per-query or per-page performance broken down by month or week: the same matrix the app's Query Decay and Content Decay pages render (a row per query/page, one column per period). Not for a list of decliners between two fixed ranges: use find_decaying_content. Returns the top limit rows by total clicks, largest first, each with a values array aligned to periods (oldest first) for the chosen metric (ctr is a 0-100 percentage), plus a TOTALS-style per-period aggregate across all matched rows. With dimension query, rows and totals cover only the queries Google lists, not the whole site: on most properties a large share of clicks has no query row (analyze_sampling_impact measures it). Defaults to the last months complete months (through the end of last month). Served from the GSC Wizard ClickHouse warehouse when available (longer history), otherwise the live Search Console API (see dataSource). On the live API each period is read separately; truncated: true with a note means a period's read was capped or did not finish in time, and incompletePeriods lists any period that reads 0 because it was not read.

NameRequiredDescriptionDefault
limitNo
metricNoclicks
monthsNo
searchNo
endDateNoOptional. Window end as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
siteUrlYes
dimensionNoquery
startDateNoOptional. Window start as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
granularityNomonth
clusterKeywordsNo

Output Schema

NameRequiredDescription
noteNo
rowsNo
rangeNo
metricNo
thenByNo
totalsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
periodsNo
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
dimensionNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
granularityNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
rowsReturnedNo
rowsConsideredNo
settledThroughNo
incompletePeriodsNo
warehouseLatestDateNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, the description discloses the data backend preference (ClickHouse vs live API), the truncation behavior (`truncated: true` + `note`, `incompletePeriods` reading 0), the per-period read cost on the live API, the default window, and the query-dimension coverage caveat. These are exactly the operational facts an agent needs to interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with usage guidance and scope, and every sentence carries information about behavior or return shape. It is a single dense paragraph that could be split for readability, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with an output schema, the description still usefully explains the return structure (values aligned to periods, totals row, truncated/incompletePeriods flags) and the backend fallback. Only the `search` filter and `clusterKeywords` parameters are left unexplained across all fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 27%, so the description must compensate: it explains `limit` (top rows by total clicks, largest first), `metric` (ctr as 0-100 percentage), `dimension` (query vs page and query coverage limits), and the default `months` window. However, `search` and `clusterKeywords` are undocumented in both the description and the schema, leaving a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb/resource: per-query or per-page performance broken down by month or week, rendered as a matrix (row per query/page, column per period). It explicitly contrasts with the sibling find_decaying_content, so an agent can distinguish it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how queries or pages trended month by month') and an explicit exclusion routing to find_decaying_content ('Not for a list of decliners between two fixed ranges'). Both when-to-use and when-not-to-use are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_experiment_resultsScore an SEO experimentA
Read-only
Inspect

Use this when the user asks whether an SEO experiment (split test) worked or which variant won. Scores one SEO experiment: assigns the property's landing pages to the experiment's control and variant URL groups, then compares each variant against the control (group 0) on click growth period-over-period. Returns per-group clicks/impressions/CTR (0-100, with a confidence interval) and an impression-weighted average position, plus for each variant the uplift in growth (percentage points) with its CI, a significance test of that growth difference (significant exactly when the CI excludes 0), the winner, and a low-power warning. ctrPValue is a separate test of the CTR difference, for reference only. The comparison window is the prior same-length period. groups keep the experiment's order (control first) and comparisons follow its variants. Not for finding an experiment or its id: use list_experiments. Reads the ClickHouse warehouse when available, else the live Search Console API.

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
experimentIdYesThe experiment id from list_experiments.
confidenceLevelNoConfidence level for the significance test and CIs (default 0.95).

Output Schema

NameRequiredDescription
noteNo
rangeNo
groupsNo
siteUrlNo
nextStepNo
truncatedNo
comparisonNo
dataSourceNo
experimentNo
comparisonsNo
emptyBecauseNo
methodLimitsNo
truncationNoteNo
windowNormalizationNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, but the description adds substantial behavioral context beyond them: the comparison window is the prior same-length period, significance is defined as the CI excluding 0, groups preserve experiment order, and the data source falls back from the ClickHouse warehouse to the live Search Console API. None of that is derivable from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The trigger condition and the sibling exclusion bracket the body, which is the right front-loading. The middle enumeration of returned statistics is dense and slightly over-long given an output schema exists, but each clause carries information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analytical tool with an output schema and full annotation coverage, the description supplies everything else an agent needs: the exact comparison logic, the window definition, group ordering, significance semantics, the data-source fallback, and the hand-off to list_experiments for experiment discovery.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80% and the schema itself documents startDate/endDate defaults, the 'never pass null' rule, the date format and the confidenceLevel range and default. The description adds no parameter-level detail (e.g. it never mentions confidenceLevel or the date window semantics it relies on), so this sits at the baseline where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Scores one SEO experiment') plus the exact scope of what is compared (control group 0 vs each variant, click growth period-over-period). It explicitly distinguishes itself from the sibling list_experiments, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the trigger condition ('Use this when the user asks whether an SEO experiment (split test) worked or which variant won') and closes with an explicit exclusion plus the alternative ('Not for finding an experiment or its id: use list_experiments'). Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_feed_audit_resultsFeed audit resultsA
Read-only
Inspect

Use this when the user asks how their Merchant Center feed scored in the feed audit or which checks fail. Results of the Merchant Center feed audit for a GSC Wizard site: the latest run (or the run of a given runDate) with its status, Feed Score (0-100, split into scoreFeed and scorePage), failure counts by severity, per-check applicable / failed / passed counts with pass rates, offers audited, pages fetched and crawl coverage, plus the score history of earlier runs for the trend. checks run worst first (most failures), history newest first. coverage and the rates are 0-1 fractions (0.12 = 12%), not the 0-100 percentage ctr uses elsewhere. Not for Google's own item issues: use get_product_listing_status. checkKey narrows the checks list to one check; severity is accepted for parity with the app report, but the per-offer issue rows behind either filter live in the ClickHouse warehouse this server cannot read, so such a call answers issuesAvailable: false, pointing at the Feed Audit report in the GSC Wizard app. A run can cover several markets (one "" key each, e.g. "enGB"): run.markets lists them, home market first, and run.perMarket gives each market's own offersAudited, score and severity counts; both are null on runs from before multi-market audits, and perMarket stays null until the run completes. The run-level score and checks combine every market the run covered; pass market with a key from run.markets to get that market's per-check counts in checks instead (a key the run does not cover answers a marketNote listing its markets, not an error). The owner picks the home market and up to 4 extra markets on the Feed Audit page in the GSC Wizard app; this server cannot change them. run.crawlBlocked: true means the page crawl stopped early because the site refused GSCWizard-Bot (401/403 or robots.txt), so the page-plane checks and scorePage cover few or no pages; allow the crawler and queue a new run. run: null means no audit has run yet, or none on runDate (queue one with run_feed_audit). syncPaused (with a one-line staleNote) means the Merchant Center sync is paused because Merchant Center no longer lets the connected Google account read the merchant: the stored results are still returned but may be stale, and syncPaused.message says how to fix it. syncNotice (reason "gmc_on_other_account") means Merchant Center is connected on another Google login than the property's Search Console one, so no new audit can run; stored results are still returned. Returns a notConfigured result (not an error) when Merchant Center is not connected, its credentials were revoked, no Merchant Center account is linked to the site, or (reason "gmc_on_other_account") no audit was ever stored because Merchant Center sits on another Google login.

NameRequiredDescriptionDefault
limitNoMaximum checks rows to return (default 100, max 500). Reserved for the per-offer issue list once a warehouse reader exists; the checks list never exceeds 21 rows.
marketNoOptional market key from run.markets ("<contentLanguage>~<feedLabel>", e.g. "en~GB" or "en~AED_121185698126"). Narrows `checks` to that market's own per-check counts and adds them to its run.perMarket entry. Omit for the run's overall checks.
runDateNoOptional run date (YYYY-MM-DD, the runDate returned by run_feed_audit). Omit for the latest run.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
checkKeyNoOptional check key to narrow the checks list to (e.g. "title_length", "jsonld_product_schema", "price_mismatch"). Per-offer issues for it are not readable here (see issuesAvailable).
severityNoOptional severity filter ("critical", "warning" or "info") for the per-offer issue list, which this server cannot serve (see issuesAvailable); accepted for parity with the app report.

Output Schema

NameRequiredDescription
runNo
hintNo
rangeNo
checksNo
reasonNo
thenByNo
accountNo
filtersNo
historyNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
sortedByNo
checkNoteNo
crawlNoteNo
emptyNoteNo
sortOrderNo
staleNoteNo
thenOrderNo
unitsNoteNo
checkCountNo
dataSourceNo
issuesHintNo
marketNoteNo
statusNoteNo
syncNoticeNo
syncPausedNo
emptyBecauseNo
gmcAccountIdNo
historyCountNo
methodLimitsNo
notConfiguredNo
issuesAvailableNo
issuesRequestedNo
requestedRunDateNo
truncationReasonNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint true, destructiveHint false, openWorldHint false), yet the description adds substantial context the schema cannot: crawlBlocked meaning the crawler was refused by GSCWizard-Bot, syncPaused/staleNote staleness semantics, syncNotice with reason gmc_on_other_account, and the fact that notConfigured is returned as a result rather than an error. It also discloses non-obvious output conventions (0-1 fractions rather than 0-100 percentages, checks sorted worst-first, history newest-first) and that this server cannot change the owner's market selection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the sibling exclusion before any of the caveat detail, which is the right ordering for a long description. It is a single dense paragraph with some duplication (gmc_on_other_account and issuesAvailable are each explained twice), so it could be trimmed or broken into labeled blocks, but almost every sentence carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shapes needn't be restated, and the description instead covers the decision-relevant edge cases an agent would otherwise misread: multi-market runs with null perMarket on older runs, crawlBlocked, syncPaused, syncNotice, and the four notConfigured triggers. For a read-only reporting tool with six parameters and this much result semantics, nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description still adds real semantic value: it tells the agent that `severity` is accepted only for parity and always yields issuesAvailable: false (so the filter is effectively a no-op), and that `market` must be a key from run.markets or the call returns a marketNote rather than an error. It also confirms limit never binds because the checks list tops out at 21 rows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb+resource ('Results of the Merchant Center feed audit') scoped to a GSC Wizard site, with the exact payload named (status, Feed Score split into scoreFeed/scorePage, per-check counts, history). It draws a hard line against get_product_listing_status for Google-side item issues and against run_feed_audit for queueing a run, so an agent can pick it out of a 90-tool sibling list without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the triggering user intent ('when the user asks how their feed scored or which checks fail'), names the explicit exclusion ('Not for Google's own item issues: use get_product_listing_status'), and routes the adjacent action ('queue one with run_feed_audit'). It also states what to do in degenerate cases (run: null, notConfigured), so no alternative-selection inference is left.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_filter_optionsGet report filter optionsA
Read-only
Inspect

Use this when the user wants a report scoped to branded queries, a content group or a topic cluster. Lists the scope filters available on a property for get_site_summary, query_top_queries, query_top_pages, query_countries and query_devices: whether branded keywords are set (for brand: 'branded' | 'non_branded'), and every content group (contentGroupId) and topic cluster (topicClusterId) with filterable and, when false, the reason. Works on properties shared with you as well as your own. Reads configuration only; no Search Console data is fetched. Not for saved dashboard filter presets: use list_saved_filters. contentGroups and topicClusters are sorted by name ascending.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
brandNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo
contentGroupsNo
topicClustersNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, but the description adds real context beyond them: it reads configuration only and fetches no Search Console data, it works on properties shared with the caller as well as owned ones, and contentGroups/topicClusters come back sorted by name ascending. The only minor gap is no mention of error behavior for a siteUrl the caller cannot access.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, then the return shape, then the exclusion — a sensible order. It is a single dense paragraph and slightly over-packed (the sorting note could be trimmed), but every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is optional, yet the description still summarizes the payload (filterable flag plus failure reason). Combined with the named downstream consumers, the sharing caveat and the sibling exclusion, an agent has everything needed to select and call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required siteUrl, so the description must carry the load. It implies siteUrl identifies 'a property' and that shared properties are accepted, which helps, but it never states the expected URL format (e.g., full property URL vs. sc-domain form) — the one thing an agent could plausibly get wrong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (lists the scope filters available on a property) and enumerates the exact consumers (get_site_summary, query_top_queries, query_top_pages, query_countries, query_devices). It also names the concrete values returned (branded/non_branded, contentGroupId, topicClusterId, filterable + reason), so an agent knows precisely what it yields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use this when the user wants a report scoped to branded queries, a content group or a topic cluster') and an explicit exclusion with the correct alternative ('Not for saved dashboard filter presets: use list_saved_filters'). Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ga4_ecommerceGA4 ecommerce reportA
Read-only
Inspect

Use this when the user asks about GA4 revenue, transactions or top-selling products. GA4 ecommerce performance for the property linked to a GSC Wizard site: a revenue / transactions / purchasers summary plus channel, source-medium, page, landing-page, and product (itemName) breakdowns, each sorted by revenue, highest first (totalRevenue; items by itemRevenue). Not for a non-purchase conversion such as a form submit: use get_ga4_key_events. Revenue is in the property currency (currencyCode). hasEcommerce is false when the property shows no ecommerce activity in the period. When active filters are incompatible with the item-scoped Products report, itemsFilterSkipped is true and items is unfiltered while every other table reflects the filters. totalRows gives the full row count of every table before limit. Returns notConfigured (not an error) when Google Analytics is not connected or no GA4 property is linked to the site in GSC Wizard. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
noteNo
itemsNo
pagesNo
rangeNo
reasonNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
sourcesNo
channelsNo
nextStepNo
orderingNo
sortedByNo
timeZoneNo
siteScopeNo
sortOrderNo
thenOrderNo
totalRowsNo
dataSourceNo
propertyIdNo
currencyCodeNo
emptyBecauseNo
hasEcommerceNo
landingPagesNo
methodLimitsNo
hasComparisonNo
notConfiguredNo
reauthRequiredNo
comparisonRangeNo
ecommerceSummaryNoMetric totals keyed by GA4 metric name.
itemsFilterSkippedNo
propertyDisplayNameNo
prevEcommerceSummaryNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say read-only/open-world; the description adds substantive behavior: revenue is in `currencyCode`, `hasEcommerce` false means no activity, `itemsFilterSkipped` explains a partial-filter state, `totalRows` is pre-`limit`, and `notConfigured` is a non-error state for unlinked GA. It also discloses the ~2-3 day data lag, so the agent can reason about why recent dates are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the payload, then the exclusion, then the response-field caveats — a sensible order. It is long, and the closing date-range sentence largely repeats the startDate/endDate schema descriptions, which is the only real redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an existing output schema, the description intentionally explains the fields that change interpretation (`hasEcommerce`, `itemsFilterSkipped`, `totalRows`, `notConfigured`), plus auth/linkage preconditions and date defaults. For a 7-parameter, nested-filter, multi-table report tool, nothing an agent needs before calling is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 71% schema coverage the schema does most of the work, but the description still adds meaning: the default window when dates are omitted and the settled-data lag, plus the pre-`limit` semantics of `totalRows` and the conditions under which filters silently do not apply to the item-scoped report. Nested `filters` and `siteUrl` semantics are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource and content ('GA4 ecommerce performance ... revenue / transactions / purchasers summary plus channel, source-medium, page, landing-page, and product breakdowns'), so an agent knows exactly what comes back. It also states the trigger ('user asks about GA4 revenue, transactions or top-selling products'), which distinguishes it from get_ga4_overview and get_ga4_key_events without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit positive trigger plus an explicit exclusion: 'Not for a non-purchase conversion such as a form submit: use get_ga4_key_events.' That is the main routing ambiguity in this family, and it is resolved in-line. The default-date instruction ('omit startDate/endDate to analyze the last 28 settled days') further tells the agent how to call it without extra lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ga4_error_pagesGA4 error pagesA
Read-only
Inspect

Use this when the user asks which pages show visitors an error (a 404 or server error page) and how much traffic they get. Reports GA4 error pages for the property linked to a site: sessions, page views, active users and bounce rate per error page, broken down by page title AND URL, sorted by sessions, highest first. Not for Google's crawl or indexing status of a URL: use inspect_url. GA4 has no native 404 signal, so error pages are identified by matching the pageTitle dimension against saved patterns (operators contains / equals / starts_with / ends_with / regex, case-insensitive, OR-ed together). By default it uses the patterns saved for the site in GSC Wizard; pass titleFilters to override them for one call without saving anything. Returns notConfigured when Google Analytics is not connected or no GA4 property is linked, and noPatterns when the site has no saved patterns and none were passed. totals counts each session and user once across all matching pages (not the sum of the rows), and bounceRate is a fraction 0-1, not a percentage. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoHow many error-page rows to return, ordered by sessions.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
titleFiltersNoOverride the page-title patterns for this call only (nothing is saved). Omit to use the patterns saved on the site in GSC Wizard's Error Pages report.
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
rangeNo
reasonNo
thenByNo
totalsNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
patternsNo
sortedByNo
timeZoneNo
siteScopeNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
errorPagesNo
noPatternsNo
prevTotalsNo
propertyIdNo
emptyBecauseNo
methodLimitsNo
hasComparisonNo
notConfiguredNo
patternSourceNo
reauthRequiredNo
comparisonRangeNo
matchedRowCountNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, and non-destructive behavior, but the description adds substantial context beyond them: GA4 has no native 404 signal, error pages are identified by matching pageTitle with saved patterns, operators are case-insensitive and OR-ed, and titleFilters override saved patterns for one call without saving. It also discloses the notConfigured and noPatterns error responses, the meaning of totals (unique sessions/users, not row sums), bounceRate as a 0-1 fraction, and the default 28-day settled window with ~2-3 day lag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary use case and sibling exclusion, then moves into mechanics and edge cases. It is longer than typical but dense with useful information; some sentences, such as the totals and bounceRate clarifications, are valuable, though the overall length could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, annotations, output schema, and 86% schema description coverage, the description fills the remaining gaps an agent needs: how error pages are identified, what defaults apply, what error states mean, and how special return values should be interpreted. Nothing essential for correct invocation appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 86%, so the schema already explains most parameters. The description adds meaningful semantics for titleFilters (operators, case-insensitive matching, OR logic, override-only behavior) and the date range default, but does not explain limit or the comparison-period parameters, which the schema covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb, resource, and scope: reports GA4 error pages for the property linked to a site, including sessions, page views, active users, bounce rate, broken down by page title and URL. It clearly distinguishes itself from the sibling inspect_url by saying it is not for Google's crawl or indexing status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names the triggering user question (which pages show visitors an error and how much traffic they get) and names the alternative tool, inspect_url, for crawl/index status. It also explains when to pass titleFilters versus relying on saved patterns, which covers the main usage decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ga4_key_eventsGA4 key events (conversions)A
Read-only
Inspect

Use this when the user asks how many conversions (GA4 key events) a site got and which channels, pages or devices drove them. Segments the GA4 property linked to the site on ONE key event (e.g. form_submit): totals, session/user conversion rates, and per channel, source, landing page, page, country and device breakdowns, each sorted by keyEventCount, highest first (eventCount for a plain event). Not for revenue or products: use get_ga4_ecommerce. Also lists the available key events on the property. When keyEvent is omitted, the most active key event in the period is picked automatically. A keyEvent that is not marked as a key event in GA4 returns plain event counts instead (isKeyEvent: false, with a note). A key event whose name has characters other than letters, digits and _ (e.g. "Sign Up") is reported through an event filter instead, with metricMode "event_filter" and a note on what the numbers mean. rawEventCount is the plain count of the event; when GA4 counted fewer key events than that (marked as a key event after it fired, or counted once per session), a note explains the gap. Rates (sessionKeyEventRate, userKeyEventRate) are fractions 0-1, not percentages. Returns notConfigured when Google Analytics is not connected or no GA4 property is linked. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoMaximum number of rows per breakdown table.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
keyEventNoGA4 key event name to segment on (e.g. form_submit). Omit to pick the most active key event of the period automatically; the response lists all available names.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
noteNo
pagesNo
rangeNo
reasonNo
thenByNo
accountNo
devicesNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
sourcesNo
summaryNoMetric totals keyed by GA4 metric name.
channelsNo
keyEventNo
nextStepNo
orderingNo
sortedByNo
timeZoneNo
countriesNo
keyEventsNo
siteScopeNo
sortOrderNo
thenOrderNo
dataSourceNo
isKeyEventNo
metricModeNo
propertyIdNo
prevSummaryNo
currencyCodeNo
emptyBecauseNo
landingPagesNo
methodLimitsNo
hasComparisonNo
keyEventNamesNo
notConfiguredNo
rawEventCountNo
reauthRequiredNo
comparisonRangeNo
prevRawEventCountNo
propertyDisplayNameNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the readOnly/destructive annotations: auto-selection of the most active key event, isKeyEvent:false fallback for plain events, event_filter metricMode for names with special characters, rawEventCount gap notes, rates as 0-1 fractions, notConfigured state, and ~2-3 day data lag. Only minor gap is that it does not describe response shape for the automatic period selection beyond the default window.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case and the primary alternative before edge cases, and every sentence carries operative information. It is dense and long, bundling many fallback behaviors, but little is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 params, nested filters, and an output schema present, the description supplies exactly the missing operational context: defaults, fallback modes, rate semantics, and the notConfigured state. An agent has what it needs to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88%, so the baseline is 3. The description adds real semantic value on keyEvent omission (auto-pick with available names returned), the default 28-day window when dates are omitted, and the meaning of rate fields, going beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (segments GA4 key events/conversions) and enumerates the breakdowns returned. It explicitly separates itself from get_ga4_ecommerce, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this when the user asks how many conversions... and which channels, pages or devices drove them" gives a concrete trigger, and "Not for revenue or products: use get_ga4_ecommerce" names the alternative and the exclusion. Omission behavior for keyEvent and dates is also specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ga4_llm_trafficGA4 traffic from AI assistantsA
Read-only
Inspect

Use this when the user asks how much traffic AI assistants such as ChatGPT send to the site. Sessions, engagement, conversions (key events) and revenue referred to the site by ChatGPT, Perplexity, Microsoft Copilot, Google Gemini, Claude and 13 other AI assistants (identified by referrer domain and combined with GA4's own "AI Assistant" channel), from the GA4 property linked to the site, with the share of total traffic they represent and per-assistant and per-landing-page breakdowns, both sorted by sessions, highest first (sourceTimeseries by date). Not for every referral source: use query_ga4_report (dimension sourceMedium). Note: Google AI Overviews / AI Mode traffic carries no distinct referrer, is indistinguishable from google/organic, and is NOT included. llmShareOfSessions, engagementRate and bounceRate are fractions 0-1, not percentages. An assistant's activeUsers adds up its referrer domains (e.g. chatgpt.com + chat.openai.com), so a user who came through two of them counts twice; summary.activeUsers is exact. Returns a notConfigured result when Google Analytics is not connected or no GA4 property is linked. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoMaximum number of landing page rows returned.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
includeDailySplitNoInclude a per-assistant daily sessions split for the current period.
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld annotations: it warns that llmShareOfSessions, engagementRate and bounceRate are fractions 0-1 not percentages, that per-assistant activeUsers double-counts users across referrer domains while summary.activeUsers is exact, that a notConfigured result is returned when GA4 is not connected or no property is linked, and that data lags ~2-3 days. These are non-obvious behavioral caveats an agent could not infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The when-to-use clause is correctly front-loaded, but the core is a single enormous run-on sentence packing metrics, breakdowns, sorting, caveats and exclusions together, which is hard to parse. Every fact earns its place, yet the structure is dense and could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is not required, yet the description still supplies the calling-critical context: default window, data lag, the notConfigured failure mode, and the double-counting caveat. Nothing an agent needs in order to invoke and interpret this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 86%, so the schema already documents limit, the date fields, the comparison-date pairing, and includeDailySplit. The description's date-range note ('omit startDate/endDate to analyze the last 28 settled days') largely restates the schema, and its fraction caveat concerns output rather than parameters. It adds little beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (traffic from AI assistants to the site) and enumerates exactly what is measured: sessions, engagement, conversions/key events, revenue, per-assistant and per-landing-page breakdowns. It names the sibling it is not (query_ga4_report with dimension sourceMedium), so an agent can distinguish it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use trigger ('when the user asks how much traffic AI assistants such as ChatGPT send to the site') plus an explicit when-not with the alternative ('Not for every referral source: use query_ga4_report'). It also carves out a scope exclusion (Google AI Overviews/AI Mode traffic is not included because it is indistinguishable from google/organic).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ga4_overviewGA4 traffic overviewA
Read-only
Inspect

Use this when the user asks how much GA4 traffic a site had, or how it changed against the previous period. GA4 summary for the property linked to a GSC Wizard site: sessions, active/total/new users, page views, engagement rate, session duration, bounce rate, event count, and key events, with an automatic previous-period comparison (prevSummary). Not for Search Console clicks: use get_site_summary; for a split by channel or page use query_ga4_report. When the comparison period has no GA4 data at all (e.g. before the data stream existed), comparisonHasData is false and prevSummary is null instead of all zeros. Set includeTimeseries for daily points (timeseries, oldest day first). engagementRate and bounceRate are fractions 0-1, not percentages; averageSessionDuration is in seconds. Returns notConfigured (with a reason and hint) instead of data when Google Analytics is not connected or no GA4 property is linked to the site in GSC Wizard. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here.
includeTimeseriesNo
comparisonStartDateNoOptional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here.

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, the description discloses important behavior: comparisonHasData is false and prevSummary is null when baseline data is missing, includeTimeseries returns daily points oldest first, rates are fractions from 0 to 1, durations are in seconds, and notConfigured is returned when Analytics is unavailable. It also documents the default date window and data lag, which are not fully covered by annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: it starts with the use case, then exclusions, behavioral caveats, output semantics, and date defaults. Every sentence carries actionable information, with no apparent filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex GA4 overview tool with an output schema and nested filters, the description covers purpose, alternatives, default behavior, key response caveats, and the notConfigured state. An agent has enough context to select and invoke the tool correctly without needing return-value details beyond the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents most parameters in detail, including the nested filters. The description adds useful meaning for includeTimeseries (daily points, oldest first) and the date range default, but it does not explain the filters object or the siteUrl format, so it does not fully compensate beyond the 71% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: a GA4 traffic overview for a site, listing the exact metrics returned and the automatic previous-period comparison. It also explicitly distinguishes itself from get_site_summary for Search Console clicks and query_ga4_report for channel or page splits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit triggering conditions: use when the user asks how much GA4 traffic a site had or how it changed against the previous period. It also names when not to use it and which sibling tool to use instead, with clear alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmc_account_healthMerchant Center account healthA
Read-only
Inspect

Use this when the user asks why their products are missing from Google Shopping everywhere at once, why a whole Merchant Center account stopped serving, or whether the account is in good standing. Account-level health of the Google Merchant Center account linked to a GSC Wizard site: the account issues Merchant Center raises (suspensions, misrepresentation and other policy warnings, missing settings), each with severity CRITICAL / ERROR / SUGGESTION, the affected destinations (FREE_LISTINGS, SHOPPING_ADS, ...) and regions, plus eligibility checks on the settings Google reads: the Merchant Center terms of service, the free-listings program state (with any unmet requirements), whether the website is claimed, account shipping services, return policies and business info. Issues come most severe first, then by title; checks keep that fixed order. Every check has a status (ok / suggestion / warning / critical / unknown) and a plain-language message, and overallStatus is the worst of them and of the issues. Not for per-product problems: use get_product_listing_status or get_feed_audit_results. Business contact details are reported as present or missing only, never their values. A check whose setting this Google login may not read answers status "unknown" (see sections) instead of failing the call. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

NameRequiredDescriptionDefault
limitNoAccount issues to return, most severe first (default 200, max 500).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
languageCodeNoOptional. BCP-47 language for the issue titles and details (e.g. "en-US", "nl"). Default en-US.

Output Schema

NameRequiredDescription
hintNo
noteNo
rangeNo
checksNo
issuesNo
reasonNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
homepageNo
orderingNo
programsNo
sectionsNo
shippingNo
sortedByNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
issueCountNo
issueCountsNo
businessInfoNo
gmcAccountIdNo
notConfiguredNo
overallStatusNo
returnPoliciesNo
termsOfServiceNo
truncationNoteNo
targetCountriesNo
truncationReasonNo
freeListingsIssueCountNo
countriesWithoutShippingServiceNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld/non-destructive; the description adds substantial context beyond them: issue ordering (severity then title, checks in fixed order), the five-value per-check status and how overallStatus is derived, that unreadable settings yield status 'unknown' rather than failing the call, that contact details are reported as present/missing only, and that a missing Merchant Center link returns notConfigured instead of an error. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, then scope, then return shape, then exclusions — a sensible order for an agent scanning for relevance. It is dense and a couple of clauses (the full enumeration of settings checked, restating severity ordering twice) could be trimmed, but almost every sentence carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diagnostic tool this covers the full burden: what is checked, how severity and ordering work, how overallStatus aggregates, the unknown-status fallback for unreadable settings, the privacy treatment of contact data, and the notConfigured case. With an output schema present, return-value detail need not be repeated further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents siteUrl (property URL from list_sites), limit (default 200, max 500, severe-first) and languageCode (BCP-47, default en-US). The description reinforces the severity-first ordering that limit relates to but adds no new parameter syntax or defaults. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (account-level health of the Merchant Center account linked to a GSC Wizard site) and enumerates the concrete contents: issues with severities and affected destinations/regions, plus eligibility checks on specific settings. It explicitly differentiates from siblings: 'Not for per-product problems: use get_product_listing_status or get_feed_audit_results.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with concrete user-question triggers ('why their products are missing from Google Shopping everywhere at once', 'whether the account is in good standing') and names the alternative tools plus the condition that selects them. It also gives the notConfigured condition, so the agent knows what a non-error empty result means.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmc_best_sellersMerchant Center best sellersA
Read-only
Inspect

Use this when the user asks what sells best in Google Shopping or which popular products they do not stock. Google's best sellers ranking for one country from the Google Merchant Center account linked to a GSC Wizard site: the most popular product clusters ("product_cluster", the default) or brands ("brand") per Google product category, with rank, previous rank, relative demand (VERY_LOW..VERY_HIGH), its direction (SINKER / FLAT / RISER) and, for product clusters, whether any of your offers matches (inventoryStatus). Rows run by reportCategoryId, then rank (1 = top); rankChange > 0 means it climbed. Each product-cluster row carries demandGap: true when Google ranks the cluster but you do not stock it; note that inventory status ignores the report country. Not for competitors or prices: use get_gmc_competitors or get_gmc_pricing_insights. Pick WEEKLY (Monday-dated) or MONTHLY (1st-dated) reports; omit reportDate for the newest report Google has published (reports lag up to two weeks). countryCode is required because the Merchant API answers one country per request; categoryId (Google product taxonomy id) narrows to one category, otherwise every top-level category is returned. reportUnavailable (with no rows) means Google refuses this report for the Merchant Center account (eligibility); the other reports are unaffected. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

NameRequiredDescriptionDefault
viewNo"product_cluster" (ranked product clusters with title, category path, GTINs and your inventory status, the default) or "brand" (ranked brands, no inventory data).product_cluster
limitNoRows to return, ordered by (country, category, rank) (default 100, max 1000).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
categoryIdNoOptional. Google product taxonomy id as a digits-only string (e.g. "166" for Apparel & Accessories). Omit for every top-level category.
reportDateNoOptional. The report to read as YYYY-MM-DD: a Monday for WEEKLY, the 1st of a month for MONTHLY. Omit for the newest published report (recommended: reports lag up to two weeks). Never pass null or the string "null".
countryCodeYesRequired. Report country as ISO 3166-1 alpha-2 (e.g. "US", "NL"). Case-insensitive.
granularityNo"WEEKLY" (Monday-dated reports, the default) or "MONTHLY" (1st-of-month reports).WEEKLY

Output Schema

NameRequiredDescription
hintNo
rowsNo
viewNo
rangeNo
reasonNo
thenByNo
accountNo
hasMoreNo
lagNoteNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
emptyNoteNo
sortOrderNo
thenOrderNo
truncatedNo
categoryIdNo
dataSourceNo
reportDateNo
countryCodeNo
granularityNo
reportsSeenNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
countryCaveatNo
notConfiguredNo
demandGapCountNo
truncationNoteNo
fetchedRowCountNo
truncationReasonNo
reportUnavailableNo
requestedReportDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this readOnly/non-destructive/open-world, but the description adds context those cannot carry: report lag of up to two weeks, the `reportUnavailable` eligibility failure mode, the non-error `notConfigured` result when Merchant Center isn't linked, and the caveat that inventory status ignores the report country. These are exactly the edge cases an agent needs before reporting results to a user.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case and alternative routing, then the data shape, then the failure modes — a sensible order. The middle is a single very long run-on sentence that stacks rank, demand, direction and inventory semantics together, which is dense though each clause carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Seven parameters, an output schema, and annotations are all accounted for: the description covers row ordering, default view, dating rules, the two failure results, and a semantic gotcha (demandGap/inventoryStatus scope). Nothing needed to call this correctly or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by giving the rationale behind required fields (countryCode is required because the Merchant API answers one country per request) and by explaining the reportDate dating convention alongside the recommended omit-for-latest behavior. Marginal gain over the already-descriptive schema, hence 4 rather than 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific resource (Google's best sellers ranking per country from Merchant Center) and the exact shape of the data (product clusters or brands, rank, previous rank, relative demand, direction, inventory status). It explicitly separates itself from the two closest siblings in the same family (get_gmc_competitors, get_gmc_pricing_insights), so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with a concrete trigger: 'Use this when the user asks what sells best in Google Shopping or which popular products they do not stock.' It also gives explicit when-not guidance ('Not for competitors or prices') and names the alternative tools to use instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmc_competitorsMerchant Center competitorsA
Read-only
Inspect

Use this when the user asks who their Google Shopping competitors are or how their visibility compares. Competitive visibility from the Google Merchant Center account linked to a GSC Wizard site, for one (country, Google product category, traffic source) cell. "competitor" (default) returns one row per day per competing domain (rank, relativeVisibility, adsOrganicRatio, pageOverlapRate, higherPositionRate) plus a per-domain roll-up over the window; "top_merchant" one aggregate row per domain for the window (Google exposes no date there); "benchmark" one row per day with yourDomainVisibilityTrend and categoryBenchmarkVisibilityTrend, both relative to the start of the window. Rows are ordered by date, then rank (top_merchant: by rank), and domains by avgRank. relativeVisibility and adsOrganicRatio are RATIOS (200 = two hundred times as often as you); pageOverlapRate, higherPositionRate and the trends are 0-1 FRACTIONS as Google reports them (0.12 = 12%), not the 0-100 percentage ctr uses elsewhere in this server. Not for prices or best sellers: use get_gmc_pricing_insights or get_gmc_best_sellers. countryCode (ISO 3166-1 alpha-2) and categoryId (Google product taxonomy id, digits) are both required because the Merchant API answers one cell per request. reportUnavailable (with no rows) means Google refuses this report for the Merchant Center account (eligibility); the other reports are unaffected. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
viewNo"competitor" (daily rows per competing domain, the default), "top_merchant" (one aggregate row per domain for the window) or "benchmark" (daily trend of your domain against the category benchmark).competitor
limitNoRows to return, ordered by (date, rank, domain) (default 50, max 200). The per-domain roll-up in `domains` always covers every fetched row regardless of this cap.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
categoryIdYesRequired. Google product taxonomy id as a digits-only string (e.g. "166" for Apparel & Accessories, "222" for Electronics). Top-level ids work for every account.
countryCodeYesRequired. Report country as ISO 3166-1 alpha-2 (e.g. "US", "NL"). Case-insensitive.
trafficSourceNo"ORGANIC" (free listings, the default), "ADS" or "ALL".ORGANIC

Output Schema

NameRequiredDescription
hintNo
rowsNo
viewNo
rangeNo
reasonNo
thenByNo
accountNo
domainsNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
emptyNoteNo
sortOrderNo
thenOrderNo
truncatedNo
unitsNoteNo
categoryIdNo
dataSourceNo
yourDomainNo
countryCodeNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
notConfiguredNo
trafficSourceNo
truncationNoteNo
fetchedRowCountNo
truncationReasonNo
reportUnavailableNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/non-destructive/open-world; the description adds substantial behavior beyond them: `reportUnavailable` means Google refuses the report for that account and other reports are unaffected, `notConfigured` is returned as a result rather than an error when Merchant Center isn't connected, data lags ~2-3 days, and top_merchant exposes no date dimension. These are exactly the failure-mode details an agent cannot infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the triggering scenario and zero filler sentences — units, ordering, and failure semantics all earn their place. The main cost is density: everything is packed into one long paragraph rather than split into scannable clauses, which makes the view-mode distinctions slower to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-required-param tool with three distinct report modes, the description covers triggers, mode selection, output ordering, units, date-window defaults, and two non-error failure states. With an output schema present it correctly does not waste space re-describing field structure, only the units and ordering an agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema lacks: why countryCode and categoryId are mandatory (one cell per request), and that omitting startDate/endDate yields the last 28 settled days. It also documents the unit contract of the returned fields (ratios vs 0-1 fractions), which disambiguates usage of the parameters that drive those outputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (competitive visibility from the GMC account linked to a GSC site) and names the exact scenario that triggers it: "when the user asks who their Google Shopping competitors are or how their visibility compares." It also enumerates the three report shapes so the agent knows what each mode produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (competitor/visibility questions), explicit when-not-to-use with named alternatives ("Not for prices or best sellers: use get_gmc_pricing_insights or get_gmc_best_sellers"), and it justifies the two required params ("Merchant API answers one cell per request"). This is the full when/when-not/alternatives triad.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmc_data_sourcesMerchant Center data sourcesA
Read-only
Inspect

Use this when the user asks whether their Merchant Center feeds are working, or why Shopping clicks or the product count dropped suddenly (a broken feed looks like a ranking loss in the performance reports). The data sources (feeds) of the Google Merchant Center account linked to a GSC Wizard site, with the latest processed upload or scheduled fetch of every file source: its processing state (SUCCEEDED / FAILED / IN_PROGRESS), when it ran, items total / created / updated, and the processing issues Google reported (title, code, item count, WARNING / ERROR). Each source carries its type (primary or supplemental product, local or regional inventory, promotion, reviews), input (API / FILE / UI / AUTOFEED), feed label, content language, target countries, per-destination state and fetch schedule. Rows list primary sources first, then supplemental, then the rest, each by displayName. findings lists what needs attention, most severe first: failed uploads, files processed with errors, scheduled fetches that stopped running, and primary sources with FREE_LISTINGS switched off. Not for per-product item issues: use get_product_listing_status. Fetch URLs are reduced to their scheme and host because feed URLs often embed credentials. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

NameRequiredDescriptionDefault
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
includeUploadsNoRead the latest upload of each file source (one Merchant API request per source, at most 25). false lists the sources only.

Output Schema

NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
reasonNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
findingsNo
nextStepNo
orderingNo
sortedByNo
emptyNoteNo
probeNoteNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
typeCountsNo
sourceCountNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
notConfiguredNo
truncationNoteNo
fileSourceCountNo
staleFetchCountNo
truncationReasonNo
failedUploadCountNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/open-world/destructive=false, yet the description adds real behavioral context: a `notConfigured` result instead of an error when MC isn't connected, feed URLs intentionally truncated to scheme+host for credential safety, row ordering rules, and severity ordering in `findings`. That is exactly the kind of non-obvious behavior an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, which is the right ordering. It is a single dense paragraph and a few enumerations (per-destination state, fetch schedule, sort order) are more detail than most calls require, but almost every clause carries diagnostic value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with an output schema, this covers the remaining gaps: connection preconditions (notConfigured), safety rationale for redacted URLs, and how to prioritize `findings`. Nothing an agent needs in order to call it or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (siteUrl, includeUploads) are documented in the schema, including the 'at most 25 requests' cost note and the default. The description never mentions includeUploads explicitly, only implying upload retrieval via 'the latest processed upload ... of every file source'. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (the Merchant Center data sources / feeds of the GMC account linked to a GSC Wizard site) and enumerates exactly what each row carries: processing state, timestamps, item counts, issues, source type, input, feed label, language, countries, per-destination state. It also positions itself against the sibling that handles item-level problems (get_product_listing_status), so an agent can discriminate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggering questions ("are my feeds working?", "why did Shopping clicks or product count drop suddenly") and even explains the diagnostic logic that a broken feed masquerades as a ranking loss. It also names an exclusion and the alternative: "Not for per-product item issues: use get_product_listing_status."

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmc_pricing_insightsMerchant Center pricing insightsA
Read-only
Inspect

Use this when the user asks whether their prices are competitive in Google Shopping or what Google suggests they charge. Price competitiveness and sale-price suggestions from the Google Merchant Center account linked to a GSC Wizard site, joined per product: your price against the market benchmark for the same product (priceGapFraction, positive = you are more expensive), and Google's suggested sale price with the predicted change in impressions, clicks and conversions if you adopt it. Rows are ordered by sort: "opportunity" (largest predicted clicks gain first, the default) or "gap" (largest absolute price gap first), missing values last. Both views are dateless snapshots of the current catalog. All predicted*ChangeFraction and *Fraction fields are 0-1 FRACTIONS as Google reports them (0.12 = +12%), not the 0-100 percentage ctr uses elsewhere in this server. Not for competitors or best sellers: use get_gmc_competitors or get_gmc_best_sellers. Benchmarks need valid GTINs and suggestions need conversion reporting, so an empty result usually means "not eligible", not "no data"; reportUnavailable (with no rows) means Google refuses the pricing report for the Merchant Center account outright, and the other reports are unaffected. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

NameRequiredDescriptionDefault
sortNo"opportunity" (largest predictedClicksChangeFraction first, the default) or "gap" (largest absolute priceGapFraction first). Products without the sort key go last.opportunity
limitNoProducts to return after sorting (default 100, max 1000).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
countryCodeNoOptional. Restrict price benchmarks to one country (ISO 3166-1 alpha-2, e.g. "US"). Omit for every benchmark country; a product benchmarked in several countries then keeps its first benchmark and reports benchmarkCountryCode. Sale-price suggestions are never country-filtered.

Output Schema

NameRequiredDescription
hintNo
rowsNo
sortNo
rangeNo
reasonNo
thenByNo
accountNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
summaryNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
sortOrderNo
thenOrderNo
truncatedNo
unitsNoteNo
dataSourceNo
countryCodeNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
snapshotDateNo
notConfiguredNo
truncationNoteNo
eligibilityNoteNo
truncationReasonNo
reportUnavailableNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/open-world safety; the description adds substantial behavior: both views are dateless snapshots, row ordering semantics including where missing values land, a unit warning that this tool returns 0-1 fractions while `ctr` elsewhere in the server is 0-100, and three distinct non-error/degraded outcomes (empty = not eligible, `reportUnavailable` = Google refuses the report for the account with other reports unaffected, `notConfigured` = Merchant Center not connected). This is exactly the context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and organized as purpose → outputs → ordering → caveats → exclusions, with no filler. It is dense and clause-heavy, packing ordering rules and three failure modes into long run-on sentences, so a small trim would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be re-explained, and the description still covers the things the schema cannot: eligibility requirements (valid GTINs, conversion reporting), degraded-result semantics, and unit conventions. For a read-only, open-world report tool, nothing an agent needs in order to call it correctly or interpret an empty response is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented, and the description's restatement of `sort` ordering largely duplicates the schema. It adds a useful data-shape note (fractions vs percentages) but no new parameter-level semantics, notably leaving the countryCode multi-benchmark nuance entirely to the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the exact user question this answers (price competitiveness in Google Shopping, Google's suggested price), and the body states the two concrete outputs: priceGapFraction vs. market benchmark and suggested sale price with predicted impression/click/conversion deltas. It explicitly names the sibling tools it is not (get_gmc_competitors, get_gmc_best_sellers), so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit triggering condition ("Use this when the user asks whether their prices are competitive... or what Google suggests they charge") plus hard exclusions with the correct alternative named for each. It also warns that an empty result means "not eligible" rather than "no data", which prevents a common misdiagnosis path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gmc_title_hygieneMerchant Center title hygieneA
Read-only
Inspect

Use this when the user asks whether their Merchant Center titles or descriptions are too short, too long or duplicated. Title and description hygiene of the product catalog in the Google Merchant Center account linked to a GSC Wizard site: title length distribution (0-29 / 30-69 / 70-150 / 151+ characters), description length distribution (0-49 / 50-499 / 500-5000 / 5001+) and how many offers have no description, mean and median title length, duplicate titles (offers sharing the same normalised title, largest groups first), offers whose title repeats a word, and the most frequent title words with brand tokens flagged. Bands run shortest first and topWords most frequent first. Not for the scored 21-check feed audit: use get_feed_audit_results. Unlike the Title Hygiene report in the GSC Wizard app, which summarises every offer in the synced catalog, this tool always reads a live sample: the first limit products in feed order (default 2000, max 5000). truncated: true means the catalog had more, so the counts describe that sample; say so when quoting them, and point the user to the app report for full-catalog counts. topWords[].share is a 0-1 FRACTION of the sampled offers, not the 0-100 ctr percentage; lengths are in characters, CJK titles included. A catalog snapshot, so it takes no date range. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

NameRequiredDescriptionDefault
limitNoProducts to sample from the catalog, in feed order (default 2000, max 5000). The summary describes this sample; truncated says when the catalog had more.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
topWordsNoMost frequent title words to return (default 50, max 100).

Output Schema

NameRequiredDescription
hintNo
noteNo
limitNo
rangeNo
reasonNo
thenByNo
accountNo
cjkNoteNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
sampledNo
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
sortedByNo
topWordsNo
emptyNoteNo
sortOrderNo
thenOrderNo
truncatedNo
unitsNoteNo
dataSourceNo
offerCountNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
snapshotDateNo
cjkTitleCountNo
notConfiguredNo
avgTitleLengthNo
truncationNoteNo
truncationReasonNo
medianTitleLengthNo
variantsCollapsedNo
descriptionMissingNo
repeatedWordOffersNo
duplicateTitleGroupsNo
titleLengthHistogramNo
duplicateTitleGroupsLimitNo
descriptionLengthHistogramNo
duplicateTitleGroupsCappedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the read-only/non-destructive annotations: it discloses that results come from a live sample of the first `limit` products in feed order, that `truncated: true` means counts describe only that sample with an instruction to say so, that `topWords[].share` is a 0-1 fraction rather than a CTR percentage, and that a `notConfigured` result is returned instead of an error when Merchant Center is not linked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger and scoping facts, and most sentences carry distinct information. It is on the long side, with a few clauses (band boundaries, mean/median, brand-token flagging) that partially restate what the output schema already enumerates, but nothing is genuinely wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a sampled catalog tool with a 3-param schema, full schema descriptions and an output schema, the description supplies everything an agent still needs: sampling limits, truncation caveats, unit conventions, no-date-range semantics, and the not-configured behavior. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real value by explaining the consequence of `limit` (the summary describes only that sample, with truncation flagging) and by stating that bands run shortest-first and topWords most-frequent-first, an ordering the schema does not specify. It does not add anything for `siteUrl` beyond the GSC Wizard linkage already implied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (Merchant Center title/description hygiene) with a concrete enumeration of what is measured (length bands, duplicates, word frequency). It explicitly distinguishes itself from the sibling get_feed_audit_results and from the in-app Title Hygiene report, so an agent can tell it apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ("Use this when the user asks whether their ... titles or descriptions are too short, too long or duplicated") and names the exclusion plus alternative ("Not for the scored 21-check feed audit: use get_feed_audit_results"). It also routes the user to the app report when full-catalog counts are needed, covering the when-not case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_indexing_trackerGet indexing tracker config + statsA
Read-only
Inspect

Use this when the user asks how many of their tracked URLs are indexed, or whether indexing tracking is set up. Returns the GSC Wizard Indexing Tracker configuration for a property plus summary stats (total tracked URLs, indexed / not-indexed / pending / error counts, active warnings, and the most recent check time). Returns tracker: null if no tracker is configured for the property. Not for the URLs themselves: use list_tracked_urls; for lost and newly indexed pages over time use get_indexing_tracker_report.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
statsNo
messageNo
siteUrlNo
trackerNo
nextStepNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the exact stat categories returned and the important edge case that 'tracker: null' is returned when no tracker is configured. It stops short of richer operational detail (rate limits, quota behavior), keeping it at a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, zero waste, and correctly front-loaded: trigger conditions first, then return contents, then the null edge case, then exclusions. The ordering maps directly onto how an agent decides to call and interpret the result.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure need not be re-explained, yet the description still summarizes the returned counts and the null case. Together with the explicit sibling routing, an agent has everything needed to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single siteUrl parameter, so the description must compensate. It only indirectly conveys meaning via 'tracker configuration for a property', which implies siteUrl identifies a property but doesn't state format or expectations. Partial compensation for a one-param tool, hence baseline-ish 3 rather than 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (returns the GSC Wizard Indexing Tracker config + stats for a property) and names the exact trigger scenarios ('how many tracked URLs are indexed', 'whether indexing tracking is set up'). It explicitly distinguishes itself from list_tracked_urls and get_indexing_tracker_report, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Front-loads the 'use this when' conditions and then names two sibling alternatives with the conditions that select them ('Not for the URLs themselves: use list_tracked_urls', 'for lost and newly indexed pages over time use get_indexing_tracker_report'). Both when-to-use and when-not-to-use are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_indexing_tracker_reportIndexing tracker health reportA
Read-only
Inspect

Use this when the user asks how indexing of their tracked URLs is trending, including lost or newly indexed pages; it covers tracker URLs only. Indexing-health report for a property over the last N days (default 30, max 90). Computes a 0-100 health score from indexed %, crawl freshness, and warning-free % (each 0-100), plus a coverage-state breakdown, crawl-freshness buckets, recently lost pages, and newly indexed pages (newest first, max 200; lostPagesTotal / newlyIndexedTotal count all). A property with no tracker yet answers configured: false with empty figures; add URLs with add_tracked_urls to start one. Not for the per-URL list: use list_tracked_urls.

NameRequiredDescriptionDefault
daysNo
siteUrlYes

Output Schema

NameRequiredDescription
daysNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
messageNo
siteUrlNo
nextStepNo
orderingNo
sortedByNo
breakdownNo
lostPagesNo
sortOrderNo
thenOrderNo
truncatedNo
configuredNo
healthScoreNo
emptyBecauseNo
methodLimitsNo
newlyIndexedNo
crawlFreshnessNo
lostPagesTotalNo
coverageBreakdownNo
newlyIndexedTotalNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld=false, but the description goes well beyond them: it discloses the default and cap on the window (30/90), how the 0-100 health score is composed, the breakdowns returned, the 200-item cap with newest-first ordering, that totals count all items rather than the page, and the empty-state behavior (configured: false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition before the mechanics, and every clause carries information. The second sentence is long and packs score composition, breakdowns, caps, and empty-state into one run, which costs some scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-shape explanation isn't required, yet the description still summarizes the payload (health score, coverage states, freshness buckets, lost/new pages). Combined with the empty-state and sibling routing, an agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load. It fully specifies 'days' (default 30, max 90) and conveys 'siteUrl' as 'a property' with a no-tracker empty-state, though it never states the expected URL format (full URL vs sc-domain) that the minLength-only schema leaves ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: an indexing-health report for a property's tracked URLs over the last N days. It explicitly scopes to tracker URLs only and distinguishes itself from the per-URL sibling (list_tracked_urls) and implicitly from get_indexing_tracker.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how indexing of their tracked URLs is trending, including lost or newly indexed pages') and names the alternative for the other case ('Not for the per-URL list: use list_tracked_urls'). It also tells the agent what to do when no tracker exists (configured: false, then add_tracked_urls).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_indexnow_settingsGet IndexNow settingsA
Read-only
Inspect

Use this when the user asks whether IndexNow is set up for a site, or why its IndexNow submissions are not taking effect. Reports whether an API key is configured (masked to its last four characters; only keyFileUrl, set while the file is unverified, contains the full key) AND whether the key file is actually reachable on the site. Both are required before search engines accept submissions. When keyFileVerified is false, keyFileUrl is the exact file the site owner must publish, containing the key and nothing else. keyFileVerified is null when the check was inconclusive (timeout or a bot rule), which is not a failure. Check here before submit_indexnow_urls and whenever a submission fails. When no key is set, call update_indexnow_settings with generateKey: true and publish the key file it returns. Not for past submissions: use list_indexnow_submissions.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
siteUrlNo
keyFileUrlNo
keySiteUrlNo
keyFileErrorNo
keyFileUrlHintNo
keyFileVerifiedNo
indexnowApiKeySetNo
indexnowApiKeyMaskedNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false), yet the description adds substantial behavioral detail the agent could not infer: the key is masked to its last four characters, only keyFileUrl carries the full key while unverified, both conditions are required for engines to accept submissions, and keyFileVerified=null means an inconclusive check (timeout/bot rule), not a failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph that is well front-loaded: the trigger and the two reported facts come first, semantics of each field follow, and the sibling routing lands last. Almost every sentence earns its place, though the return-field detail is packed tightly enough to be slightly heavy for one run-on block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing (so return values need not be spelled out), the description goes further and explains the meaning of keyFileUrl and the null case of keyFileVerified. It also covers the remediation path (update_indexnow_settings with generateKey: true) needed to act on the result. Nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single siteUrl parameter with 0% schema description coverage, so the description carries the compensation burden. It refers to 'a site' and ties the whole check to it, implying the parameter's role, but never states the expected format of siteUrl (host vs full URL). Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (retrieve IndexNow settings) and immediately scopes it: it reports both whether an API key is configured and whether the key file is reachable. This clearly separates it from list_indexnow_submissions (past submissions) and submit_indexnow_urls (submission action), which are named in the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger conditions ('when the user asks whether IndexNow is set up for a site, or why its IndexNow submissions are not taking effect'), explicit sequencing ('Check here before submit_indexnow_urls and whenever a submission fails'), and an explicit exclusion with alternative ('Not for past submissions: use list_indexnow_submissions'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_inspection_quotaGet URL inspection quotaA
Read-only
Inspect

Use this when the user asks how many URL inspections are left today, or before inspecting several URLs. Returns the remaining URL inspection quota for a property today: count (used), limit and remaining. GSC enforces a 2,000 inspection/day/property cap; GSC Wizard tracks usage across both UI and MCP calls. Call this before bulk inspections to avoid surprises. Not for Bing's URL-submission allowance: use get_bing_url_submission_quota.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
countNo
limitNo
siteUrlNo
remainingNo
unavailableNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuine operational context beyond that: the 2,000 inspections/day/property cap and the fact that usage is tracked across both UI and MCP calls, which is what makes the number actionable. It stops short of stating freshness/caching of the counter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the usage trigger and return shape, each sentence carrying distinct information (trigger, return fields, cap mechanics, alternative tool). Slightly dense but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented, yet the description still names the three fields. Combined with the cap mechanics and the sibling disambiguation, an agent has everything needed to select and call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One required parameter with 0% schema description coverage, so the description must carry the burden. It implies the parameter is the GSC property ('for a property today') but never states the expected format (e.g., sc-domain: vs URL prefix) or that an invalid property yields an error. Partial compensation, so an adequate 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns the remaining URL inspection quota for a property today') and enumerates the returned fields (count, limit, remaining). It explicitly disambiguates from the nearest sibling by naming get_bing_url_submission_quota.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user asks how many URL inspections are left today'), a proactive use case ('before inspecting several URLs' / 'before bulk inspections'), and a clear exclusion with the alternative tool named. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_longtail_clustersLong-tail page clusteringA
Read-only
Inspect

Use this when the user asks whether a property's traffic leans on a few pages or on a bloated long tail: segments its pages into Head / Chunky Middle / Long Tail tiers by elbow detection on the cumulative-clicks curve (the app's Long-tail Clustering report). Not for URL folders: use breakdown_by_path. Returns each tier's page count, click/impression share, average CTR (0-100)/position/query-diversity, the knee points, and the top pages per tier. Page clicks/impressions/position (and the totals) are the page figures Search Console's page filter shows, including anonymized-query traffic; query diversity counts only the page's named queries (query x page rows), and coverage.hiddenClicksShare (0-1) is the share of the property's clicks with no query row. Tiers run head to tail, each tier's pages by clicks, highest first. Reads the ClickHouse warehouse when available, else the live Search Console API. truncated: true (with truncationNote) means a cap was hit: the warehouse clusters at most the 100,000 pages with the most clicks, the live API reads at most 100,000 pages and 100,000 query x page rows. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
presetNoTuning preset: default | content | ecommerce | small_site | enterprise.default
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
sensitivityNoOverride the preset's knee sensitivity: low | normal | high.
pagesPerClusterNoHow many top pages to list per tier (default 10). 0 returns tier stats only.
includeZeroClicksNoInclude pages with zero clicks (impressions only). Defaults per preset (usually true).

Output Schema

NameRequiredDescription
noteNo
kneesNo
rangeNo
presetNo
thenByNo
totalsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
clustersNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
nextStepNo
orderingNo
sortedByNo
warningsNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
partialDaysNo
sensitivityNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
settledThroughNo
truncationNoteNo
apiRowCapReachedNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, non-destructive, open-world behavior, and the description adds substantial operational context: ClickHouse vs live Search Console fallback, truncation caps, settled-date lag, anonymized-query handling, query-diversity scope, and coverage.hiddenClicksShare semantics. It discloses meaningful limitations beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loads the use case, scope exclusion, return shape, data-source behavior, and truncation limits. It is longer than typical, but most details are useful for a complex analytics tool; some return-value detail could have been left to the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity, annotations, high schema coverage, and the presence of an output schema, the description is complete enough to invoke correctly. It explains data sources, date defaults, truncation behavior, tier semantics, and the main sibling alternative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 86%, so the schema carries most parameter meaning. The description reinforces the optional date range and default 28-day window, but it does not add much explanation for preset, sensitivity, pagesPerCluster, or includeZeroClicks beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific analytical operation: segmenting a property's pages into Head / Chunky Middle / Long Tail tiers by elbow detection on the cumulative-clicks curve. It also distinguishes the tool from a sibling by explicitly saying it is not for URL folders and naming breakdown_by_path instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear when-to-use condition: the user asks whether traffic leans on a few pages or a bloated long tail. It also gives an explicit when-not-to-use case and the alternative to use for URL-folder analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_merchant_listings_performanceMerchant listings performanceA
Read-only
Inspect

Use this when the user asks how visible their product results are in Google web Search, and which product pages carry them. Search Console performance for one search appearance, defaulting to MERCHANT_LISTINGS: the appearance inventory of the property, a daily clicks / impressions / CTR / position timeline in date order, and the top pages (product URLs) behind it; appearances and pages are sorted by clicks, highest first, and CTR is a 0-100 percentage. Search Console merchant listings counts enriched product results in web Search only, so it does not reconcile to one figure with Merchant Center free listings. Not for the Shopping tab, Images, Lens, YouTube or Maps: use get_organic_shopping_performance. Always served from the live Search Console API: search appearance is never stored in the GSC Wizard warehouse, and it can be filtered on but never grouped with another dimension. hasAppearance is false when the property has no rows for the requested appearance, and emptyBecause is set whenever it has no impressions, which is normal for non-ecommerce sites. The window may span at most 16 months (Search Console retention); a longer one is rejected with bad_request. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoTop pages to return, ordered by clicks (default 25, max 1000).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
appearanceNoSearch appearance code to report on. Defaults to MERCHANT_LISTINGS; other common values are PRODUCT_SNIPPETS and ORGANIC_SHOPPING. Read `appearances` in the response to see which codes this property actually has.MERCHANT_LISTINGS
includeAppearancesNoInclude the unfiltered per-appearance breakdown, which is the only way to learn which appearance codes the property has and how big each one is.

Output Schema

NameRequiredDescription
noteNo
pagesNo
thenByNo
totalsNo
endDateNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
timelineNo
emptyNoteNo
sortOrderNo
startDateNo
thenOrderNo
appearanceNo
dataSourceNo
searchTypeNo
appearancesNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
hasAppearanceNo
settledThroughNo
warehouseLatestDateNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint true, destructiveHint false), and the description layers on genuinely non-obvious behavior: always served live from the API and never from the warehouse, filterable but never groupable by another dimension, hasAppearance=false semantics, emptyBecause population rules, a hard 16-month retention cap that returns bad_request, and a ~2-3 day data lag. The reconciliation caveat versus Merchant Center free listings is exactly the kind of cross-tool behavioral warning annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite its length, it is front-loaded with the usage trigger and the sibling exclusion before any detail, and each subsequent clause carries a distinct fact (warehouse exclusion, grouping restriction, empty-state fields, retention cap, date default). No sentence is redundant with the schema or annotations, though a light bullet structure would improve scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, yet the description still clarifies the two empty-state fields an agent must interpret (hasAppearance, emptyBecause). Combined with the retention limit, date defaults, and live-API constraint, nothing an agent needs to call this correctly or interpret an empty response is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: the appearance defaults to MERCHANT_LISTINGS, appearances and pages are sorted by clicks highest-first, CTR is expressed as a 0-100 percentage, and omitting both dates yields the last 28 settled days. The `appearances` response field pointer also tells the agent how to discover valid codes despite the absence of an enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Search Console performance for one search appearance') plus the exact default (MERCHANT_LISTINGS) and the three artifacts returned: appearance inventory, daily clicks/impressions/CTR/position timeline, and top product URLs. It explicitly distinguishes itself from get_organic_shopping_performance by listing the surfaces that tool covers (Shopping tab, Images, Lens, YouTube, Maps), so an agent can separate the two siblings without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the triggering user intent ('how visible their product results are in Google web Search, and which product pages carry them') and names the alternative with its condition ('Not for the Shopping tab, Images, Lens, YouTube or Maps: use get_organic_shopping_performance'). It also gives a caveat about non-ecommerce sites producing empty results, which pre-empts a wrong-tool conclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_migration_healthGet migration healthA
Read-only
Inspect

Use this when the user asks how a site migration is doing or what to fix. The GSC Wizard app's Migration Compare analysis around the go-live date (without brand terms, the search-type split or a saved migration's country / device filters; notes says what differs). Returns recovery (side B clicks per day as a % of side A clicks per day before go-live), pace against the recovery a migration on track reaches by now, momentum, a projected recovery with milestone dates, URL success per migration unit, a 0-100 risk score with its factors, prioritised recommendations, redirect status counts (stored checks), the top lost pages, lost queries and losing sections (biggest loss first), redirect problems, the old-to-new impression handover, the click change split into demand / position / CTR effects, the country and device splits (segments) with their recommendations, and a launch checklist; redirect problems and segments by clicksBefore, descending. ctr and shares are 0-100, handover.currentNewShare 0-1. Query figures cover only queries Google lists (waterfall.coveragePct: their click share). siteUrl is the OLD property (side A); pass siteUrlB (the new one) for a domain move, omit it for a migration inside one property. Not for a plain before/after read: use compare_migration. Pass goLiveDate, or a migrationId from list_migrations to reuse a migration saved in the app (its properties, URL prefixes or regexes, go-live date, windows, mapping label and Only mapped URLs setting; explicit arguments override it). Redirect mappings are those saved for the property pair (add_migration_redirects or the app); without any, pages are joined by path. onlyMapped is the app's "Only mapped URLs": with saved mappings, the totals, recovery and health count only the pages the mappings claim, and so do the country and device splits of a side read from the warehouse (segments.scope says which; each 10 warehouse queries of those splits cost one more rate-limit unit). Windows as in compare_migration: windowStrategy "recent" (default), "from-go-live" or "full", windowDays (default 28), yoyBaseline. Page and query reads cover at most the top 25,000 rows by clicks per side and window, and at most 10,000 redirect mappings are analysed (each 2,000 costs one more rate-limit unit); truncated flags a reached cap. health is null until a post-launch day has final data.

NameRequiredDescriptionDefault
siteUrlYesThe OLD property (side A), as returned by list_sites. With migrationId it must be the saved migration's old property.
siteUrlBNoThe NEW property (side B) for a move between properties. Omit when the migration happened inside one property.
goLiveDateNoFirst day the new setup was live, as YYYY-MM-DD. Required unless migrationId supplies one.
onlyMappedNoOnly mapped URLs: count only the pages the redirect mappings claim (the old URLs' pages on side A, their new URLs' pages on side B) in the totals, recovery and health. Default: the saved migration's setting with migrationId, else false. No effect without saved mappings.
windowDaysNoWindow length in days for "recent" and "from-go-live" (default 28).
migrationIdNoId of a migration saved in the app (list_migrations). Its setup supplies everything the arguments leave out.
yoyBaselineNoCompare with the same weeks one year (364 days) earlier instead of the days before go-live. Default false.
mappingLabelNoOnly the redirect mappings carrying this label ("__none__" = only unlabelled ones). Omit to use every mapping saved for the property pair.
windowStrategyNo"recent" (default): the last windowDays days vs the windowDays days before go-live. "from-go-live": the first windowDays days after go-live vs the windowDays days before. "full": the 90 days before go-live vs every day since.

Output Schema

NameRequiredDescription
notesNo
setupNo
healthNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
summaryNo
windowsNo
handoverNo
mappingsNo
nextStepNo
orderingNo
segmentsNo
sortedByNo
warningsNo
checklistNo
migrationNo
redirectsNo
sortOrderNo
thenOrderNo
truncatedNo
waterfallNo
dataSourceNo
pageTrendsNo
queryTrendsNo
emptyBecauseNo
methodLimitsNo
topLostPagesNo
topLostQueriesNo
truncatedReadsNo
topLosingSectionsNo
topRedirectProblemsNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only safety, but the description goes well beyond: rate-limit costs for warehouse segment queries and every 2,000 redirect mappings, hard caps (25,000 rows, 10,000 mappings) with a `truncated` flag, `health` being null until post-launch data is final, and the fallback to path-join when no mappings exist. It also states precedence rules (explicit arguments override a saved migrationId) and segment scope values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The usage guidance is front-loaded, but the bulk is a single sprawling sentence enumerating roughly twenty return fields, which an output schema already carries. The information density is high, yet the paragraph is hard to parse and spends meaningful length restating return values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, multi-mode analysis this covers the decision points an agent needs: which mode (domain move vs in-property), what a saved migrationId supplies, how caps and rate limits bite, and when `health` is unavailable. Return-shape explanation is partly redundant given the output schema, but nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, and the description still adds cross-parameter semantics the schema can't express: siteUrl is the OLD side and siteUrlB is only for a domain move (omit for an in-property migration), onlyMapped is inert without saved mappings, and migrationId feeds every omitted argument. It largely restates mappingLabel/windowStrategy rather than extending them, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and decision-oriented resource ('how a site migration is doing or what to fix'), and immediately differentiates scope from the sibling compare_migration. An agent can tell which analysis it needs without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('when the user asks how a site migration is doing or what to fix'), explicit when-not ('Not for a plain before/after read: use compare_migration'), and named alternatives for adjacent needs (list_migrations for saved setups, add_migration_redirects for mappings).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_organic_shopping_performanceOrganic shopping performanceA
Read-only
Inspect

Use this when the user asks how their products perform in free Shopping listings. Organic (free listing) product performance from the Google Merchant Center account linked to a GSC Wizard site: a daily clicks / impressions / conversions timeline plus the top offers, groupable by brand, Google category or merchant product type. Optionally includes the non-product timeline (category and home pages reached from Merchant Center surfaces). Timelines run in date order and rows by clicks, highest first; CTR is a 0-100 percentage. Merchant Center free-listing numbers cover the Shopping tab, Search, Images, Lens, YouTube and Maps, so they do not reconcile to one figure with Search Console merchant listings. Not for enriched product results in web Search alone: use get_merchant_listings_performance. Conversions exist only where the merchant configured a Merchant Center conversion source. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoTable rows to return, ordered by organic clicks (default 25, max 200).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
groupByNoHow the table rows are grouped: "offer" (one row per product / offer id, the default), "brand", "category" (Google product taxonomy level 1) or "productType" (the merchant's own taxonomy level 1).offer
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
includeNonProductNoInclude the non-product timeline: clicks to category / home pages from Merchant Center surfaces, which never appear in the product numbers.

Output Schema

NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
reasonNo
thenByNo
totalsNo
accountNo
groupByNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
timelineNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
currencyCodeNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
notConfiguredNo
conversionNoteNo
definitionNoteNo
truncationNoteNo
marketingMethodNo
nonProductTotalsNo
truncationReasonNo
nonProductTimelineNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/open-world; the description adds substantial non-obvious behavior: which surfaces the numbers cover and why they don't reconcile with Search Console, that conversions exist only if a Merchant Center conversion source is configured, that data lags ~2-3 days, and that a notConfigured result is returned rather than an error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, then behavior, then exclusions — a sensible order. It is a single dense paragraph and slightly long, but each sentence (reconciliation caveat, conversion caveat, date default) carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a fully covered 6-parameter schema and an output schema, the description covers the remaining gaps an agent needs: coverage surfaces, non-reconciliation, conversion preconditions, date-lag defaults and the notConfigured outcome. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter is already documented, including the date-omission fallback and groupBy enum meanings, so the description adds little beyond restating that range is optional and naming the grouping options. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Organic (free listing) product performance from the Google Merchant Center account linked to a GSC Wizard site') and names exactly what is returned (clicks/impressions/conversions timeline, top offers). It explicitly distinguishes itself from the sibling get_merchant_listings_performance, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how their products perform in free Shopping listings') and gives the negative case with the alternative named ('Not for enriched product results in web Search alone: use get_merchant_listings_performance'). It also states the notConfigured fallback so the agent knows that outcome is not a failure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_performancePage performance over timeA
Read-only
Inspect

Use this when the user asks how one specific page performed day by day. Daily performance for a single page (clicks, impressions, CTR, position). Useful for diagnosing post-deploy regressions on a specific URL. Not for a ranking of pages: use query_top_pages. pageUrl must match the URL exactly. Rows run by date, oldest first; days without impressions are absent, not zero. ctr is a 0-100 percentage. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
pageUrlYes
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web

Output Schema

NameRequiredDescription
noteNo
dailyNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
pageUrlNo
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
settledThroughNo
warehouseLatestDateNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, openWorld), and the description adds substantive behavior beyond that: row ordering oldest-first, days with no impressions being absent rather than zero, ctr expressed as a 0-100 percentage, dual data sourcing from ClickHouse or the live API, and a ~2-3 day data lag. These are exactly the quirks an agent must know before interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case, then routing guidance, then data caveats. Every sentence carries information an agent needs; none restates the tool name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape needn't be explained, and annotations carry the safety profile. The description closes the remaining gaps an agent would hit: date window defaults, data freshness, sparse-day handling, and percentage scaling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 60% schema coverage, the description adds real value: it states pageUrl must match the URL exactly (the schema only declares format uri) and explains that omitting the date range yields the last 28 settled days. The searchType enum semantics are already fully documented in the schema, so the description breaks little new ground there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource - daily per-page performance - and enumerates the metrics returned (clicks, impressions, CTR, position). It explicitly distinguishes itself from query_top_pages, so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ("user asks how one specific page performed day by day"), a diagnostic use case (post-deploy regressions on a URL), and a named alternative with the condition that selects it ("Not for a ranking of pages: use query_top_pages"). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_position_distributionRanking position distributionA
Read-only
Inspect

Use this when the user asks how much visibility sits in the top 3, on page one or deeper: slices a property by where it ranks, using the same 1-3 / 4-10 / 11-20 / 21+ bands as the GSC Wizard dashboard. Not for CTR by position: use analyze_ctr_curve. granularity "period" (default) returns impressions, clicks and the number of queries (or pages) in each band over the whole range. granularity "daily" returns one row per day with the count of DISTINCT queries ranking in each band, to see a ranking shift build up or a drop land on a date. Bands run best first (1-3 to 21+) and days oldest first; ctr and the shares are 0-100 percentages. By query, counts and shares cover only the queries Google lists: on most properties a large share of clicks has no query row (analyze_sampling_impact measures it). Positions are impression-weighted averages, so a row sits in one band only. Served from the GSC Wizard ClickHouse warehouse when available (both views are computed over every query or page, never truncated; scanLimit is null there), otherwise from the live Search Console API over the top scanLimit rows by clicks, which drops zero-click rows first and so understates the deep bands when truncated is true (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
dimensionNoWhat a "row" is on the period path: a search query or a page.query
scanLimitNoHow many top rows by clicks to bucket on the live Search Console API. Raise it when a long-tail property reports `truncated: true`. Ignored on the ClickHouse warehouse, which buckets every row in SQL.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
granularityNo"period" = one bucket summary over the range; "daily" = distinct query counts per band per day (always keyed on query, ignores `dimension`).period

Output Schema

NameRequiredDescription
daysNo
noteNo
rangeNo
thenByNo
totalsNo
bucketsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
dayTotalsNo
dimensionNo
scanLimitNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
searchTypeNo
granularityNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
settledThroughNo
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld annotations: it discloses the dual data source (ClickHouse warehouse vs. live GSC API), that scanLimit is null on the warehouse, that truncation drops zero-click rows and understates deep bands, and the ~2-3 day data lag. These are non-obvious failure modes the agent needs before interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but front-loaded: the trigger and the sibling exclusion come first, then output ordering, then data-source caveats. Nearly every sentence carries information, though the warehouse/truncation passage is dense and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analytics tool with an output schema and annotations, this covers all the remaining gaps an agent needs: band definitions, ordering, percentage scale, data-source caveats, truncation effects, and date-range defaults with lag.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 86%, so the schema already documents most params; the description still adds value by explaining what granularity 'daily' returns (distinct query counts per band per day, ignoring dimension), band/day ordering, and that ctr and shares are 0-100 percentages. That is meaningful semantics beyond the schema, though siteUrl and date params are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: slices a property by ranking position into the 1-3 / 4-10 / 11-20 / 21+ bands. It immediately names the sibling it is not (analyze_ctr_curve for CTR by position), so the agent can distinguish it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how much visibility sits in the top 3, on page one or deeper') and names an exclusion with the alternative tool. The period-vs-daily guidance also tells the agent which mode fits which intent (ranking shift build-up vs. drop on a date).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_product_listing_statusProduct free-listing statusA
Read-only
Inspect

Use this when the user asks which products are missing from free listings, and why. Free-listing eligibility and item issues per product, from the Google Merchant Center account linked to a GSC Wizard site, sorted by clickPotentialRank (1 = the product Google expects the most clicks from; unranked products last, ties by offerId). Each row carries the aggregated status (ELIGIBLE / ELIGIBLE_LIMITED / PENDING / NOT_ELIGIBLE_OR_DISAPPROVED), the free-listings status when the synced catalog has it, the top issue code and whether fixing it needs a merchant action or is just pending Google processing. statusCounts, issueCounts (the 20 most common top issues, most frequent first), problemCount and merchantActionCount (problems that need a feed or site fix) summarise the whole scan, not just the returned page; page through every row with offset, passing back nextOffset until it is null. Answered from the catalog snapshot GSC Wizard syncs daily into its warehouse when the site has one (dataSource: "clickhouse", syncedAt says when, stale: true when it is more than two days old; every offer is counted), with a live Merchant API scan of up to 5,000 products as the fallback (dataSource: "merchant-api", truncated when the catalog had more or Merchant Center was too slow to read it all within about 40 seconds; truncationReason says which). itemIssuesUnavailable: true means Google refused the issue data, so a missing issue code is unknown rather than clean. syncPaused (with a one-line staleNote) means the daily sync is paused because Merchant Center no longer lets the connected Google account read the merchant: the data is still returned but may be stale, and syncPaused.message says how to fix it. syncNotice (reason "gmc_on_other_account") means Merchant Center is connected on another Google login than the property's Search Console one, so the snapshot cannot refresh; the data is still returned. This is catalog state, not traffic. Not for the clicks a product actually got: use get_organic_shopping_performance. Returns a notConfigured result (not an error) when Merchant Center is not connected, its credentials were revoked, no Merchant Center account is linked to the site in the GSC Wizard app, or (reason "gmc_on_other_account") nothing was ever synced because Merchant Center sits on another Google login and no live read is possible.

NameRequiredDescriptionDefault
limitNoProduct rows to return, highest click potential first (default 25, max 200).
offsetNoRows to skip, for reading past the first page: pass the previous answer's nextOffset (default 0, max 100,000).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
onlyProblemsNoReturn only products that are not plainly serving (limited, pending, disapproved, or carrying an item issue). Set false to list the whole catalog by click potential.

Output Schema

NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
staleNo
offsetNo
reasonNo
thenByNo
accountNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
scannedNo
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
syncedAtNo
sortOrderNo
staleNoteNo
thenOrderNo
truncatedNo
dataSourceNo
nextOffsetNo
syncNoticeNo
syncPausedNo
issueCountsNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
onlyProblemsNo
problemCountNo
statusCountsNo
notConfiguredNo
itemIssuesNoteNo
truncationNoteNo
truncationReasonNo
merchantActionCountNo
itemIssuesUnavailableNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld annotations: it discloses the two data sources (daily ClickHouse snapshot vs. live Merchant API capped at 5,000 products / ~40s), staleness rules (>2 days = stale), truncation reasons, and degraded states (itemIssuesUnavailable, syncPaused, syncNotice). The one gap is that it never explains the cost/latency tradeoff of the live fallback beyond the 40s note, but the behavioral surface is unusually well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly with the usage trigger and the key sorting rule, and most sentences carry distinct edge-case information. However it is one dense ~350-word block with no breaks between data-source, staleness, truncation, and sync-state concerns, which makes it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values need not be explained, yet the description still names the summary fields (statusCounts, issueCounts, problemCount, merchantActionCount) and clarifies they cover the whole scan rather than the page — exactly the kind of subtlety an agent would otherwise get wrong. Every non-obvious state (notConfigured, truncated, syncPaused) is accounted for.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds value by explaining pagination intent ('page through every row with offset, passing back nextOffset until it is null') and the clickPotentialRank ordering that governs limit/offset. onlyProblems semantics are left entirely to the schema, which is acceptable given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('free-listing eligibility and item issues per product') and immediately scopes it to the Merchant Center account linked to a GSC Wizard site. It explicitly distinguishes itself from the nearest sibling by declaring 'This is catalog state, not traffic' and naming get_organic_shopping_performance as the traffic alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks which products are missing from free listings, and why') and closes with an explicit exclusion plus the correct alternative ('Not for the clicks a product actually got: use get_organic_shopping_performance'). The notConfigured cases further tell the agent what a non-error empty answer means.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_query_performanceQuery performance over timeA
Read-only
Inspect

Use this when the user asks how one search query performed day by day. Daily performance for a single search query, optionally restricted to one landing page. Useful for tracking position changes after on-page edits. Not for a ranking of queries: use query_top_queries. query (and pageUrl) must match exactly. Rows run by date, oldest first; days without impressions are absent, not zero. ctr is a 0-100 percentage. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
queryYes
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
pageUrlNo
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web

Output Schema

NameRequiredDescription
noteNo
dailyNo
queryNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
pageUrlNo
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
settledThroughNo
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/safety; the description adds substantive behavior: dual data sourcing (ClickHouse vs live GSC via dataSource), a ~2-3 day data lag, default 28-settled-day window, oldest-first row ordering, absent days omitted rather than zeroed, and ctr expressed 0-100. These are exactly the non-obvious traits an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence carries information — trigger, exclusion, exact-match constraint, ordering/absent-day semantics, ctr units, data source, and default window. It is dense and slightly packed into one block rather than split, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary; the description supplies everything else an agent needs — defaults, lag, sorting, missing-day semantics, unit for ctr, and data provenance. Nothing material is missing for a read-only analytics tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema coverage the description adds real meaning: exact-match requirement for query and pageUrl, and the optional date-range default (omit both to get the last 28 settled days). It stops short of covering siteUrl and the searchType caveats in depth, but searchType is documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Daily performance for a single search query, optionally restricted to one landing page') and explicitly distinguishes itself from the sibling query_top_queries. An agent can identify scope without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how one search query performed day by day'), names a use case (tracking position changes after on-page edits), and names the exclusion with the alternative ('Not for a ranking of queries: use query_top_queries').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_query_shape_trendQuery shape trend over timeA
Read-only
Inspect

Use this when the user asks "are AI Overviews / AI Mode queries growing on this site?", which no single-period report can show: tracks how much of a property's search traffic comes from AI-shaped queries over time (the trend chart on the app's Query Analysis report). Not for the per-bucket breakdown: use analyze_query_shapes. Returns one row per month (or week), oldest first, with clicks and impressions split into AI-shaped (reply artefacts, pivot follow-ups, conversational questions) versus conventional keywords, plus the AI-shaped share of each metric (0-100). Shares and totals are of visible queries only: coverage.hiddenClicksShare (0-1) is the share of the property's clicks with no query row. Defaults to the last 12 complete months. Served from the GSC Wizard ClickHouse warehouse when available (longer history), otherwise the live Search Console API.

NameRequiredDescriptionDefault
monthsNoHow many complete months to cover, ending with last month (1-16; Search Console keeps ~16 months).
endDateNoOptional. Window end as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
granularityNomonth

Output Schema

NameRequiredDescription
noteNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
periodsNo
siteUrlNo
warningNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
nextStepNo
orderingNo
sortedByNo
shapeNoteNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
granularityNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
settledThroughNo
truncationNoteNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only annotations, it discloses that results come from a ClickHouse warehouse when available or the live Search Console API otherwise, that totals are based only on visible queries, and that coverage.hiddenClicksShare reports the missing-query-row share. It also describes the output shape, ordering, and share ranges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core use case and the sibling distinction, and most sentences carry useful information. It is a dense single paragraph with nested parentheticals, so readability could be improved, but it is not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trend tool with six parameters and an output schema, the description supplies the key context an agent needs: when to use it, the alternative for per-bucket analysis, default window, output granularity, caveats about visible queries, and data-source differences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description adds meaning by stating the default 12 complete months and that output rows are per month or week. It does not explain every parameter, but the schema itself documents months, startDate, endDate, and searchType well, and the description covers the most important defaults and caveats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: tracking AI-shaped query traffic over time for a property. It explicitly contrasts itself with analyze_query_shapes, so an agent can distinguish it from the per-bucket breakdown sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the exact user question this tool answers (growth of AI Overviews / AI Mode queries), notes that no single-period report can show it, and explicitly says not to use it for per-bucket breakdowns, directing the agent to analyze_query_shapes instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_query_value_attributionEstimated GA4 value per GSC queryA
Read-only
Inspect

Use this when the user asks which queries bring GA4 value: estimates GA4 sessions, key events, and revenue per Search Console query via proportional click share: a query with 80% of a page's GSC clicks is credited 80% of that page's GA4 outcomes. Not for page totals: use get_blended_landing_pages. Page-level estimates with known blind spots (device/country/date mismatches are invisible; every click is treated as equally likely to convert). matchedClickShare (0-1) reports how much of the named-query click volume the estimates cover, and coverage.hiddenClicksShare (0-1) the share of the property's clicks with no query row, which gets no estimate; estRevenue appears only when the GA4 property records revenue. Rows run clicks descending, period by period with dateGranularity. Requires a GA4 property linked to the site in GSC Wizard; returns a notConfigured explanation otherwise. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoRows to return. Applies per period when dateGranularity is set.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
organicOnlyNoLimit GA4 outcomes to google / organic sessions so only organic value is distributed across queries. Default true; set false to distribute all-traffic GA4 outcomes.
dateGranularityNoSplit the range into periods and return one set of rows per period, each tagged with a `date` (the period start, clamped to the requested range). Use this to chart a tool's output over time instead of getting a single aggregate: "month" gives month-on-month, "week" gives Monday-aligned weeks, "day" gives a daily series. Default "none" returns one aggregate over the whole range, unchanged. `limit` applies per period when set. Comparison fields (prev*) compare each period against the period before it.none

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover only the safety profile (readOnly/openWorld/non-destructive), and the description goes well beyond them with rich behavioral detail: the proportional-click-share methodology, explicit blind spots (device/country/date mismatches invisible, every click treated as equally likely to convert), the matchedClickShare and coverage.hiddenClicksShare metrics, conditional estRevenue, row ordering, per-period semantics, and data lags ~2-3 days. This is exactly the extra context the annotations cannot supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, alternative, then methodology, then output caveats, then required setup and defaults. Every sentence carries signal, but the single dense paragraph runs long, and some output-field explanation (matchedClickShare, hiddenClicksShare) overlaps with the output schema, slightly diluting conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nuanced estimation tool with 6 params and an output schema, the description covers trigger, method, caveats, prerequisite configuration, defaults and error behavior. An agent has everything needed to decide to call it and to interpret the estimates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 83%, so baseline is 3, but the description adds genuine meaning: date range is optional and defaults to the last 28 settled days, limit applies per period, and organicOnly governs whether all-traffic GA4 outcomes are distributed. It clarifies the date/period behavior in a way that complements rather than repeats the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: estimates GA4 sessions, key events and revenue per Search Console query, and spells out the estimation method (proportional click share). It explicitly distinguishes itself from the nearest sibling: 'Not for page totals: use get_blended_landing_pages.' An agent can pick it out of the sibling list without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with a direct trigger ('Use this when the user asks which queries bring GA4 value') and names the exclusion plus the alternative tool. The GA4-linkage prerequisite and the notConfigured fallback further tell the agent when the call will and won't succeed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ranking_changesGet ranking changes between two periodsA
Read-only
Inspect

Use this when the user asks which queries or pages moved up or down between two periods: each is filed as new, lost, improved or declined (improved = better, lower average position). Not for pages losing clicks over time: use find_decaying_content. limit (1-10000, default 50) applies PER BUCKET; counts gives the full size of each bucket before that cut. Buckets run largest first: improved and declined by the size of positionDelta (prevPosition minus position; a new or lost key's missing side reads 0), new by clicks, lost by prevClicks. ctr is a 0-100 percentage. Each period reads its top scanLimit keys by clicks (warehouse: max(limit*10, 1000), capped at 50000; live API: 25000), and counts are measured within them. The warehouse reads every key in either period's top scanLimit in both periods, so new and lost are real; on the live API the reads are independent, so a key just below one cut can show as new or lost. Query movers are only the queries Google lists: on most properties a large share of clicks has no query row (analyze_sampling_impact measures it). Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
dimensionNoquery
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
comparisonEndDateNoOptional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here.
comparisonStartDateNoOptional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here.

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly/openWorld/non-destructive, but the description adds substantial non-obvious behavior: per-bucket bucketing semantics, sort order within buckets, warehouse-vs-live-API differences in how new/lost are computed, scanLimit expansion, sampling gaps on query rows, and a 2-3 day data lag. This is context no annotation could carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use-when case, and nearly every sentence carries genuinely useful caveats. It is dense and runs as one block rather than being segmented by concern, so an agent has to parse carefully, but there is little filler to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex cross-period comparison tool with an output schema present, the description covers sourcing, bucketing rules, fallback behavior, sampling caveats, and defaults. Nothing needed to invoke it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 63%, and the description fills the gap with critical meaning: `limit` applies per bucket (not globally), `counts` reports full bucket sizes before that cut, `ctr` is 0-100, `scanLimit` derivation per source, and the omit-dates default of the last 28 settled days. These are interpretations the schema does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — queries or pages that moved up or down between two periods — and instantly names the sibling it is not for (find_decaying_content). An agent can distinguish this from find_decaying_content and detect_change_points without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'Use this when the user asks which queries or pages moved up or down between two periods' plus an explicit exclusion ('Not for pages losing clicks over time: use find_decaying_content'). The alternative and the condition selecting it are both stated, plus the default-with-no-dates case is covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sitemap_performanceSitemap URL performanceA
Read-only
Inspect

Use this when the user asks how the URLs in one sitemap perform in Google search, or how many of them get impressions. Fetches a sitemap belonging to the property, extracts its URLs, and joins them with Search Console page performance over a date range. Each URL gets its clicks, impressions, ctr (a percentage, 0-100), and average position (zeros if the page has no GSC data), sorted by clicks then impressions, highest first. Reports how many sitemap URLs actually received impressions (indexedInGscCount). The warehouse reads the sitemap URLs themselves, so a zero is exact. The live API cannot, so it pages through the property's pages (top 100,000 by clicks at most) until every URL is found; truncated: true means some URLs were not reached, so their zeros are unknown rather than "no impressions" (scanLimit is the rows read). Expands one level of a sitemap index (up to 5 child sitemaps; a child that cannot be read is named in childSitemapNote instead of failing the call), caps extracted URLs at maxUrls (default 500, max 2000), and only fetches http(s) URLs on the property host or a subdomain of it. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). The sitemap is fetched with the user agent "GSCWizard-Bot/1.0 (On-Page SEO Checker)"; if the server blocks it (403/401/429) or no URLs come back, relay the whitelisting advice in the error or crawlNote. Not for the list of submitted sitemaps: use list_sitemaps. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
maxUrlsNo
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
sitemapUrlYes

Output Schema

NameRequiredDescription
noteNo
urlsNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
sortedByNo
urlCountNo
crawlNoteNo
scanLimitNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
sitemapUrlNo
partialDaysNo
sitemapNoteNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
settledThroughNo
truncationNoteNo
childSitemapNoteNo
indexedInGscCountNo
failedChildSitemapsNo
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnly/openWorld annotations: it explains the dual data path (ClickHouse warehouse vs live Search Console API via dataSource) and why zeros are exact in one and possibly unknown in the other, what `truncated` and `scanLimit` mean, that a sitemap index is expanded one level to at most 5 children with failures surfaced in `childSitemapNote`, that URLs are capped by maxUrls and filtered to http(s) on the property host or subdomains, the bot user agent used, and to relay whitelisting advice on 403/401/429. Output ordering (clicks then impressions, descending) is also disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the core behavior, and nearly every clause carries operational value. The middle section is a dense run-on of caveats (warehouse/live discrepancy, index expansion, URL caps, bot user agent) that could be split or trimmed slightly, but nothing is truly filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with an output schema, the description still surfaces the key return fields an agent must interpret (indexedInGscCount, truncated, dataSource, childSitemapNote, crawlNote). Combined with the schema's date and searchType documentation, an agent has everything needed to call it and read the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, but the description compensates well for the gaps: it documents maxUrls' purpose, default 500 and ceiling 2000, the semantics of omitting startDate/endDate (last 28 settled days, data lags 2-3 days), and that sitemapUrl identifies a single sitemap. The one real omission is searchType, which is left entirely to the schema despite being an enum with non-obvious values like discover and all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it fetches one sitemap belonging to the property, extracts its URLs, and joins them with Search Console page performance over a date range. It also names precisely what it is not for (the list of submitted sitemaps) and points to list_sitemaps. An agent can distinguish it from sibling tools such as query_top_pages or list_sitemaps without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks how the URLs in one sitemap perform...') and closes with an explicit exclusion plus the alternative ('Not for the list of submitted sitemaps: use list_sitemaps'). Date-range defaults are spelled out, so the agent knows it can call with only the two required parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_site_summaryGet site performance summaryA
Read-only
Inspect

Use this when the user asks how a property is doing overall: its total clicks, impressions, CTR and average position over the last N days (default 28), against a same-length prior period. Use it for quick health checks before drilling into details. Not for per-query or per-page rows: use query_search_analytics. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). For an explicit window pass startDate/endDate (YYYY-MM-DD) instead: a date you pass always wins, and days only sizes an edge you leave out. The comparison period is always the same length as the window and sits immediately before it. ctr is a 0-100 percentage and avgPosition is impression-weighted, as Search Console reports it. dailyRows is the window day by day and previousDailyRows the comparison period day by day, in the same shape, both sorted by date, oldest first; previousDailyRows is omitted for a window longer than 180 days.

NameRequiredDescriptionDefault
daysNoLength of the trailing window in days (default 28, max 180). Ignored for any edge you pin with startDate/endDate; when exactly one of those is given it sizes the other edge.
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the window ends at the latest settled Search Console date (data lags ~2-3 days). Passed alone, the window is `days` long and ends here. Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date: omit both startDate and endDate to use the trailing `days` window instead (Search Console data lags ~2-3 days, so the window ends at the latest settled date). Passed alone, the window runs from here to the latest settled date. Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations it discloses non-obvious runtime behavior: served from the ClickHouse warehouse when available, otherwise the live Search Console API, surfaced via `dataSource`. It also defines the comparison period as always same-length and immediately prior, explains that `ctr` is a 0-100 percentage and `avgPosition` is impression-weighted, and notes `previousDailyRows` is omitted for windows over 180 days.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and scope, then constraints, then return-shape notes; every clause carries information. It is dense and long for a summary tool, and the trailing dailyRows/previousDailyRows sentences could be trimmed somewhat given an output schema exists, which keeps it off a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An 8-parameter tool with an output schema; the description still covers defaults, the date-lag behavior (~2-3 days) so the agent needn't compute the latest settled date, comparison-period semantics, and the >180-day truncation rule. Nothing an agent needs in order to call it correctly or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 88%, so the baseline is 3; the description earns above that by stating the precedence rule compactly ("a date you pass always wins, and `days` only sizes an edge you leave out") and by supplying the date format, which ties the interacting window parameters together in one place. It does not add new coverage for the enum filters (brand, searchType, contentGroupId, topicClusterId), which the schema already handles well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (property-level summary of clicks, impressions, CTR, avg position) and pins the scope: whole-property totals over a trailing window versus a same-length prior period. It explicitly names the sibling it is not (per-query/per-page rows → query_search_analytics), so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this when the user asks how a property is doing overall" plus "quick health checks before drilling into details" gives a concrete when, and "Not for per-query or per-page rows: use query_search_analytics" gives the explicit exclusion and alternative. Both directions of the routing decision are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tag_group_viewTag group performance viewA
Read-only
Inspect

Use this when the user asks how a tagged group of properties (a portfolio or client) performed. Aggregated cross-site report for every property carrying a given tag (the data behind the app's /group/tag/ dashboard). Returns last-N-days totals with a same-length prior-period comparison, a merged daily clicks/impressions trend, per-site totals, and merged top-N breakdowns by query, page, country, and device. Each site routes independently to the ClickHouse warehouse (longer history) or the live Search Console API; dataSource is reported per site and a site whose read fails is reported in errors with a reason rather than failing the whole call; every total then covers only sitesIncluded properties, which warning says. Use list_tags first to discover tag names. Not for a lighter totals-only view across all properties: use get_cross_site_summary. Processes at most maxSites properties per call (default and maximum 100; scope.truncated says when more carry the tag). The rate-limit cost scales with the number of properties and dimensions. daily is by date ascending; queries, pages, countries, devices and perSite by clicks descending; errors by siteUrl.

NameRequiredDescriptionDefault
tagYes
daysNo
limitNo
maxSitesNoHow many tagged properties to process, at most 100 (the default). When more carry the tag, `scope.truncated` is true.
dimensionsNo
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web

Output Schema

NameRequiredDescription
noteNo
dailyNo
pagesNo
rangeNo
scopeNo
deltasNo
errorsNo
thenByNo
currentNo
devicesNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
perSiteNo
queriesNo
warningNoPresent only when the totals do not cover every property.
nextStepNo
orderingNo
previousNo
sortedByNo
countriesNo
sortOrderNo
thenOrderNo
comparisonNo
sitesFailedNoProperties left out of the totals, each named in errors.
emptyBecauseNo
methodLimitsNo
sitesIncludedNoProperties whose numbers are in the totals.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly/openWorld/non-destructive), and the description layers on substantive behavior: per-site routing between ClickHouse and the live Search Console API, per-site dataSource reporting, partial-failure semantics via `errors` with a `reason` instead of a whole-call failure, coverage limited to `sitesIncluded` with a `warning`, truncation via `scope.truncated`, and rate-limit cost scaling with site count and `dimensions`. It also discloses result ordering per section.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Usage and the key alternative are front-loaded, and nearly every clause adds distinct information. It is a single very dense block, though, and the return-shape and ordering details could be split for easier scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, high-complexity tool with partial schema coverage, the description supplies the failure model, coverage caveats, rate-limit behavior, and return structure, and an output schema exists for exact fields. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description must compensate: it explains `days` as last-N-days with same-length prior comparison, `maxSites` default/maximum plus truncation behavior, `dimensions` affecting cost, and instructs discovery of `tag` via list_tags. `limit` (top-N size) and `searchType` are left largely to the schema, which already documents searchType well, so this is strong but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Aggregated cross-site report for every property carrying a given tag') and ties it to a concrete user intent ('how a tagged group of properties performed'). It explicitly differentiates from the sibling get_cross_site_summary, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the trigger ('when the user asks how a tagged group of properties... performed'), a prerequisite ('Use list_tags first to discover tag names'), and an explicit exclusion plus alternative ('Not for a lighter totals-only view across all properties: use get_cross_site_summary'). This is a complete routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_topic_cluster_performanceTopic cluster performanceA
Read-only
Inspect

Use this when the user asks how a property's topic clusters perform: clicks, impressions, CTR (0-100), impression-weighted average position, matched query count and share of clicks (clickShare, 0-100) per cluster, plus an "unclustered" bucket for queries no cluster claims. Not for the cluster definitions: use list_topic_clusters (create_topic_cluster adds one). Pass clusterId to drill into one cluster's top queries (each row lists which of the cluster's keywords matched). A cluster keyword is a case-insensitive substring unless wrapped in slashes (/seo ?tools/), which makes it a regex. IMPORTANT: clusters may OVERLAP (a query matching two clusters counts fully in both), so cluster totals do not sum to the property total; overlappingQueries reports how many queries are double-counted. Shares are of visible queries only: coverage.hiddenClicksShare (0-1) is the share of the property's clicks with no query row. Clusters are listed by name; drill-down queries by clicks, highest first. Matching runs over the top scanLimit queries by clicks (default 50,000), read from the GSC Wizard ClickHouse warehouse when available (which scans at most 50,000 queries; scanLimit in the response is the limit actually applied), otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoRow cap for the clusterId query drill-down.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
clusterIdNoDrill into one cluster: returns its top matched queries instead of the per-cluster aggregates. Accepts a topic cluster id or the literal "unclustered".
scanLimitNoHow many top queries by clicks to match against the clusters. Raise it when a long-tail property reports `truncated: true`. Clamped at 50,000 on the ClickHouse path.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
noteNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
queriesNo
siteUrlNo
warningNo
clustersNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
nextStepNo
orderingNo
sortedByNo
clusterIdNo
scanLimitNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
searchTypeNo
clusterNameNo
overlapNoteNo
partialDaysNo
unclusteredNo
clusterCountNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
hasComparisonNo
scannedClicksNo
scannedQueriesNo
settledThroughNo
comparisonRangeNo
matchedQueryCountNo
overlappingQueriesNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond readOnly/openWorld annotations: discloses that clusters may OVERLAP so totals do not sum to the property total, that overlappingQueries reports double-counting, that shares are of visible queries only with a hiddenClicksShare escape hatch, the sort orders for clusters vs drill-down, the ClickHouse-vs-live-API data source selection and 50,000 clamp, and the ~2-3 day data lag. These are decision-affecting traits an agent cannot infer from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and metric list, then progressively deeper caveats. Every sentence carries non-obvious information (overlap semantics, matching rules, data source), though the single dense paragraph would be easier to scan if the caveats were broken into shorter sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter analytical tool with an output schema, the description covers what the agent needs: semantics of overlap, the unclustered bucket, hidden-query coverage, sorting, data-source fallback, and default date window. It even explains the meaning of response fields (overlappingQueries, coverage.hiddenClicksShare, dataSource, truncated) rather than relying solely on the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 89%, so the schema carries most parameter documentation (startDate/endDate defaults, searchType enum, scanLimit clamp). The description still adds interpretive meaning: clusterId switches the response shape entirely, date omission defaults to 28 settled days, and scanLimit governs which queries are matched. Only mildly redundant with the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (topic cluster performance for a property) and immediately enumerates the metrics returned (clicks, impressions, CTR, position, matched query count, clickShare). It explicitly contrasts itself with list_topic_clusters and create_topic_cluster, so an agent can distinguish it from siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this when the user asks how a property's topic clusters perform" gives a clear triggering condition, and "Not for the cluster definitions: use list_topic_clusters (create_topic_cluster adds one)" names the exact alternatives and what they do instead. It also states when to pass clusterId (drill into one cluster's top queries).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yandex_indexing_historyYandex indexing historyA
Read-only
Inspect

Use this when the user asks how Yandex crawls and indexes their site over time: the HTTP status codes Yandex's crawler received by day, how many pages are in Yandex search, and the count of pages that appeared in or were removed from Yandex results each day. Use the appeared/removed series to spot day-to-day swings in which pages Yandex indexes. Every series runs oldest day first; crawlResponses are ordered by status and searchAppearanceChanges by event. Not for Google indexing or Bing crawling: use get_indexing_tracker or get_bing_crawl_stats. These series carry no country or device dimension and no previous-period comparison; the response repeats that in limitations. When one of the two secondary series could not be read (a Yandex rate limit or timeout), it comes back empty and warnings says so. Returns notConfigured: true (with a reason) when no Yandex account is connected, the connection has to be granted again, the property is not in it, or the caller holds a share of the property rather than owning it: Yandex data is owner-only.

NameRequiredDescriptionDefault
endDateNoEnd date (YYYY-MM-DD). Defaults to what Yandex returns by default.
siteUrlYes
startDateNoStart date (YYYY-MM-DD). Defaults to what Yandex returns by default.

Output Schema

NameRequiredDescription
hintNo
hostIdNo
reasonNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sortedByNo
warningsNo
sortOrderNo
thenOrderNo
dataSourceNo
limitationsNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
pagesInSearchNo
crawlResponsesNo
searchAppearanceChangesNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), and the description layers on substantive behavior: series ordering (oldest day first, sorted by status/event), the absence of country/device dimensions and period comparisons, degraded-read behavior (empty series plus `warnings` on rate limit/timeout), and notConfigured semantics with owner-only auth as an explicit precondition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and trigger are front-loaded, and the alternative routing arrives before the edge-case details. It is dense but nearly every clause carries operational value; a few phrasings (e.g., 'the response repeats that in `limitations`') could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, three-parameter tool with an output schema, the description covers everything an agent needs: what comes back, ordering, known limitations, partial-failure signaling, and the full set of notConfigured conditions. No gaps remain that would cause a mis-call or a misread of results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: startDate and endDate are documented in the schema, while siteUrl has no description and the tool description only hints at it via 'the property is not in it'. Beyond that the description adds little parameter-level meaning (no format or range guidance for dates), so it neither compensates for nor significantly extends the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Declares a specific verb and resource ('how Yandex crawls and indexes their site over time') and enumerates the three concrete series returned: daily HTTP status codes, pages in Yandex search, and appeared/removed counts. It explicitly names the sibling tools it is not (get_indexing_tracker, get_bing_crawl_stats), so an agent can disambiguate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit triggering condition ('Use this when the user asks how Yandex crawls and indexes their site over time') and adds a secondary use case ('use the appeared/removed series to spot day-to-day swings'). It also states exclusions and routes the agent to the correct alternatives for Google and Bing data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yandex_query_statsYandex query statsA
Read-only
Inspect

Use this when the user asks which searches bring their site visitors from Yandex: Yandex Webmaster queries for a property, with impressions, clicks, average impression position and average clicked position. IMPORTANT COVERAGE LIMIT: Yandex exposes only its top queries for the period (at most 3,000), so totals from these rows are a floor, not a complete figure, and any share is of the listed queries, not of the site; say so when reporting them. Yandex serves 500 rows per request and this tool pages through as many as limit allows, defaulting to the first 500 by orderBy, sorted by that metric, highest first; totalAvailable and truncated say how much of the pool was left. CTR is a percentage (0-100, like every other CTR this server returns), calculated from impressions and clicks because Yandex publishes no CTR metric; null when there were no impressions. Yandex has no query-by-page report, so these queries cannot be attributed to URLs. Not for Google or Bing queries: use query_top_queries or get_bing_query_stats. The dates select a real window, so a longer range returns more queries and larger totals; omitting them gives the last week only. Yandex finishes a day about four days late, so range echoes the window it actually served. The full set of caveats is in limitations on every response. Returns notConfigured: true (with a reason) when no Yandex account is connected, the connection has to be granted again, the property is not in it, or the caller holds a share of the property rather than owning it: Yandex data is owner-only.

NameRequiredDescriptionDefault
limitNoRows to return, across pages. Yandex serves 500 per request and at most 3,000 for a window, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused.
endDateNoEnd date (YYYY-MM-DD). Defaults to the last week Yandex holds.
orderByNoWhich metric decides the 500 queries Yandex returns.TOTAL_SHOWS
siteUrlYes
startDateNoStart date (YYYY-MM-DD). Defaults to the last week Yandex holds.
deviceTypeNoDevice filter. Yandex filters rather than breaking down by device, so each value is a separate query. MOBILE_AND_TABLET overlaps MOBILE and TABLET, so do not sum them.ALL

Output Schema

NameRequiredDescription
hintNo
rangeNo
hostIdNo
reasonNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
queriesNo
siteUrlNo
nextStepNo
orderingNo
sortedByNo
warningsNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
deviceTypeNo
limitationsNo
coverageNoteNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
totalAvailableNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the readOnly/openWorld annotations: discloses the top-3,000 coverage floor, 500-rows-per-request paging, that totals/shares are of listed queries not the site, CTR derivation and null case, absence of query-by-page attribution, a ~4-day data lag, and the full notConfigured/owner-only conditions. This is the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded (use-case, then IMPORTANT COVERAGE LIMIT, then mechanics), and nearly every sentence carries a distinct fact. It is dense and long, with some overlap between description and schema on limit/paging, but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, caveat-heavy tool with an output schema, the description supplies everything an agent needs to call and report correctly: coverage limits, paging, lag, attribution limits, and the notConfigured contract. Return-shape detail is appropriately left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 83%, but the description adds meaning beyond it: orderBy decides which 500 rows Yandex returns, dates select a real window with a last-week default, and 'range' echoes the actually-served window. Some parameter detail (limit ceiling behavior) largely restates the schema, keeping it just below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (Yandex Webmaster queries for a property) and enumerates the metrics returned (impressions, clicks, avg impression position, avg clicked position). It explicitly distinguishes itself from get_bing_query_stats and query_top_queries, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Front-loads the triggering user question ('which searches bring their site visitors from Yandex') and names the alternatives for Google/Bing ('use query_top_queries or get_bing_query_stats'). Also clarifies date defaults and the device-filter-vs-breakdown distinction, leaving little to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yandex_site_summaryYandex site summaryA
Read-only
Inspect

Use this when the user asks how their site stands in Yandex: Yandex Webmaster's site quality index (SQI), pages in search, excluded pages, and the problems Yandex currently reports, counted by severity and listed most severe first (FATAL, CRITICAL, POSSIBLE_PROBLEM, RECOMMENDATION). Complements Google Search Console with the Yandex side of organic search, which matters for Russian, Turkish, Kazakh, Belarusian and Uzbek traffic. Not for Google performance: use get_site_summary. SQI and the problem severities are Yandex's own taxonomy with no Google equivalent, and Yandex serves no previous-period series, so there is nothing to compare against: the response carries these caveats in limitations, which should be passed on when reporting the numbers. When the problem list could not be read (a Yandex rate limit or timeout), problems is empty and warnings says so. Returns notConfigured: true (with a reason) when no Yandex account is connected, the connection has to be granted again, the property is not in it, or the caller holds a share of the property rather than owning it: Yandex data is owner-only.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
sqiNo
hintNo
hostIdNo
reasonNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
problemsNo
sortedByNo
warningsNo
sortOrderNo
thenOrderNo
dataSourceNo
limitationsNo
emptyBecauseNo
methodLimitsNo
excludedPagesNo
notConfiguredNo
pagesInSearchNo
problemCountsBySeverityNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld annotations: it discloses that Yandex has no previous-period series and that the response flags this in `limitations`, that a rate limit or timeout yields an empty `problems` with an explanatory `warnings`, and that `notConfigured: true` plus a `reason` appears for four distinct auth/property/ownership cases. The owner-only access constraint is a genuinely useful behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case, then alternatives, then caveats, then error states – a sensible order. It is dense and long for a one-parameter read tool; a couple of clauses (e.g. the enumeration of markets) could be trimmed, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema, it proactively explains the non-obvious response shapes an agent must relay: `limitations`, empty `problems` on rate limit, and `notConfigured` with `reason`. The only meaningful gap is how to construct `siteUrl`, which is the one thing required to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter `siteUrl` has no description in the schema (0% coverage), and the description never explains its expected format (e.g. host vs full URL vs Yandex's site identifier) or whether it must match an existing Yandex Webmaster property. The call out about property ownership partially hints at this, but the parameter itself is left ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (site quality standing in Yandex Webmaster) and enumerates exactly what is returned: SQI, pages in search, excluded pages, and problems by severity. It explicitly contrasts itself with get_site_summary for the Google side, so an agent can pick it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the triggering condition ('when the user asks how their site stands in Yandex') and an explicit exclusion with the alternative tool named ('Not for Google performance: use get_site_summary'). It also scopes the audience via the markets Yandex serves (Russian, Turkish, Kazakh, Belarusian, Uzbek traffic).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_urlInspect a URLAInspect

Use this when the user asks whether one specific URL is indexed by Google and why. Runs the Google URL Inspection API for one URL and stores the result in the GSC Wizard inspection history. Returns the verdict, coverage state, robots.txt state, last crawl time, the fetched/crawled-as info, the Google-selected canonical (googleCanonical), the user-declared canonical (userCanonical), and a link to the result in Search Console (inspectionResultLink). A canonical field is null when Google did not report it for this URL (common for pages it has not indexed); it is never inferred from the page. GSC enforces a daily per-property quota, so call get_inspection_quota first if you plan to inspect many URLs. Not for many URLs: use bulk_inspect_urls (up to 25) or add_tracked_urls for scheduled checks; for stored past results use list_url_inspections.

NameRequiredDescriptionDefault
siteUrlYes
inspectionUrlYesThe fully-qualified URL to inspect. Must belong to siteUrl.

Output Schema

NameRequiredDescription
messageNo
siteUrlNo
verdictNo
nextStepNo
crawledAsNo
coverageStateNo
indexingStateNo
inspectionUrlNo
lastCrawlTimeNo
referringUrlsNo
userCanonicalNo
pageFetchStateNo
quotaExhaustedNo
robotsTxtStateNo
googleCanonicalNo
inspectionResultLinkNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, and the description confirms the write side effect clearly ('stores the result in the GSC Wizard inspection history'), so there is no annotation contradiction. It goes further than the annotations by disclosing the daily per-property Google quota and the null-canonical semantics ('never inferred from the page'), which materially affect how an agent interprets results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the trigger condition and alternatives are placed at the end where they belong, so an agent can stop reading early. It is somewhat long, and the enumeration of return fields (verdict, coverage state, robots.txt state, canonicals, inspectionResultLink) partly duplicates the output schema rather than adding new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, open-world inspection tool with an output schema, the description covers everything needed to call it correctly: the single-URL constraint, the storage side effect, the quota caveat with a prerequisite tool, and the sibling alternatives. No operational gap remains despite the thin siteUrl documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: inspectionUrl is documented in the schema ('Must belong to siteUrl') while siteUrl is undocumented in both schema and description. The description reinforces single-URL scoping but adds no format or relationship detail for siteUrl, so it only marginally compensates for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Runs the Google URL Inspection API for one URL') and scopes it to exactly one URL. It explicitly separates itself from bulk_inspect_urls, add_tracked_urls, and list_url_inspections, so an agent can route between them without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the triggering condition ('when the user asks whether one specific URL is indexed by Google and why'), the negative case ('Not for many URLs'), and the concrete alternatives with their own constraints (bulk_inspect_urls up to 25, add_tracked_urls for scheduled checks, list_url_inspections for past results). It also prescribes calling get_inspection_quota first when volume is expected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_algo_updatesList Google algorithm updatesA
Read-only
Inspect

Use this when the user asks which Google core, spam or other ranking updates rolled out in a period. Fetches confirmed Google ranking/algorithm updates from the official Search Status Dashboard. Filters to service_name="Ranking" so indexing/crawling incidents are excluded. Optionally clip to a date range: an update is included when its rollout (beginISO to endISO) overlaps the range, so one that started before startDate but was still rolling out inside it is listed. The feed is cached for 15 minutes. Not for the user's own chart notes: use list_annotations. Newest first (beginISO descending).

NameRequiredDescriptionDefault
endDateNoOptional filter: only include updates that began on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".
startDateNoOptional filter: only include updates still rolling out on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".

Output Schema

NameRequiredDescription
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
updatesNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld/non-destructive; the description adds real behavioral context beyond that: the upstream source, the hard-coded service_name filter that silently drops indexing incidents, the 15-minute feed cache, and the newest-first ordering. It does not discuss failure modes or whether a stale cache can omit a just-announced update, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Trigger sentence first, then scope, then filter semantics, then cache/sort behavior, then the exclusion — front-loaded with zero filler. Every sentence carries information an agent could otherwise get wrong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation; the description instead covers source, filtering, range semantics, caching, ordering, and sibling routing. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds the non-obvious overlap rule: 'an update is included when its rollout (beginISO to endISO) overlaps the range,' so an update that began before startDate but was still rolling out is returned. This resolves the intuition that endDate means 'began on or before' into interval-overlap semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetches confirmed Google ranking/algorithm updates from the official Search Status Dashboard') and pins the scope with service_name="Ranking" so indexing/crawling incidents are excluded. An agent can distinguish this from generic listing siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks which Google core, spam or other ranking updates rolled out in a period') and explicitly excludes a confusing alternative: 'Not for the user's own chart notes: use list_annotations.' Both the when and the when-not are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_annotationsList chart annotationsA
Read-only
Inspect

Use this when the user asks which events or notes are marked on the chart, e.g. to explain a traffic change. Lists chart annotations visible to the user across scopes: platform-wide (Google ranking updates synced from the Search Status dashboard), account-wide (user notes), and property-scoped. Optionally restrict to one property. Property-scoped annotations are returned only when siteUrl is passed, and include every note on that property, whoever added it (the owner or a collaborator it is shared with), as on the GSC Wizard chart. Not for Google update rollout windows (begin and end): use list_algo_updates. Newest first (event_date descending), then by label.

NameRequiredDescriptionDefault
endDateNoOptional filter: only include annotations on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".
siteUrlNo
startDateNoOptional filter: only include annotations on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".

Output Schema

NameRequiredDescription
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
annotationsNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, non-destructive, closed-world profile, and the description adds non-obvious behavior well beyond that: property-scoped notes only appear when siteUrl is passed, they include notes added by collaborators regardless of author, and results are sorted by event_date descending then label. That is exactly the kind of scoping and ordering detail an agent cannot infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and free of filler; each sentence adds a distinct fact (scope, siteUrl gating, author visibility, exclusion, sort order). It is one dense run-on paragraph, so the sort-order and GSC Wizard asides slightly crowd the core routing signal, but nothing is genuinely wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is unnecessary, and the description still covers scope semantics, the gating parameter, visibility rules, and ordering. For a 3-param, zero-required read tool, an agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with startDate/endDate already documented in the schema; the description compensates for the undocumented siteUrl by explaining that it is what unlocks property-scoped annotations and that omitting it changes the result set entirely. It does not restate the date filter semantics, but the schema handles those, so the gap is minor rather than material.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists chart annotations visible to the user') and immediately enumerates the scopes covered (platform-wide, account-wide, property-scoped). The closing sentence explicitly distinguishes it from list_algo_updates, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the trigger condition ('Use this when the user asks which events or notes are marked on the chart, e.g. to explain a traffic change') and gives an explicit exclusion plus the correct alternative ('Not for Google update rollout windows... use list_algo_updates'). Both when-to-use and when-not are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bing_sitesList Bing Webmaster sitesA
Read-only
Inspect

Use this when the user asks which sites their Bing Webmaster Tools account holds, or before any other get_bing_* tool, to find the exact site URL Bing recognises. Lists the sites in the Bing Webmaster Tools account linked to GSC Wizard (via the stored Bing Webmaster API key), sorted alphabetically; siteDetails gives each one with isVerified, and Bing serves data only for a verified site. Not for Google Search Console properties: use list_sites. Returns notConfigured: true when no Bing Webmaster API key is set up in the GSC Wizard app.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
hintNo
countNo
sitesNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
siteDetailsNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly/openWorld/non-destructive), yet the description adds substantial context beyond them: which credential backs the account (stored Bing Webmaster API key via GSC Wizard), alphabetical ordering, that siteDetails carries isVerified, that Bing serves data only for verified sites, and the notConfigured: true failure mode when no key is configured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the when-to-use condition and the sibling exclusion, and every clause carries information. It is dense and slightly run-on through semicolons, which costs a point on readability but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param read tool with an output schema, this covers everything an agent needs: trigger conditions, ordering, key field (isVerified), the verification prerequisite, and the notConfigured response case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is no parameter semantics to clarify and the description correctly does not invent any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list the sites in the Bing Webmaster Tools account) and immediately differentiates itself from the similarly named list_sites, which is for GSC properties. An agent can select between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit positive triggers (user asks which sites the account holds) plus a sequencing rule ('before any other get_bing_* tool, to find the exact site URL Bing recognises') and an explicit exclusion with the named alternative for GSC properties.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_content_groupsList content groupsA
Read-only
Inspect

Use this when the user asks which content groups a property has. Lists content groups for a property. Content groups partition the URL space using JSON rules (e.g. prefix matches, regex). Used in the dashboard for page-level aggregations. Not for group traffic: use get_content_group_performance, which counts a page matching several groups in the newest (created_at descending). Sorted by name ascending.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
groupsNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds ordering behavior ('Sorted by name ascending') and background on how groups resolve for aggregation. It does not mention permissions or result volume/pagination, so it is strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger sentence and the exclusion, with no wasted preamble. The 'Used in the dashboard for page-level aggregations' clause is marginally expendable but does help the agent reason about group semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Overall adequate: an output schema exists so return shape needn't be explained, annotations cover the safety profile, and usage is unambiguous. The remaining hole is the undocumented siteUrl format, the one thing an agent needs to supply correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required parameter, so the description must carry the load, and it only implies property scoping via 'for a property'. It never names siteUrl or indicates the expected format (full URL vs. domain), which is required knowledge for a correct call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Lists content groups for a property') and goes further by explaining what a content group actually is (JSON rules partitioning the URL space, e.g. prefix/regex), so the agent understands the object being listed. The final sentences explicitly distinguish it from get_content_group_performance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks which content groups a property has') and names the alternative plus the condition selecting it ('Not for group traffic: use get_content_group_performance'). Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_experimentsList SEO experimentsA
Read-only
Inspect

Use this when the user asks which SEO experiments (split tests) a property runs, or an experimentId is needed. Lists the experiments defined for the property in GSC Wizard, each with its control/variant URL groups (the first group is the control), source, status, and start date, newest first (createdAt descending). By default only active experiments are returned. Groups carry URL counts; to get the saved URLs themselves (including URLs with no Search Console traffic, which results leave out), pass experimentId with includeUrls: true and page with memberOffset until nextMemberOffset is null. Not for results: use get_experiment_results to score one.

NameRequiredDescriptionDefault
siteUrlYes
includeUrlsNoAdd the experiment's saved URLs as members [{url, group}], in saved order, 2000 per call.
experimentIdNoReturn only this experiment (active or archived). Required with includeUrls.
memberOffsetNoWith includeUrls: index of the first member to return; pass the previous nextMemberOffset.
includeArchivedNoInclude archived experiments as well as active ones.

Output Schema

NameRequiredDescription
countNo
errorNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
experimentsNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/destructive annotations, it discloses ordering (newest first, createdAt descending), the default filter (active only), the pagination protocol (2000 members per call, loop until nextMemberOffset is null), and a non-obvious data caveat that saved URLs include ones with no Search Console traffic while results omit them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Usage trigger is front-loaded and every clause carries information, but the middle sentence is long and stacks several ideas (group counts, includeUrls, traffic caveat) into one breath. Slightly denser than ideal, though nothing is truly wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter list tool with an output schema, the description still covers the pieces an agent needs to call it correctly: default filtering, archived opt-in, ordering, and the full pagination loop. Return values are largely documented by the output schema, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so baseline is 3; the description earns an extra point by explaining relationships the schema doesn't (experimentId must be paired with includeUrls: true, and memberOffset is driven by the prior nextMemberOffset). It also clarifies that the first group is the control, which is not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lists the experiments defined for the property") and enumerates the payload fields (control/variant URL groups, source, status, start date). It also distinguishes itself from get_experiment_results, so an agent can tell the two apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ("Use this when the user asks which SEO experiments... or an experimentId is needed") and closes with an exclusion plus named alternative ("Not for results: use get_experiment_results to score one"). Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ga4_custom_dimensionsGA4 custom dimensions & metricsA
Read-only
Inspect

Use this when the user asks which custom parameters a site's GA4 property tracks. Lists the custom dimensions and custom metrics REGISTERED on the GA4 property linked to a site (GA4 Admin > Custom definitions): the event parameters and user properties that property collects on top of the standard GA4 fields, such as a source_format or target_path sent with an internal_link_click event. Dimensions come before metrics, queryable ones first, each group by displayName. Not for the traffic numbers: use query_ga4_custom_dimensions. Each entry carries the exact apiName (e.g. customEvent:source_format) that query_ga4_custom_dimensions takes. Call this FIRST: an event parameter that is not registered cannot be reported on at all, and GA4 answers an unregistered name with an empty report rather than an error, so a name must never be guessed. Returns a notConfigured result (not an error) when Google Analytics is not connected or no GA4 property is linked to the site in the GSC Wizard app.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
hintNo
noteNo
countNo
reasonNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
propertyIdNo
definitionsNo
metricNamesNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
dimensionNamesNo
reauthRequiredNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the readOnly/openWorld safety profile; the description adds genuinely new behavior: result ordering (dimensions before metrics, queryable first, grouped by displayName), the presence of an exact apiName per entry, and that a missing-connection case returns a notConfigured result rather than an error. It also explains the failure mode that motivates the tool — GA4 returns an empty report for unregistered names instead of erroring.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger clause before any mechanics, then proceeds through ordering, the sibling exclusion, and the edge case. Despite its length, every sentence carries a decision-relevant fact; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be re-explained, and the description still covers what matters operationally for an agent: why to call it first, how to consume the apiName downstream, and how the not-configured case surfaces. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One required parameter at 0% schema description coverage, so the description must carry the load. It establishes that the parameter identifies 'a site' whose linked GA4 property is resolved, which is real added meaning, but it never specifies the expected siteUrl format (domain property vs. URL vs. sc-domain: prefix) — the one detail an agent is most likely to get wrong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists the custom dimensions and custom metrics REGISTERED on the GA4 property linked to a site, with concrete examples (source_format, target_path). It explicitly distinguishes itself from the sibling query tool, so an agent can pick correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user asks which custom parameters a site's GA4 property tracks'), an explicit exclusion with the named alternative ('Not for the traffic numbers: use query_ga4_custom_dimensions'), and an ordering directive ('Call this FIRST') with the reason why.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ga4_propertiesList GA4 propertiesA
Read-only
Inspect

Use this when the user asks which Google Analytics 4 properties they can read, needs a GA4 property ID, or wants to check which GA4 property a site is linked to. Lists every GA4 property readable by the connected Google accounts of the authenticated user, and which GSC Wizard sites each property is linked to (via linkedSiteUrls), sorted by displayName, A to Z. Not for Search Console properties: use list_sites. linkedSiteUrls covers only the sites of the GSC Wizard account this connection is authenticated as (returned as account): links made from a different GSC Wizard account come back empty here even though the app shows them. An empty result with connected: false means the Google Analytics consent has not been granted in the GSC Wizard app yet (connect Google Analytics at tool.gscwizard.com first), or, with reauthRequired: true, that it was granted but Google now rejects every such account, so it has to be reconnected. errors lists every Google account whose properties could not be read (its properties are missing from the list), with the reason.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
hintNo
noteNo
countNo
errorNo
errorsNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
connectedNo
sortOrderNo
thenOrderNo
propertiesNo
emptyBecauseNo
methodLimitsNo
reauthRequiredNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the readOnly/openWorld annotations: it discloses the A-to-Z sort order, the scoping limitation of `linkedSiteUrls` (only links from the authenticating GSC Wizard account, others appear empty), and the exact meaning of `connected: false` vs `reauthRequired: true` including the remediation step. It also explains that `errors` enumerates Google accounts whose properties are silently missing from the result — a subtle partial-failure mode an agent would otherwise misread as an empty list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly: triggers first, then scope, then exclusion, then result semantics. It is on the long side for a zero-parameter list call, and since an output schema exists, some of the `linkedSiteUrls`/`errors` explanation partially duplicates structured data — but the connection-state caveats are non-obvious enough to earn their space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No input schema to speak of, but the description pre-empts every realistic failure interpretation: empty result vs missing consent vs revoked auth, and per-account read errors. Combined with the existing output schema and readOnly annotation, an agent has everything needed to call this and interpret the response correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero input parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description instead spends its detail on output-field semantics, which is beyond this dimension's scope but useful elsewhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list every GA4 property readable by the connected Google accounts) and immediately differentiates from the nearest sibling: "Not for Search Console properties: use list_sites." An agent can distinguish it from list_ga4_custom_dimensions and other GA4 tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with three concrete trigger conditions (user asks which properties they can read, needs a property ID, wants to check which property a site links to) and then names the explicit exclusion and its alternative. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_gmc_accountsList Merchant Center accountsA
Read-only
Inspect

Use this when the user asks which Merchant Center accounts they can use, or which one a site is linked to. Lists every Google Merchant Center account readable by the connected Google accounts of the authenticated user, sorted by accountName, and which GSC Wizard sites each account is linked to (via linkedSiteUrls). Use it to discover the Merchant Center account id to link to a property, or to verify the Shopping setup of a site. Not for account issues or eligibility checks: use get_gmc_account_health. isAdvanced: true marks a multi-client parent account: reporting runs against a standalone account or one of its sub-accounts, never the parent itself. linkedSiteUrls covers only the sites of the GSC Wizard account this connection is authenticated as (returned as account). incomplete: true means the list is a floor, not the whole set: gaps and unprobedAccountIds say what could not be read or checked for sub-accounts, and errors names each connected Google account whose listing failed; retry for a complete list. An empty result with connected: false carries a reason: "no_scope" means the Merchant Center consent has not been granted in the GSC Wizard app yet (connect Merchant Center at tool.gscwizard.com first); "credentials_revoked" means it was granted but Google now rejects the stored credentials, so the Google account has to be reconnected on the Account page. On a shared property, linkedAccountId is withheld (null, with a note) until the owner enables the Merchant Center opt-in on your invite.

NameRequiredDescriptionDefault
siteUrlNoOptional property URL as returned by list_sites. When given, the response also reports which Merchant Center account is currently linked to that property (`linkedAccountId`).

Output Schema

NameRequiredDescription
gapsNo
hintNo
noteNo
countNo
errorNo
errorsNo
reasonNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
accountsNo
nextStepNo
orderingNo
sortedByNo
connectedNo
sortOrderNo
thenOrderNo
incompleteNo
emptyBecauseNo
methodLimitsNo
incompleteNoteNo
linkedAccountIdNo
gcpProjectNumberNo
unprobedAccountIdsNo
registrationRequiredNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/no-destroy/open-world, yet the description adds substantial non-derivable behavior: sorting by accountName, the scope limitation of linkedSiteUrls to the authenticated GSC Wizard account, isAdvanced parent-vs-sub-account reporting rule, and partial-result semantics (incomplete/gaps/unprobedAccountIds/errors with retry advice).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and use case, then progressive detail on edge cases and error codes. Dense and long, but nearly every sentence carries decision-relevant information; a few of the output-field explanations could be trimmed given the output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs for a read-only discovery tool: when to call it, what the result means, how to react to empty/partial/failed results (reason codes and remediation), and permission-driven nulls. Behavior in failure modes is fully specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single optional siteUrl is fully documented there; the description reinforces its effect by noting linkedAccountId is only reported when a site is given and is withheld (null with a note) on shared properties. Minor added value over the schema, so a solid 4 rather than a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Lists every Google Merchant Center account readable by the connected Google accounts'), states the sort order, and names the sibling it is not for (get_gmc_account_health). An agent can distinguish it from get_gmc_account_info/list_sites without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger conditions ('when the user asks which Merchant Center accounts they can use, or which one a site is linked to'), two concrete use cases (finding the account id to link, verifying Shopping setup), and an explicit exclusion routing to get_gmc_account_health for issues/eligibility.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_indexnow_submissionsList IndexNow submissionsA
Read-only
Inspect

Use this when the user asks which URLs were sent to IndexNow and how engines answered. Returns the IndexNow submission history for a property: URL, response code, source (such as manual, paste or mcp) and timestamp. Newest first (submitted_at, then url, descending); total counts all stored rows. A 202 means accepted, key validation pending, not delivered. Not for sending URLs: use submit_indexnow_urls.

NameRequiredDescriptionDefault
limitNo
siteUrlYes

Output Schema

NameRequiredDescription
totalNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
submissionsNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and closed-world safety, and the description adds real behavioral context on top: sort order (submitted_at then url, descending), that total counts all stored rows rather than the page, and the semantic meaning of a 202 ('accepted, key validation pending, not delivered') — a nuance the agent could not infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use trigger, then result fields, ordering, total semantics, and the sibling exclusion — every sentence carries distinct information with no restatement of the name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description still supplies the interpretive layer an agent needs (sort order, total semantics, 202 meaning). For a two-parameter read tool with full annotations, nothing material for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It implies siteUrl via 'for a property' and clarifies that total is independent of the returned slice, but it never mentions the limit parameter's default of 100 or its 1-500 bounds. Useful hints, incomplete compensation for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns the IndexNow submission history for a property') and enumerates the returned fields (URL, response code, source, timestamp). It explicitly distinguishes itself from submit_indexnow_urls, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit use trigger ('Use this when the user asks which URLs were sent to IndexNow and how engines answered') and closes with an explicit exclusion plus the named alternative ('Not for sending URLs: use submit_indexnow_urls'). Both the when and the when-not are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_migration_redirectsList migration redirect mappingsA
Read-only
Inspect

Use this when the user asks which redirect mappings (old URL -> new URL) are saved for a site migration. Lists the mappings behind the Migration Compare report, grouped by the A/B property pair they belong to and optionally by a label, so one account can hold several migrations at once. Pass label or siteUrlA/siteUrlB to narrow. Use summaryOnly to get just the per-migration counts instead of the rows, which is the right call on a large mapping. redirects come newest first (createdAt, then id, both descending) and migrations largest first (count). Not for how the migration performs: use get_migration_health.

NameRequiredDescriptionDefault
labelNoOnly mappings carrying this label.
limitNo
siteUrlANoOnly mappings whose source property is this.
siteUrlBNoOnly mappings whose target property is this.
summaryOnlyNoReturn only the per-migration row counts, not the individual mappings.

Output Schema

NameRequiredDescription
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
redirectsNo
sortOrderNo
thenOrderNo
truncatedNo
migrationsNo
emptyBecauseNo
methodLimitsNo
totalMappingsNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/destructiveHint, and the description goes well beyond them: it discloses grouping semantics (by A/B property pair, optionally by label) and exact sort orders for both collections ('redirects come newest first... migrations largest first'). That is precisely the kind of behavior an agent cannot infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences: what it is, how it is grouped, how to narrow it, when to use summaryOnly, plus the exclusion. Every sentence is load-bearing and the trigger condition is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not enumerate return fields, and it still supplies ordering, grouping, and the summary-vs-rows tradeoff. For a read-only list tool, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the schema already carries most parameter meaning. The description nevertheless adds the purpose of the filter set (label/siteUrlA/siteUrlB to 'narrow') and frames summaryOnly as a performance tactic for large mappings rather than just a return-shape switch, which is a real semantic add on top of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb (list) and resource (redirect mappings, old URL -> new URL) and ties it to its data source (the Migration Compare report). It is trivially distinguishable from add_migration_redirects, delete_migration_redirects, and get_migration_health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the triggering user question, the narrowing options ('Pass label or siteUrlA/siteUrlB'), when to use summaryOnly ('the right call on a large mapping'), and an explicit exclusion ('Not for how the migration performs: use get_migration_health'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_migrationsList saved migrationsA
Read-only
Inspect

Use this when the user asks which site migrations they have saved, or a migrationId is needed. Lists the migrations saved on the account in the GSC Wizard app (Migration Compare), most recently updated first (updatedAt descending): id, name, mode (cross-property, two-urls or regex), the old (siteUrlA) and new (siteUrlB) property, go-live date, window settings, the redirect-mapping label, whether daily re-check alerts are on, and the last health snapshot from that re-check (status, recoveryPct, 0-100 risk score, redirect problem counts). Pass an id to get_migration_health as migrationId for the full analysis. Not for traffic figures: use get_migration_health or compare_migration. Takes no arguments.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
noteNo
totalNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
truncatedNo
migrationsNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds non-obvious behavior the annotations can't: result ordering (updatedAt descending), the exact payload contents including the health snapshot fields, and the zero-argument nature of the call. No auth or rate-limit context, but that is minor for a read-only list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the 'Use this when' trigger sentence, then the payload, then the routing follow-up. The middle field-enumeration sentence is long and dense, but each item listed is a real datum an agent would otherwise have to guess at, so it largely earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even though an output schema exists, the description still surfaces the salient return fields and their semantics (mode values, 0-100 risk score, recoveryPct) so an agent can decide whether to call it. Combined with ordering, zero-arg confirmation, and the handoff to get_migration_health, nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which sets the baseline at 4. 'Takes no arguments' explicitly closes the loop and prevents an agent from hunting for filter options — a small but real clarification, though it restates what an empty schema already shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists the migrations saved on the account in the GSC Wizard app'), scopes it to Migration Compare, and distinguishes it from migration siblings like compare_migration and get_migration_health. The enumeration of returned fields makes the tool's identity unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user asks which site migrations they have saved, or a migrationId is needed'), an explicit exclusion ('Not for traffic figures: use get_migration_health or compare_migration'), and a follow-up route ('Pass an id to get_migration_health as migrationId'). All three alternatives are named with conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_report_clientsList report clientsA
Read-only
Inspect

Use this when the user asks who their report clients are, or needs a clientId to share a report. Lists the client contacts on the account: the people who can be granted access to a shareable report. A client is just an email address (plus an optional name); they sign in with it to view reports shared with them. Use this to find a clientId for manage_report_access, or create_report_client to add a new contact. Not for which reports each client can see: use list_shared_reports. Newest first (createdAt descending).

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
countNo
thenByNo
clientsNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, closed-world, non-destructive behavior, so the description correctly spends its space on domain semantics instead: clients are email identities that sign in to view shared reports, and results come newest first by createdAt. It does not discuss pagination behavior or result caps for an account with many clients.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the core definition, then routing, then ordering — a sensible progression. Slightly dense with four sentences, and the 'they sign in with it to view reports shared with them' clause is helpful context rather than wasted space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations carry the safety profile, so the description need not explain return values — and it doesn't try. The one real omission is the `limit` parameter and what happens past the default page size, which matters for accounts with many clients.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single `limit` parameter, and the description never mentions it — no note that it defaults to 100 or caps at 500, or how to page beyond that. It does add useful semantics about ordering ('createdAt descending'), which the schema does not express, keeping this at baseline rather than lower.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Lists the client contacts on the account') and defines what a client is (an email address plus optional name). The distinction from create_report_client, manage_report_access, and list_shared_reports is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the trigger condition ('when the user asks who their report clients are, or needs a clientId to share a report') and names both downstream consumers of the returned clientId. It also states an explicit exclusion: not for which reports each client sees, use list_shared_reports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_saved_filtersList saved filtersA
Read-only
Inspect

Use this when the user asks which filter presets are saved, or wants to reuse one. Lists saved filter presets, optionally restricted to one property. Each preset stores a JSON filter spec that mirrors the filter UI in the GSC Wizard dashboard. Presets belong to the property: with siteUrl you get every preset on it, including a property shared with you; without it you get the presets on the properties you own. Not for the report tools' brand, content group and topic cluster scopes: use get_filter_options. Newest first (createdAt descending).

NameRequiredDescriptionDefault
siteUrlNoRestrict to the presets on one property (one you own or one shared with you). Omit to list the presets on every property you own.

Output Schema

NameRequiredDescription
thenByNo
filtersNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/openWorld=false/destructive=false, and the description adds genuinely non-obvious behavior: the siteUrl omitting case narrows results to owned properties only, shared properties are included when siteUrl is given, and results come back "Newest first (createdAt descending)". It does not mention any result cap or pagination behavior, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five compact sentences, front-loaded with the invocation trigger before scope, exclusion and ordering. Slight redundancy between the sentence on property scoping and the siteUrl schema description, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape needn't be described; the description still supplies provenance (JSON filter spec mirroring the filter UI), scoping rules, ordering, and the alternative tool. That is sufficient for an agent to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the siteUrl description already states "one you own or one shared with you" and "Omit to list the presets on every property you own." The description's parallel sentence largely restates the schema rather than adding new syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ("Lists saved filter presets") with an explicit scope qualifier ("optionally restricted to one property") and a stated user-intent trigger. It is clearly separable from get_filter_options, delete_saved_filter and update_saved_filter, which appear in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit when-to-use condition ("when the user asks which filter presets are saved, or wants to reuse one") and adds an explicit when-not plus the alternative: "Not for the report tools' brand, content group and topic cluster scopes: use get_filter_options." Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_shared_reportsList shareable reportsA
Read-only
Inspect

Use this when the user asks which reports they have saved or shared, and with whom. Lists the shareable reports saved on the account, newest first (createdAt descending), each with its view URL and the clients currently granted access (sharedWith, oldest grant first). A sharedWith entry with pendingConfirmation true is a grant waiting for the account owner to confirm it from their email: that client cannot open the report yet. Use it to find a reportId before calling manage_report_access or delete_shared_report, or to audit who can see which report. Not for the client contacts themselves: use list_report_clients.

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
countNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
reportsNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo
unsharedCountNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive), and the description adds substantial semantics beyond them: newest-first ordering by createdAt, sharedWith returned oldest-grant-first, and the meaning of pendingConfirmation true (the client cannot open the report until the owner confirms from email). That last point is behavior an agent could not infer from any structured field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the trigger and output shape, with the exclusion last. Each sentence carries information, though the two inline parentheticals (createdAt descending, oldest grant first) make it denser than needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return-value semantics are spelled out even though an output schema exists, and ordering, access-audit use, and sibling routing are all covered. The only real hole is result-size behavior for the limit parameter, which matters for an auditing use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single `limit` parameter, and the description never mentions it — no indication that results are capped (default 50, max 100) or that there is no pagination cursor. The name and bounds make the parameter guessable, but the description leaves an agent unable to tell whether a truncated result means 'that is all' or 'there is more'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists the shareable reports saved on the account') with scope and ordering, and explicitly separates itself from the semantically adjacent list_report_clients. An agent can distinguish it from create_shared_report and delete_shared_report without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete trigger ('when the user asks which reports they have saved or shared, and with whom'), two downstream uses (finding a reportId for manage_report_access or delete_shared_report, auditing access), and an explicit exclusion with the alternative ('Not for the client contacts themselves: use list_report_clients').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitemapsList submitted sitemapsA
Read-only
Inspect

Use this when the user asks which sitemaps a property has and whether Google read them. Lists every sitemap submitted to Search Console for a property, sorted by path, with submission timestamps, warning/error counts, and the submitted URL count per content type (indexed is null: Google deprecated it). Not for a sitemap's traffic or indexing: use get_sitemap_performance.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
noteNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sitemapsNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), and the description adds real value on top: sort order (by path), returned fields (submission timestamps, warning/error counts, submitted URL count by content type), and the notable quirk that indexed is null because Google deprecated it. That deprecation note prevents an agent from misinterpreting a null field. It stops short of anything about permissions or call cost, hence a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the trigger condition, then the return shape, then the sibling hand-off. The parenthetical about indexed being deprecated is the only aside and it earns its place by preventing a null-misread.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description is not obligated to enumerate return values, yet it usefully previews the key ones. For a single-parameter read tool with full annotation coverage the description is nearly complete; the only real gap is the siteUrl format convention, which neither schema nor description supplies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter at 0% schema description coverage, so the description carries the burden and only implies it via 'for a property.' It does not state the expected siteUrl format (full URL vs. sc-domain: prefix) or that it must be a property the account can access, which is exactly the ambiguity an agent will hit at call time.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (lists every sitemap submitted to Search Console for a property) plus the scope and ordering. It explicitly separates itself from get_sitemap_performance, which handles traffic/indexing, so an agent can distinguish it from siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the exact user question that should trigger it ('which sitemaps a property has and whether Google read them') and closes with an explicit exclusion plus the named alternative: traffic or indexing questions go to get_sitemap_performance. Both the when and the when-not are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitesList Search Console propertiesA
Read-only
Inspect

Use this when the user asks which Search Console properties they can analyze. Lists all Google Search Console properties connected to the authenticated GSC Wizard account: the site URL (a domain property prefixed with sc-domain: or a URL prefix property), tags, and which data source backs the property. Properties another user has shared with you are included too, badged with sharedBy (the owner) and accessLevel (READ_ONLY or FULL). permissionLevel is the Google Search Console permission (siteOwner / siteFullUser / siteRestrictedUser / siteUnverifiedUser), and readable: false means Google will refuse every data request for that property: it is listed in Search Console but not verified, so the user must verify it at search.google.com/search-console before any report will work. Do not attempt reads on a property with readable: false; tell the user to verify it instead. activated: false means the property is connected but is not shown on the account dashboard and is not synced to full storage, so every other property-scoped tool will refuse it with a selection error. Do not attempt reads on those either: where this connection offers it, call set_dashboard_visibility to activate the property first, or choose one with activated: true. Properties shared with the caller are always activated: true, because the grant is itself the selection; a share whose owner no longer has an active GSC Wizard plan is left out, since no tool can read it. gscScope is the Search Console access of the Google connection behind the property: "full" allows submit_sitemap and create_gsc_property, "readonly" means Google will refuse those two (reads still work); absent when unknown. Not for Bing, Yandex or GA4: use list_bing_sites, list_yandex_sites or list_ga4_properties. Owned properties come first, then shared ones, each by siteUrl ascending.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only/non-destructive profile, but the description goes well beyond them: it explains that readable:false means Google will refuse every data request, that activated:false causes selection errors from every other property-scoped tool, that shared properties are always activated, and that gscScope 'readonly' blocks submit_sitemap and create_gsc_property. This is exactly the behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the trigger and the scope statement, and the dense flag semantics (readable, activated, gscScope) each earn their place because they change agent behavior. The single-paragraph block is long and slightly sprawling for a zero-argument list tool, keeping it short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape needn't be re-explained, yet the description adds the semantics the schema cannot (what readable:false and activated:false imply, how shares are ordered and badged). Routing, warnings, and ordering are all covered for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate at the input level; the 0-param baseline of 4 applies. The description instead invests its detail in output-field semantics, which is appropriate but not a parameter concern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists all Google Search Console properties connected to the authenticated GSC Wizard account') and enumerates the returned fields. It also names the sibling tools it is not for (list_bing_sites, list_yandex_sites, list_ga4_properties), so an agent can distinguish it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use this when the user asks which Search Console properties they can analyze'), explicit alternatives for other platforms, and explicit when-not guidance ('Do not attempt reads on a property with readable: false'; 'Do not attempt reads on those either'). It even routes to the corrective action (set_dashboard_visibility) when a property is not activated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsList property tagsA
Read-only
Inspect

Use this when the user asks how their properties are grouped into portfolios or clients. Lists every tag defined on the account: account-level global tags plus any tag attached to a registered Search Console property, with the number of properties carrying each tag. Tags group properties into portfolios; feed a tag name to get_tag_group_view for an aggregated cross-site report, or to get_cross_site_summary for a totals-only view. Pass includeSites=true to also get the list of property URLs under each tag. Not for one property's tags: use list_sites. Sorted by name ascending.

NameRequiredDescriptionDefault
includeSitesNo

Output Schema

NameRequiredDescription
tagsNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
totalTagsNo
totalSitesNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description still adds useful behavioral detail beyond structured data: the sort order (name ascending), that a per-tag property count is returned, and that includeSites=true expands each tag to its property URLs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary use case and scope, then alternatives, then the parameter. Every sentence carries information, though the tag-group/cross-site routing clause is dense enough that it could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with one boolean parameter and an output schema present, the description covers what is returned (tags plus counts), how to expand it (includeSites), and how to consume the results via sibling tools. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter includeSites has no schema description, so the description must compensate. It does: 'Pass includeSites=true to also get the list of property URLs under each tag,' which explains the boolean's meaning and effect. The default (false) is not restated, so slightly short of full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Lists every tag defined on the account') and immediately enumerates scope: global account tags plus tags on registered Search Console properties, with counts. It is clearly distinguishable from list_sites (one property's tags) and from get_tag_group_view (aggregate report for a tag).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use it (user asks how properties are grouped into portfolios/clients), what to do next (feed a tag name to get_tag_group_view or get_cross_site_summary), and when not to use it (use list_sites for one property's tags). Alternatives and exclusions are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_topic_clustersList topic clustersA
Read-only
Inspect

Use this when the user asks which topic clusters a property has, or which keywords define one. Lists topic clusters for a property. Each cluster groups a set of keywords under a name and is used by the dashboard to aggregate query-level metrics. Not for cluster traffic: use get_topic_cluster_performance. Sorted by name ascending.

NameRequiredDescriptionDefault
siteUrlYes

Output Schema

NameRequiredDescription
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
clustersNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is free. The description adds genuinely new behavioral detail — deterministic ordering ("Sorted by name ascending") and the fact that clusters are the unit the dashboard aggregates query-level metrics by. It stops short of covering return shape or empty-result behavior, so a 4 rather than a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the usage trigger, then the definition, then the exclusion, then ordering — each sentence carries distinct information. The dashboard-aggregation sentence is the only borderline one, and it justifies why the caller should care about cluster structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Only one parameter, annotations cover safety, and an output schema exists so return values need not be spelled out. The remaining gap is that the description promises "which keywords define one" without clarifying whether the listing returns member keywords or only cluster names and counts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single siteUrl parameter, so the schema alone gives no format guidance. The description only implies property scoping via "for a property" and never states how the property is identified. That is partial compensation for a coverage gap, not full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lists topic clusters for a property") and then defines what a cluster is: a named group of keywords used for dashboard aggregation. This distinguishes it cleanly from create_topic_cluster, update_topic_cluster and get_topic_cluster_performance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ("Use this when the user asks which topic clusters a property has, or which keywords define one") and then names the exclusion plus the substitute: "Not for cluster traffic: use get_topic_cluster_performance." When-to-use, when-not, and the alternative are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tracked_urlsList tracked URLsA
Read-only
Inspect

Use this when the user asks which of their tracked URLs are indexed or not, or wants the tracker's watchlist. Paginated list of URLs in the GSC Wizard Indexing Tracker for a property, newest-added first (createdAt, then id), with optional status filter and URL substring search. Filter options: all, indexed, not_indexed, pending, errors, warnings. Returns the current verdict / coverage / indexing state, last-crawl time, the Google-selected and user-declared canonicals, and the Search Console link per URL, all from the latest inspection. A canonical is null when Google did not report it or the URL has not been inspected yet. Not for counts only: use get_indexing_tracker; for one-off inspections use list_url_inspections.

NameRequiredDescriptionDefault
pageNo
filterNoall
searchNo
siteUrlYes
pageSizeNo

Output Schema

NameRequiredDescription
pageNo
urlsNo
totalNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
messageNo
siteUrlNo
nextStepNo
orderingNo
pageSizeNo
sortedByNo
sortOrderNo
thenOrderNo
configuredNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish a safe read-only, closed-world operation, and the description adds substantial behavior: default ordering (createdAt, then id), pagination, the per-URL payload (verdict/coverage, last-crawl time, Google-selected and user-declared canonicals, Search Console link), and the null-canonical meaning when Google did not report it or the URL was never inspected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger sentence, then scope/ordering, then filter options, then return payload, then exclusions—a logical progression with little waste. The single long sentence enumerating returned fields is slightly dense but every clause is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers trigger, ordering, filtering, payload, null semantics, and sibling routing; an output schema exists so return details are a bonus, not a requirement. The only shortfall is that pagination parameters and the ambiguity of siteUrl (property vs. URL) are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description carries the burden: it enumerates the filter enum values and explains that search is a URL substring match, which is valuable. However, page, pageSize, and the required siteUrl (property identifier) get no explanation in the description, leaving the pagination contract only implicit in schema defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (paginated list of tracked URLs in the GSC Wizard Indexing Tracker for a property) and names the exact question it answers (which tracked URLs are indexed). It is clearly distinguishable from get_indexing_tracker (counts) and list_url_inspections (one-off inspections) by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('when the user asks which of their tracked URLs are indexed or not, or wants the watchlist') and then names two exclusions with the alternatives to use instead: get_indexing_tracker for counts only and list_url_inspections for one-off inspections.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_url_inspectionsList URL inspection historyA
Read-only
Inspect

Use this when the user asks what earlier URL inspections found; it spends no inspection quota. Returns the inspection history GSC Wizard has stored for a property: verdict, coverage, indexing state, last-crawl time, the Google-selected and user-declared canonicals, and the Search Console link per URL. Newest first (requested_at, then id). A null canonical with a non-null inspection_result_link means Google did not report it; when the link is null too, the row predates canonical storage (re-run inspect_url for a fresh result). Paged: follow pagination.nextOffset to walk the whole stored history. Not for a fresh result: use inspect_url; for the Indexing Tracker's URLs use list_tracked_urls.

NameRequiredDescriptionDefault
limitNoRows to return per call (default 100, max 500).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
siteUrlYes
urlContainsNo
latestPerUrlNoCollapse repeat inspections of the same URL to the most recent one. Applied to the page after paging, so a page can return fewer rows than limit.

Output Schema

NameRequiredDescription
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
paginationNo
inspectionsNo
emptyBecauseNo
methodLimitsNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare it is a safe read (readOnlyHint, destructiveHint=false); the description adds materially more: it spends no inspection quota, ordering is newest-first by requested_at then id, and it documents the edge case where a null canonical with a null link means the row predates canonical storage. That is real operational context an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The trigger sentence is front-loaded and every clause carries information, including the null-canonical caveat and paging rule. It is a dense single block, though, where the data-semantics aside would read better as a separate sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema already defining return shape, the description only needs the parts an agent cannot infer: quota cost, ordering, pagination, null-canonical meaning, and exit paths to sibling tools. All are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Offset and limit are already documented in the schema, but the description adds the useful behavior that history is walked via pagination.nextOffset, tying the input to the output. It does not explain urlContains (undocumented in schema) or clarify siteUrl, so the 60% coverage gap is only partially compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list stored URL inspection history for a property) and enumerates the returned fields, which pins down exactly what it is. It explicitly contrasts itself with inspect_url and list_tracked_urls, so the agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this when the user asks what earlier URL inspections found" gives an explicit trigger, and "Not for a fresh result: use inspect_url; for the Indexing Tracker's URLs use list_tracked_urls" names the alternatives and the condition selecting each. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_yandex_sitesYandex sitesA
Read-only
Inspect

Use this when the user asks which of their sites have Yandex data, or which sites their Yandex Webmaster account holds. Lists the sites in the connected Yandex Webmaster account, with their verification status and the canonical mirror Yandex resolved for each, sorted by url (A to Z). Only sites already added AND verified in Yandex Webmaster itself report data. Not for Search Console or Bing properties: use list_sites or list_bing_sites. The list is cached for ten minutes. Returns notConfigured: true when no Yandex account is connected, or when the connection has to be granted again (reason: reauth).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
hintNo
sitesNo
reasonNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
limitationsNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld/non-destructive annotations by disclosing the ten-minute cache, the notConfigured:true failure mode with reason:'reauth', and the constraint that only sites added AND verified in Yandex Webmaster report data — all traits an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the trigger, followed by scope, exclusions, and operational caveats. No sentence is redundant and each adds a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the safety profile, an output schema covering return shape, and zero parameters, the description fills the remaining gaps (caching, not-configured behavior, verified-only constraint) thoroughly. Nothing needed to call or interpret the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is no parameter semantics to explain. The description usefully notes the sort order of the result set, which is a small value-add beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (lists sites in the connected Yandex Webmaster account) and enriches it with the returned attributes (verification status, canonical mirror) and ordering. It also explicitly names the siblings it is not: list_sites and list_bing_sites.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user asks which of their sites have Yandex data') and closes with an explicit exclusion routing to list_sites/list_bing_sites. When-to-use, when-not, and alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_report_accessGrant or revoke report accessA
Destructive
Inspect

Grants or revokes client access to a saved shareable report. This is what makes a report openable at all: an ungranted report opens for nobody, including the account owner. After granting, the client opens the report URL, enters their email, and GSC Wizard emails them a login link. That self-serve sign-in only works once they hold a grant. Clients must already exist on the account: add them with create_report_client, find ids with list_report_clients. NOTE: unlike the web app's share dialog, this tool does NOT itself send a "report shared with you" notification. Either pass the recipient the report URL, or send the notification from Account > Shared Reports in GSC Wizard (https://tool.gscwizard.com/account/shared-reports), where each client has a Resend button. OWNER CONFIRMATION: granting to a client who has never been sent a report from this account does NOT give access yet. The grant stays pending and GSC Wizard emails the account owner a link to confirm or cancel it; until the owner confirms, the recipient cannot open the report or sign in to the portal. Such clients are listed in pendingConfirmation, not granted. Tell the user to check their email. Clients who already hold a confirmed grant are granted at once. action "revoke" withdraws access (pending grants included). Granting is idempotent: a client who already had access stays granted and is reported as unchanged.

NameRequiredDescriptionDefault
actionYes
reportIdYes
clientIdsYesClient ids from list_report_clients / create_report_client.

Output Schema

NameRequiredDescription
urlNo
noteNo
actionNo
grantedNo
revokedNo
reportIdNo
emailsSentNo
reportTitleNo
alreadyHadAccessNo
didNotHaveAccessNo
unknownClientIdsNo
pendingConfirmationNo
ownerConfirmationEmailSentNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and openWorldHint=true, and the description adds substantial non-obvious behavior: the owner-confirmation gate for first-time grants, the pendingConfirmation status, the fact that unconfirmed recipients cannot open the report or sign in, revoke covering pending grants, and grant idempotency with an 'unchanged' result. This is exactly the kind of state-machine context an agent needs before mutating access.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the critical 'ungranted opens for nobody' constraint, then layers conditions. Dense and largely earned, though the URL plus Resend-button walkthrough and repeated confirmation framing run longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with an existing output schema, the description covers prerequisites, failure modes, the confirmation flow, and result semantics (pendingConfirmation, unchanged) thoroughly enough that an agent can call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (33%), so the description must compensate; it does for action (grant vs revoke semantics, pending included, idempotency) and indirectly for clientIds via the sibling tools it names. reportId is only implied as the target report via the opening sentence, so it is slightly less explicit than the other parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair ('grants or revokes') on a specific resource ('client access to a saved shareable report'), and explicitly names the related siblings create_report_client and list_report_clients with their distinct roles. An agent can distinguish it from create_shared_report or list_shared_reports without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions ('Clients must already exist on the account'), routes to the right siblings for creating/finding client ids, and warns that unlike the web share dialog this tool does NOT send a notification, with concrete alternatives (pass the URL, Resend from the account UI). Covers both grant and revoke behavior and idempotency.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_tagsManage property tagsA
Destructive
Inspect

Create, assign, unassign, rename, or delete property tags. Tags group Search Console properties into portfolios surfaced by list_tags and get_tag_group_view. Actions: "create" defines an account-level global tag (so it appears before any property uses it); "assign" adds a tag to the given properties; "unassign" removes it from the given properties; "rename" renames a tag across every property and the global list; "delete" removes a tag from every property and the global list. siteUrls is required for assign/unassign and ignored otherwise; newName is required for rename. For wholesale replacement of one property's tag set, use update_site instead.

NameRequiredDescriptionDefault
tagYes
actionYes
newNameNo
siteUrlsNo

Output Schema

NameRequiredDescription
tagNo
actionNo
newNameNo
updatedNo
notTaggedNo
requestedNo
globalTagsNo
updatedSitesNo
alreadyTaggedNo
globalTagRemovedNo
globalTagRenamedNo
removedFromSitesNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real scope detail beyond them: rename and delete affect 'every property and the global list', and create is account-level so the tag exists before any property uses it. It does not mention permission requirements or reversibility, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded verb list, then an action glossary, then parameter rules, then the alternative-tool routing — a logical order with no filler. It is dense but every sentence carries an actionable constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 4-param, multi-mode mutation tool with an output schema (so return values need not be described), and the description covers each mode's effect, its parameter requirements, and the sibling alternative. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it does: siteUrls is required for assign/unassign and ignored otherwise, newName is required for rename, and tag is the tag being operated on. It omits bounds (100-item cap, length limits) but the conditional-requirement mapping is the part an agent could not infer from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb list plus resource ('Create, assign, unassign, rename, or delete property tags'), then defines what a tag is and names the sibling surfaces (list_tags, get_tag_group_view) that consume them. An agent can distinguish this from update_site or create_content_group without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives per-action semantics for all five enum values, states which parameters apply to which action, and explicitly routes wholesale tag-set replacement to update_site instead. When-to-use and when-to-use-something-else are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_countriesCountry breakdownA
Read-only
Inspect

Use this when the user asks how search traffic splits by country. Returns per-country performance (clicks, impressions, CTR, position) over a date range. Country codes are ISO 3166-1 alpha-3. Not for the device split: use query_devices. Rows are sorted by clicks, highest first; ctr is a 0-100 percentage. Quote totals from coverage.siteTotals, or coverage.filteredTotals when coverage.scope is "filtered", not summed rows. Served from the ClickHouse warehouse when available, else the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
limitNoRows to return per call (default 100, max 1000).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

NameRequiredDescription
noteNo
rangeNo
scopeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
orderingNo
sortedByNo
countriesNo
sortOrderNo
thenOrderNo
dataSourceNo
paginationNo
partialDaysNo
dataMaturityNo
settledThroughNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint), and the description adds real operational context: row sort order, ctr as a 0-100 percentage, the ClickHouse-vs-live-API fallback surfaced via `dataSource`, and the data lag. It also warns not to sum rows but to quote `coverage.siteTotals`/`coverage.filteredTotals` depending on `coverage.scope`, though it could be clearer about what happens when a filter narrows the scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six sentences, each carrying distinct information (trigger, return fields, exclusion, sort/format, totals caveat, data source/lag). The trigger and the sibling exclusion are front-loaded where an agent will read them first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't explain return shapes, yet it usefully flags the coverage totals pitfall and the data source field. For a 9-parameter read tool with 89% schema coverage this is nearly complete; only the filter parameters (brand, contentGroupId, topicClusterId) go unmentioned in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the schema already documents the date defaults, limit/offset, searchType enums and filter ids in detail. The description reinforces the date-range default and ISO alpha-3 country codes, but adds little that isn't already in the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('how search traffic splits by country') and enumerates the metrics returned (clicks, impressions, CTR, position). It explicitly names the sibling it is not for ('Not for the device split: use query_devices'), so the agent can disambiguate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the triggering user question verbatim, names the exclusion and the alternative tool (query_devices), and explains the date-range default (omit both dates → last 28 settled days, ~2-3 day lag). Nothing about when to select this tool is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_devicesDevice breakdownA
Read-only
Inspect

Use this when the user asks how search traffic splits between desktop, mobile and tablet. Returns per-device performance (DESKTOP, MOBILE, TABLET) over a date range. Not for the country split: use query_countries. Rows are sorted by clicks, highest first; ctr is a 0-100 percentage. Quote totals from coverage.siteTotals, or coverage.filteredTotals when coverage.scope is "filtered", not summed rows. Served from the ClickHouse warehouse when available, else the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

NameRequiredDescription
noteNo
rangeNo
scopeNo
thenByNo
devicesNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
partialDaysNo
dataMaturityNo
settledThroughNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, but the description adds substantial behavioral context: row sorting by clicks, ctr as a 0-100 percentage, source selection between ClickHouse and the live API via dataSource, and data lag of ~2-3 days. It also explains how to quote totals correctly from coverage.siteTotals or coverage.filteredTotals rather than summing rows, which is operationally important.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the trigger condition and then moves into output semantics and operational caveats. Every sentence earns its place: device split, country exclusion, sort/ctr semantics, totals guidance, data source, and date defaults are all useful for correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations, 86% schema coverage, and an output schema, the description is complete enough for an agent to call the tool correctly. It covers when to use it, when to avoid it, default date behavior, return ordering, percentage formatting, totals sourcing, and data-source variability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 86%, so most parameter meaning is already carried by the schema. The description reinforces the optional date range and default 28-day behavior, but those details are also present in the startDate and endDate schema descriptions. It adds little parameter meaning beyond what the structured schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb/resource action: it returns per-device performance for DESKTOP, MOBILE, and TABLET over a date range. It explicitly distinguishes itself from the country breakdown sibling by naming query_countries. An agent can identify the tool's purpose without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger: use this when the user asks how search traffic splits between desktop, mobile, and tablet. It also names the main alternative and exclusion: not for the country split, use query_countries. This is clear routing guidance with a concrete sibling alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_ga4_custom_dimensionsGA4 custom dimension breakdownA
Read-only
Inspect

Use this when the user asks how GA4 traffic splits by one of the site's own event parameters or user properties. Breaks GA4 traffic down by ONE custom dimension registered on the property linked to a site (e.g. customEvent:source_format), optionally CROSSED with a second dimension, which is how a question like "which article sent how many readers to which page" is answered: primary customEvent:source_path, secondary customEvent:target_path, filtered to the one event that carries them. Metrics per row are eventCount, sessions, activeUsers and keyEvents, plus any registered custom metrics asked for; rows are sorted by eventCount, highest first. Not for standard dimensions such as channel, page or country: use query_ga4_report. Run list_ga4_custom_dimensions first for the exact names; an unregistered name is rejected here rather than silently returning an empty report. Returns a notConfigured result (not an error) when Google Analytics is not connected or no GA4 property is linked. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNoMaximum number of breakdown rows returned.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
dimensionNoapiName of the custom dimension to break down by, from list_ga4_custom_dimensions (e.g. customEvent:source_format). Omit to use the property's first registered custom dimension; the response reports the choice.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
valueFiltersNoNarrow the whole report to rows whose custom dimension matches a value - the way to drill from "every source_path" into "the target pages of ONE source_path". Filters AND together.
customMetricsNoUp to 3 registered custom METRIC apiNames to add as extra columns (from list_ga4_custom_dimensions metricNames).
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
secondaryDimensionNoOptional second dimension to cross the first with, producing one row per PAIR of values. Either another custom dimension apiName, or one of: eventName, pagePath, landingPage, sessionDefaultChannelGroup, sessionSourceMedium, country, deviceCategory.
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
reasonNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
metricsNo
siteUrlNo
summaryNoMetric totals keyed by GA4 metric name.
nextStepNo
orderingNo
rowCountNo
sortedByNo
timeZoneNo
dimensionNo
siteScopeNo
sortOrderNo
thenOrderNo
totalRowsNo
truncatedNo
dataSourceNo
propertyIdNo
prevSummaryNo
emptyBecauseNo
methodLimitsNo
hasComparisonNo
notConfiguredNo
reauthRequiredNo
comparisonRangeNo
availableMetricsNo
secondaryDimensionNo
availableDimensionsNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the readOnly/openWorld annotations: unregistered names are rejected rather than returning an empty report, a notConfigured result is returned (as non-error) when GA4 is unlinked, and results are sorted by eventCount descending with a defined metric set. It does not cover the row-limit default or the ~28-day lag implication for comparison periods, but what it does disclose is high-value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and followed by behavior, exclusions, and caveats in a sensible order. It is dense and the example sentence is long, but for an 11-parameter tool with nested filters almost every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a complex nested-parameter tool with an output schema already documenting return shape, the description covers what the schema cannot: default date window and data lag, connectivity failure mode, prerequisite discovery step, and the primary/sibling split. Nothing needed for a correct first call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 91%, yet the description still adds real semantics: the crossing pattern for secondaryDimension is grounded in a concrete example (source_path → target_path filtered to one event), the omit-and-default behavior of dimension is explained, and valueFilters is framed as the drill-down mechanism. That is meaning the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('breaks GA4 traffic down by ONE custom dimension') and scopes it precisely to registered custom event/user/item dimensions. It explicitly separates itself from query_ga4_report for standard dimensions, so an agent can pick correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with the exact triggering question type, names the negative case ('Not for standard dimensions such as channel, page or country: use query_ga4_report'), and prescribes a prerequisite call to list_ga4_custom_dimensions. That is when-to-use, when-not-to-use, and prerequisite in one place.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_ga4_reportGA4 breakdown reportA
Read-only
Inspect

Use this when the user asks how a site's GA4 traffic splits by one dimension. Runs ONE GA4 dimension breakdown for the property linked to a GSC Wizard site: channel, sourceMedium, page, landingPage, country, device, event, date (daily trend), hostName, firstUserChannel or firstUserSourceMedium. channel and sourceMedium attribute each session to its own source; firstUserChannel and firstUserSourceMedium attribute users to the source that first acquired them, as GA4's User acquisition report does (use those when the user asks about new users or first-user attribution). Each dimension carries its own metric set (returned in metrics); rows are sorted by the first metric, highest first (date breakdowns by date, oldest first). Not for site totals: use get_ga4_overview (rows stop at limit; do not sum them). Set secondaryDimension to "date" or "hostName" to split every row further, e.g. dimension "event" + secondaryDimension "date" shows on which days an event fired; each row then carries that field (dates as YYYY-MM-DD). Rows include prev* fields that are only meaningful when a comparison range is given (hasComparison); date breakdowns take no comparison range. Only the first limit rows are returned (truncated and note say when more exist); to follow one event, pass filters: { event: [""] }. When the GA4 property is shared with other sites, results are limited to this site's hostnames and siteScope says so (on a shared property a hostName filter narrows within that scope; only the owner can replace it). Rates (engagementRate, bounceRate) are fractions 0-1, not percentages. Returns notConfigured (not an error) when Google Analytics is not connected or no GA4 property is linked to the site in GSC Wizard. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
dimensionYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
secondaryDimensionNoOptional second dimension that splits every row: "date" (per day) or "hostName" (per site/stream host). Must differ from `dimension`.
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
reasonNo
thenByNo
accountNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
metricsNo
siteUrlNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
timeZoneNo
dimensionNo
siteScopeNo
sortOrderNo
thenOrderNo
totalRowsNo
truncatedNo
dataSourceNo
propertyIdNo
emptyBecauseNo
methodLimitsNo
hasComparisonNo
notConfiguredNo
reauthRequiredNo
comparisonRangeNo
secondaryDimensionNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld/non-destructive; the description adds substantial behavioral context beyond that: rows sorted by first metric (date breakdowns oldest first), hard row cap at `limit` with `truncated`/`note` signals, prev* fields inert without a comparison range, date breakdowns rejecting comparisons, shared-property `siteScope` narrowing and owner-only override, rates as 0-1 fractions, ~2-3 day data lag, and `notConfigured` returned as a non-error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case and the sibling exclusion, and almost every sentence carries non-obvious information (truncation, siteScope, rate units, notConfigured). However, it is a single dense paragraph of ~300 words with some repetition of the limit/truncation and date-range points, which makes it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with nested filters, enums, and an output schema, the description covers the decision points an agent needs: which dimension to pick, how to drill down, how dates default, what limits results, and what non-error states look like. Nothing required to call it correctly is missing, and return-shape detail is rightly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage the schema already documents dates, comparisons, secondaryDimension and the filter operators, so credit goes to what the description adds: the semantic difference between channel/sourceMedium and firstUserChannel/firstUserSourceMedium, the meaning of the 'date' dimension (daily trend), the default 28 settled days when both dates are omitted, the secondaryDimension split example, and the comparison restriction on date breakdowns. It leaves limit bounds, siteUrl, and the pagePath operator semantics to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (run ONE GA4 dimension breakdown for the property linked to a GSC Wizard site) and enumerates the exact supported dimensions. It also explicitly contrasts itself with get_ga4_overview (site totals) and explains the channel vs. firstUserChannel distinction, so an agent can pick it out of a large sibling set without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with a use condition ('when the user asks how a site's GA4 traffic splits by one dimension') and names the correct alternative for the adjacent case ('Not for site totals: use get_ga4_overview'). It further routes intent: use firstUserChannel/firstUserSourceMedium when the user asks about new users or first-user attribution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_gmc_reportMerchant Center report query (MCQL)A
Read-only
Inspect

Use this when the user needs a Merchant Center field, filter or ordering the fixed Merchant Center tools do not expose (a product_view gtin, offers ordered by impressions). Runs a raw Merchant Center Query Language (MCQL) query against the reports of the Google Merchant Center account linked to a GSC Wizard site. MCQL is SQL-like: SELECT offer_id, title, clicks, impressions FROM product_performance_view WHERE date BETWEEN '2026-09-01' AND '2026-09-30' AND marketing_method = 'ORGANIC' ORDER BY clicks DESC. The views are product_performance_view, non_product_performance_view, product_view, price_competitiveness_product_view, price_insights_product_view, best_sellers_product_cluster_view, best_sellers_brand_view, competitive_visibility_competitor_view, competitive_visibility_top_merchant_view, competitive_visibility_benchmark_view. The performance and competitive visibility views require a date condition in WHERE; product_view and the two price views are dateless snapshots. Read only (MCQL cannot change anything) and always against the linked account. Not for questions a fixed tool answers: use get_organic_shopping_performance, get_product_listing_status, get_gmc_pricing_insights, get_gmc_best_sellers or get_gmc_competitors, which return normalised units. Rows come back raw: int64 as strings, money as amountMicros, rates as 0-1 fractions (see unitsNote), in the order of the query's ORDER BY (declared as sortedBy / sortOrder / thenBy in camelCase when it lists plain fields), in no defined order without one. At most limit rows (default 200, max 1000); hasMore says when the query matched more. An invalid query fails with bad_request and Google's masked diagnostic. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

NameRequiredDescriptionDefault
limitNoRows to return (default 200, max 1000).
queryYesThe MCQL query: SELECT <fields> FROM <view> [WHERE ...] [ORDER BY ...] [LIMIT n]. Field names are snake_case (offer_id, click_through_rate). String and date literals use single quotes.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").

Output Schema

NameRequiredDescription
hintNo
rowsNo
viewNo
queryNo
rangeNo
reasonNo
thenByNo
accountNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
emptyNoteNo
resultKeyNo
sortOrderNo
thenOrderNo
truncatedNo
unitsNoteNo
dataSourceNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
notConfiguredNo
truncationNoteNo
truncationReasonNo
reportUnavailableNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, open-world, and non-destructive behavior, and the description adds important operational context: it is always scoped to the linked account, certain views require date conditions, raw units are returned, ordering follows the query, and invalid queries or missing configuration produce specific failure shapes. It also explains that `hasMore` signals truncation and that `notConfigured` is a result rather than an error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core when-to-use condition and keeps most sentences functional for a complex raw-query tool. The view list and raw-result caveats are long but justified; there is minor redundancy with the schema on the `limit` default and maximum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, the description need not explain return shape, and it still covers the important surrounding context: raw unit representation, ordering behavior, `limit`/`hasMore`, invalid-query errors, and `notConfigured` handling. It is complete enough for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful query-construction guidance beyond the schema: an MCQL example, the available views, and which views require date filters versus being dateless snapshots. This materially helps an agent author the `query` parameter, though it does not attempt to enumerate all field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: run a raw MCQL query against Merchant Center reports for the linked GSC Wizard site. It distinguishes this from the fixed Merchant Center tools and gives concrete examples of what it can expose that they cannot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use this tool: when a needed field, filter, or ordering is not exposed by fixed tools. It also names the fixed alternatives to use otherwise, including get_organic_shopping_performance, get_product_listing_status, get_gmc_pricing_insights, get_gmc_best_sellers, and get_gmc_competitors.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_search_analyticsQuery Search Console analyticsA
Read-only
Inspect

Use this when the user asks an ad-hoc question that needs raw Search Console rows, like "top queries last 28 days" or "page-level performance for /pricing". Runs searchAnalytics.query on a property: date / query / page / country / device / searchAppearance dimensions, filters, and the web, image, video, news, discover, googleNews or all (combined) search type. Not for totals or period comparisons: use get_site_summary. Eligible requests are served from the GSC Wizard ClickHouse warehouse (longer history); searchAppearance, googleNews or 3+ distinct dimensions use the live Search Console API (dataSource says which). Rows are sorted by clicks, highest first, or by date then clicks when date is a dimension (a live-API result over 5,000 rows keeps clicks order); sortedBy states it. ctr is a 0-100 percentage. Query rows cover only the queries Google lists: coverage.hiddenClicksShare (0-1) is the share of clicks with no query row, so quote totals from coverage.siteTotals, or coverage.filteredTotals when coverage.scope is "filtered", not summed rows. Regex filters use RE2 (no lookahead or backreferences; use excludingRegex to exclude). Returns 100 rows by default: pagination says whether the result was truncated; page with startRow or raise rowLimit. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoDimension filters joined with AND. Pass an empty list or omit for no filtering.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
rowLimitNoRows to return per call (default 100, max 25000). Large values return a lot of raw rows; prefer paging with startRow.
startRowNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
dimensionsNo
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web

Output Schema

NameRequiredDescription
noteNo
rowsNo
thenByNo
endDateNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
coverageNoHow much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows.
orderingNo
rowCountNo
sortedByNo
sortOrderNo
startDateNo
thenOrderNo
dataSourceNo
dimensionsNo
paginationNo
searchTypeNo
partialDaysNo
dataMaturityNo
settledThroughNo
coverageUnavailableNoWhy coverage is null, when it is.
warehouseLatestDateNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/destructive annotations: discloses data source selection (ClickHouse vs live API), sort order rules and their exceptions, ctr units, RE2 regex limitations (no lookahead/backreferences, use excludingRegex), default 100-row pagination with 5,000-row live cap, and the ~2-3 day data lag. Missing only error/permission failure modes and quota behavior for a tool with openWorldHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and exclusions, which is right, but the body is a dense run of semicolon-joined clauses covering sorting, units, coverage caveats, regex dialect, and pagination. Every fact is useful, but it reads as a reference dump rather than a structured, scannable description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the hard parts of this query surface: why summed query rows under-count clicks and where to quote totals from (coverage.siteTotals/filteredTotals), dataSource reporting, sort determinism via sortedBy, and truncation via pagination. With an output schema present and 88% schema coverage, the remaining needs are addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88% and the description still adds real value: it clarifies the omitted-date-range default (last 28 settled days), the dimensions/searchAppearance/googleNews constraints ('no query dimension', '3+ distinct dimensions use live API'), and searchType semantics including 'all' weighting. Regex operator semantics are explained in prose rather than left to the enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a concrete verb+resource framing ('ad-hoc question that needs raw Search Console rows') and examples ('top queries last 28 days', 'page-level performance for /pricing'), then names the underlying API call. It distinguishes itself from siblings by explicitly ruling out totals/period comparisons and pointing to get_site_summary, and from query_top_queries-style tools by its ad-hoc dimensional nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (ad-hoc raw rows), when-not ('Not for totals or period comparisons: use get_site_summary'), and a fallback-alternative route for the same data. It also explains the routing tradeoff between warehouse and live API based on dimensions/searchType, which lets an agent predict behavior before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_top_pagesTop landing pagesA
Read-only
Inspect

Use this when the user asks which landing pages get the most clicks. Returns the top landing pages over a date range: a wrapper around query_search_analytics. Not for a folder or section rollup: use breakdown_by_path. Rows are sorted by clicks, highest first; ctr is a 0-100 percentage. Quote totals from coverage.siteTotals, or coverage.filteredTotals when coverage.scope is "filtered", not summed rows. Served from the ClickHouse warehouse when available, else the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
limitNoRows to return per call (default 100, max 1000).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/safe/non-destructive, but the description adds substantial context beyond them: rows sorted by clicks descending, ctr expressed as 0-100, totals must come from coverage.siteTotals or coverage.filteredTotals rather than summed rows, and a ClickHouse-vs-live-API source fallback surfaced via dataSource. These are exactly the behavioral traits that prevent misinterpretation of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and the sibling exclusion, then layers sorting, totals, source, and date defaults. Every clause is useful, though the closing date-range sentence partially repeats what the schema already documents for startDate/endDate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, open-world query tool with an output schema, the description fills the remaining gaps an agent would otherwise hit: result ordering, ctr units, which aggregate field to quote, and where data comes from. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 89% so the baseline is 3; the description still adds value by spelling out the date-range omission behavior ('omit startDate/endDate to analyze the last 28 settled days', ~2-3 day lag), which is the most error-prone parameter choice, and reinforces what the scope field means via coverage.scope.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the exact resource and metric ('top landing pages', 'most clicks') and explicitly frames itself as a wrapper around query_search_analytics, so the agent knows exactly what it returns and how it relates to the generic analytics tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both sides of the routing decision: 'Use this when the user asks which landing pages get the most clicks' and 'Not for a folder or section rollup: use breakdown_by_path.' The alternative is named with the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_top_queriesTop search queriesA
Read-only
Inspect

Use this when the user asks which search queries bring a property the most clicks. Returns the top queries over a date range: a wrapper around query_search_analytics. Not for totals: use get_site_summary. Rows are sorted by clicks, highest first; ctr is a 0-100 percentage. Query rows cover only the queries Google lists: coverage.hiddenClicksShare (0-1) is the share of clicks with no query row, so quote totals from coverage.siteTotals, or coverage.filteredTotals when coverage.scope is "filtered", not summed rows. Served from the ClickHouse warehouse (longer history) when available, else the live Search Console API (dataSource says which). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
limitNoRows to return per call (default 100, max 1000).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

NameRequiredDescription
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/open-world/safe, and the description adds substantial context beyond them: rows are click-sorted, ctr is a 0-100 percentage, results come from ClickHouse when available else the live API (exposed via dataSource), and data lags ~2-3 days. The coverage caveat (`hiddenClicksShare`, `siteTotals` vs `filteredTotals`) warns about a real correctness trap (summing rows understates totals) that no structured field conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the use case before the mechanics, and nearly every sentence carries operational value. It is dense — the coverage/totals caveat is a long compound sentence — but nothing is pure filler, so it stays readable for its payload.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still supplies the semantics an agent needs to interpret results correctly (sort order, ctr units, hidden-clicks share, which totals to quote, which data source served them). For a 9-parameter analytics query tool with cross-source fallback, nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 89%, so nearly every parameter is already documented in the schema — including the 28-day default and the ~2-3 day lag, which the description largely restates. The description adds little per-parameter detail beyond the schema, so this is the baseline-3 case where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Returns the top queries over a date range"), names the sort (clicks, highest first) and its underlying implementation (a wrapper around query_search_analytics). It also explicitly disambiguates from get_site_summary for totals, so an agent can distinguish it from siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with a concrete use trigger ("when the user asks which search queries bring a property the most clicks") and gives an explicit exclusion with the correct alternative ("Not for totals: use get_site_summary"). It additionally points at query_search_analytics as the general-purpose sibling, covering both when-to-use and when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_tracked_urlsRemove URLs from the indexing trackerA
Destructive
Inspect

Removes URLs from the GSC Wizard Indexing Tracker for a property. Pass the full URL strings to stop tracking. Returns the number of rows actually removed.

NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

NameRequiredDescription
removedNo
siteUrlNo
requestedNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral detail beyond that: removal is partial ('the number of rows actually removed'), implying some URLs may fail. It does not disclose reversibility, permission requirements, or batch-size constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose, how to call it, and return semantics. Purpose is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the destructive/read-only profile and an output schema covering the return shape, the description needs only to state purpose and input intent, which it does. Minor gaps: the max-1800 batch limit and the assumption that URLs are already tracked are unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies the 'urls' parameter meaningfully ('full URL strings'), which the bare array-of-strings schema does not, but leaves 'siteUrl' undefined and never mentions the 1800-item cap or the min-1 array constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Removes URLs from the GSC Wizard Indexing Tracker for a property') and clarifies intent ('to stop tracking'), so the agent knows exactly what it does. It does not name or contrast with the obvious sibling add_tracked_urls/list_tracked_urls, so sibling differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pass the full URL strings to stop tracking' gives a concrete usage cue, and 'for a property' implies the siteUrl scope. There is no statement of when to prefer this over list_tracked_urls or get_indexing_tracker, and no prerequisites (e.g. URLs must currently be tracked), so guidance remains implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_feed_auditRun feed auditAInspect

Queues a Merchant Center feed audit for a GSC Wizard site: 21 deterministic checks over the synced product catalog (title and description length, duplicate titles / descriptions / images / URLs, GTIN, category, product type and required attributes, image size and ratio) plus a crawl of the product pages on the owner-approved host allowlist (HTTP status, JSON-LD Product schema, price and title consistency, H1 and title-element counts, page images missing from the feed), rolled up into a 0-100 Feed Score. The tool only ENQUEUES: the audit runs in the GSC Wizard app worker (the feed plane within minutes, the page crawl at a politeness-bounded pace over every distinct product URL, so a large catalog can take hours), and enqueued: false with a skipReason means a run is still in progress (run_in_progress, with the run summary in run), a run for today already exists, or one completed inside the 28-day cadence (pass force: true to override the cadence; the one-per-day rule cannot be overridden). Each user may start at most 3 runs per 24 hours (rate_limited beyond that; a call that queues nothing does not count). Poll get_feed_audit_results with the returned runDate for status and the score. Returns a notConfigured result (not an error) when Merchant Center is not connected, is connected on another Google login than the property's Search Console one (reason "gmc_on_other_account": the audit runs through the sync, which reads only through the Search Console account), its credentials were revoked, or no Merchant Center account is linked to the site in the GSC Wizard app. Requires full access on a shared property.

NameRequiredDescriptionDefault
forceNoQueue an audit even when one completed inside the last 28 days (default false). Cannot bypass the one-audit-per-property-per-day rule or a run still in progress.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").

Output Schema

NameRequiredDescription
runNo
hintNo
forceNo
rangeNo
reasonNo
accountNo
runDateNo
siteUrlNo
cachedAtNo
enqueuedNo
dataSourceNo
skipReasonNo
gmcAccountIdNo
notConfiguredNo
truncationReasonNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give readOnlyHint=false, openWorldHint=true, destructiveHint=false. The description goes far beyond: it is enqueue-only, execution happens in the GSC Wizard worker (minutes for the feed plane, potentially hours for the politeness-bounded crawl), notConfigured is a non-error result with a specific cause ("gmc_on_other_account"), and full access on a shared property is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and check inventory, then failure/rate-limit/return semantics in descending priority. It is dense and includes some very long run-on sentences, but almost every clause carries operational information an agent needs rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, asynchronous, rate-limited tool with an output schema present, the description covers the full lifecycle an agent needs: enqueue behavior, refusal cases, override rules, polling target, and configuration prerequisites. Return-value formatting is correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters fully. The description's force guidance (override the 28-day cadence, cannot bypass one-per-day) restates what the schema's force description already says. Baseline 3 is appropriate since the description adds little parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Queues") and resource ("Merchant Center feed audit") and then enumerates exactly what the audit covers: 21 deterministic catalog checks plus a page crawl rolled into a 0-100 Feed Score. An agent can immediately distinguish this from the sibling get_feed_audit_results, which is explicitly named as the polling counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: use this to enqueue, then "Poll get_feed_audit_results with the returned runDate for status and the score." It states when a queue attempt is refused (enqueued:false + skipReason), how to override the cadence (force: true), which rule cannot be overridden, and the 3-per-24h rate limit. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

score_opportunitiesScore ranking opportunitiesA
Read-only
Inspect

Use this when the user asks which queries are most worth optimising: ranks queries by an impression-weighted opportunity score that favours near-threshold positions (positions 3-30) with low current CTR, highest score first, and estimates the extra clicks available if CTR improved. Not for the gain from reaching a target position: use find_page_poaching_opportunities. potentialClicks is the extra clicks a 25% CTR would bring a query ranked lower than position 3. It is 0 when the query already clicks at or above that benchmark (common for small or navigational queries), which says nothing about its rank. CTR values are percentages (0-100). Only queries Google lists are scored: on most properties a large share of clicks has no query row (analyze_sampling_impact measures it). Scans up to 25,000 queries: on the warehouse the ones with the most impressions; on the live API its click order. truncated: true means the scan hit that cap (scanNote says what that left out). minImpressions defaults to 10; when it is left out and no query passes, the tool retries once at 1 on its own and says so in minImpressionsAutoRelaxed (minImpressions is always the floor applied). Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoSearch type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's "All" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0.web
minImpressionsNoMinimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given.

Output Schema

NameRequiredDescription
noteNo
rangeNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
nextStepNo
orderingNo
scanNoteNo
sortedByNo
scanLimitNo
sortOrderNo
thenOrderNo
truncatedNo
dataSourceNo
partialDaysNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
opportunitiesNo
minImpressionsNo
settledThroughNo
warehouseLatestDateNo
minImpressionsAutoRelaxedNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far beyond what readOnlyHint/destructiveHint convey: it discloses the 25,000-query scan cap, what `truncated`/`scanNote` mean, the auto-relax retry of minImpressions, the warehouse-vs-live-API source fallback, and the ~2-3 day data lag. The only gap is the `limit` parameter, whose effect on result volume is never explained, leaving the relationship between the scan cap and the returned row count implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Usage and the sibling exclusion are front-loaded, and nearly every clause carries operational meaning (units, truncation, retry, data source). It is, however, a crowded single paragraph of dense parentheticals and backticked field names that could be split into usage / caveats / defaults for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shapes need no explanation, and the description still names the signal fields an agent must react to (`truncated`, `scanNote`, `minImpressionsAutoRelaxed`, `dataSource`). It also pre-empts the biggest interpretive trap — that most clicks have no query row — and points to analyze_sampling_impact for measuring it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 67% schema coverage the description must compensate and largely does: it spells out the date-range default, the minImpressions auto-relax rule and 'a value you pass is always applied as given', and CTR-as-percentage units. It never addresses `limit`, which is undocumented in both the schema and the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('ranks queries by an impression-weighted opportunity score') plus the scoring function (favours positions 3-30 with low CTR, highest first) and the derived output (extra clicks available). It explicitly separates itself from the nearest sibling, find_page_poaching_opportunities, so an agent can choose between them without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when the user asks which queries are most worth optimising' gives a concrete trigger, and 'Not for the gain from reaching a target position: use find_page_poaching_opportunities' is an explicit exclusion with a named alternative. It also sets defaults (omit dates → last 28 settled days) so the agent knows it can call the tool with only siteUrl.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_dashboard_visibilityShow or hide properties on the dashboardAInspect

Shows or hides registered properties on the GSC Wizard dashboard, the same switch as the app's Dashboard Management page. Visibility is also what makes a property usable by the other MCP tools, so use this to bring a newly added property into scope. Showing a property consumes a dashboard slot from the plan and is refused when the plan limit is reached; ClickHouse-synced properties are always shown and consume no slot. Hiding a property only removes it from the workspace: no data is deleted, and it can be shown again at any time. The response reports slot usage before and after.

NameRequiredDescriptionDefault
visibleYestrue = show on the dashboard (consumes a slot), false = hide.
siteUrlsYesRegistered property URLs, as returned by list_sites.

Output Schema

NameRequiredDescription
noteNo
slotsNo
updatedNo
visibleNo
unchangedNo
notRegisteredNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: showing consumes a dashboard slot and is refused at the plan limit, ClickHouse-synced properties are always shown and slot-free, hiding deletes no data and is reversible, and the response reports slot usage before/after. This is exactly the operational context an agent needs for a mutating toggle.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then layered with the scope rationale, slot mechanics, and reversibility. Every sentence carries information, though it is on the denser end for a two-parameter toggle.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return details are covered, and the description nonetheless previews that slot usage is reported. Scope, side effects, limits, and the sync exception are all present; nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but the description still adds meaning: that the 'visible' flag maps to slot consumption and that siteUrls are registered property URLs from list_sites. This reinforces rather than merely repeats the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (shows or hides) and resource (registered properties on the GSC Wizard dashboard), and anchors it to a known surface ('the same switch as the app's Dashboard Management page'). An agent can immediately tell this is a visibility toggle rather than a property-creation or site-management tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it 'to bring a newly added property into scope,' and implies a when-not via the plan-limit refusal. It does not name an alternative tool, but with this large sibling set there is no obvious competing visibility tool, so the guidance is clear without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_indexnow_urlsSubmit URLs to IndexNowAInspect

Pings IndexNow for the given URLs, telling participating search engines (Bing, Yandex, Seznam) that the pages have changed. The property needs an IndexNow API key and a published key file: check get_indexnow_settings first. If no key is set: 1) call update_indexnow_settings with generateKey: true; 2) publish the returned keyFileContent as a plain-text file at the returned keyFileUrl (the root of every host you submit URLs for); 3) call submit_indexnow_urls again. URLs are grouped by host before submission. Up to 100 URLs per call. Note that the usual 202 response means "accepted, key validation pending", not delivered: engines fetch the site key file afterwards and silently discard the batch if it is not reachable, so do not report a 202 as confirmed indexing.

NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

NameRequiredDescription
failedNo
actionsNo
batchIdNo
keyFileNo
messageNo
outcomeNo
siteUrlNo
attemptedNo
submittedNo
keySiteUrlNo
submissionsNo
historyLoggedNo
skippedOffPropertyNo
pendingKeyValidationNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds far more: a 100-URL cap, host-based grouping, and the crucial warning that a 202 means 'key validation pending', not delivered, with silent discards if the key file is unreachable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool does and the prerequisite, then the remediation steps and the 202 caveat. Dense and mostly waste-free, though the numbered recovery workflow makes it longer than a typical one-liner.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Combined with prerequisites, batching limits and response-semantics caveats, an agent has everything needed to call and interpret this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It clarifies the URLs array limit (100) and host grouping, but leaves siteUrl's exact semantics ambiguous — it is only implied via the keyFileUrl host discussion rather than defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (pings IndexNow with given URLs) and names the effect and recipients (Bing, Yandex, Seznam). It is clearly distinguishable from siblings like update_indexnow_settings, get_indexnow_settings and submit_sitemap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: check get_indexnow_settings first, and if no key exists, follow a numbered three-step remediation (generateKey, publish keyFileContent, resubmit). Names both sibling tools and the exact conditions that select them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_sitemapSubmit a sitemap to Search ConsoleA
Idempotent
Inspect

Submits (or re-submits) an existing sitemap URL to Google Search Console for a property, the same action as "Add a new sitemap" in the Sitemaps report. It does not create or host a sitemap: the file must already be published and reachable at the URL you pass; this only registers it with Google or asks Google to fetch it again after new content went live. Every sitemap URL must be on the property host or a subdomain of it. Up to 20 sitemaps per call. Submitting is idempotent and queues a download; it does not index anything by itself, and Google reports parse warnings/errors only after it has fetched the file, so a freshly submitted sitemap normally comes back pending. Requires a Google account connected with full Search Console access (a read-only connection is refused before anything is sent). If a rate limit or a permission refusal stops a batch after some sitemaps were accepted, the accepted ones are still reported and the rest are listed in notAttempted, with stopReason. Use list_sitemaps to see what is already submitted.

NameRequiredDescriptionDefault
siteUrlYes
sitemapUrlsYesAbsolute URLs of already-published sitemaps, e.g. ["https://example.com/sitemap_index.xml"]. Each must be on the property host or a subdomain of it. Max 20.

Output Schema

NameRequiredDescription
failedNo
actionsNo
messageNo
resultsNo
siteUrlNo
attemptedNo
submittedNo
stopReasonNo
notAttemptedNo
retryAfterSecondsNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: queueing a download rather than indexing, parse warnings only appearing after fetch, the property-host/subdomain constraint, 20-per-call cap, full-access auth requirement with read-only refused, and partial-batch failure reporting via notAttempted/stopReason. This is exactly the operational context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, mapping to the UI, and constraints in a logical order. It is somewhat dense and repeats the 'does not create/host' point twice in one sentence, but no sentence is genuinely wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description still covers the failure shape (accepted vs notAttempted with stopReason), auth requirements, rate limits, and idempotency. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 50% schema description coverage, the description should compensate for the undocumented siteUrl. It only implies siteUrl is the property ('for a property', 'the property host') without giving expected format, and its per-URL host/subdomain and max-20 notes largely restate the sitemapUrls schema description rather than adding new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (submits/re-submits) on a specific resource (an existing sitemap URL) for a property, and maps it to the exact UI action ('Add a new sitemap'). It clearly separates itself from neighbors like list_sitemaps and get_sitemap_performance, which an agent can distinguish without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions and exclusions: the file must already be published and reachable, this only registers it with Google or asks for a re-fetch after new content, and it does not create or host anything. It also routes the agent to a sibling ('Use list_sitemaps to see what is already submitted') for the read case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_annotationUpdate a chart annotationA
Destructive
Inspect

Edits a chart annotation the user owns: its date, label, description, category or colour. Only the fields you pass change. Scope cannot be changed (an account-wide annotation cannot be moved onto a property or vice versa); delete it and create a new one instead. Platform-scoped annotations are system events and cannot be edited via this tool.

NameRequiredDescriptionDefault
colorNo
labelNo
categoryNo
eventDateNoThe date the event occurred, as YYYY-MM-DD (e.g. 2026-06-08).
descriptionNo
annotationIdYes

Output Schema

NameRequiredDescription
annotationNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful behavior beyond the annotations: partial-update semantics ('Only the fields you pass change'), an ownership requirement, and two hard constraints (immutable scope, uneditable platform-scoped events). The destructiveHint already flags risk, but the description usefully specifies what is and isn't mutable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with what is edited, then the partial-update rule, then the two constraints. No filler and each sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with annotations and an output schema, the description covers mutation semantics, ownership, and immutability constraints well. Return values are handled by the output schema, so the only minor gap is the required annotationId not being explicitly addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description carries much of the burden, and it does name all five optional editable fields (date, label, description, category, colour) mapping to eventDate/label/description/category/color. However it adds no format or syntax detail beyond the schema's own property names, and annotationId is never discussed, so it only partly compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Edits a chart annotation') and enumerates the editable fields (date, label, description, category, colour). It also distinguishes itself from siblings by naming the delete+create route for scope changes, so an agent can place it against create_annotation/delete_annotation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context (editing an owned annotation) and explicit exclusions with an alternative: scope cannot change, 'delete it and create a new one instead', and platform-scoped system events cannot be edited. It stops short of a general when-to-use vs create_annotation routing statement, but the alternatives for the edge cases are concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_content_groupUpdate a content groupA
Destructive
Inspect

Edits an existing content group: its name, description, color, or matching rules. Only the fields you pass change; omit a field to leave it untouched. Passing rules REPLACES the whole rule list (rules have no stable ids across edits), so read the current rules with list_content_groups first if you mean to add one. Changing rules reassigns pages immediately in every report that uses the group; nothing is recomputed or stored, so the next get_content_group_performance call reflects the edit. A regex rule that cannot compile is rejected; one that is valid but unsupported by the warehouse or skipped as ReDoS-prone is accepted and reported in ruleWarnings. Relay those, since a skipped pattern matches no pages at all.

NameRequiredDescriptionDefault
nameNo
colorNo
rulesNoReplaces the entire rule list. Same { type, value } shape as create_content_group.
groupIdYes
descriptionNo

Output Schema

NameRequiredDescription
groupNo
ruleWarningsNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, and the description earns that: it discloses that `rules` REPLACES the entire list, that changing rules reassigns pages immediately in every report, that nothing is recomputed or stored, and how uncompilable vs. skipped/ReDoS-prone regexes are treated and surfaced via `ruleWarnings`. That is deep behavioral context well beyond the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then patch semantics, then the destructive rules-replacement warning and regex caveats. Four dense sentences with no filler; slightly long, but each sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with an output schema already covering return values, the description supplies everything an agent needs: which fields are mutable, patch vs. replace semantics, the irreversible reassignment consequence, and the warning-relay obligation. No material gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, so the description must carry weight, and it does: it explains patch semantics for all mutable fields and gives rich semantics for `rules` (full replacement, no stable ids, replacement shape) and for regex validity outcomes. It adds little for `groupId` or the color format, which remain inferable only from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Edits an existing content group') and immediately enumerates the mutable fields (name, description, color, matching rules). This is distinguishable from siblings list_content_groups, create_content_group, and delete_content_group without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit partial-update guidance ('Only the fields you pass change; omit a field to leave it untouched') and names an alternative tool plus the condition that selects it ('read the current rules with list_content_groups first if you mean to add one'). It stops short of explicit when-not-to-use or prerequisites, so it is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_indexnow_settingsSet the IndexNow API keyA
Destructive
Inspect

Sets, generates, rotates or clears the IndexNow API key for a property. The key is what search engines use to verify submissions from submit_indexnow_urls. To set IndexNow up, pass generateKey: true: a valid key is created and returned with keyFileUrl and keyFileContent. IMPORTANT: the site owner must then publish keyFileContent as a plain-text file at keyFileUrl (at the root of every host whose URLs will be submitted), or every submission is discarded. generateKey refuses to replace an existing key; to rotate, pass clear: true first. You can also pass your own indexnowApiKey (8-128 letters, digits and hyphens), for example one whose key file the site already publishes: the file is checked right after saving and keyFileVerified reports the result (true = ready to submit). Pass clear: true to remove the key, which disables IndexNow submissions for the property. Reading the key back later (get_indexnow_settings) only ever returns it masked.

NameRequiredDescriptionDefault
clearNoRemove the stored key instead of setting one. Disables IndexNow submissions.
siteUrlYes
generateKeyNoCreate a new valid key and return the key file to publish. Only when the property has no key yet; clear the old key first to rotate.
indexnowApiKeyNoThe new key. Omit when using generateKey or clear.

Output Schema

NameRequiredDescription
clearedNo
siteUrlNo
nextStepNo
generatedNo
keyFileUrlNo
keyFileUrlsNo
keyFileErrorNo
keyFileContentNo
keyFileVerifiedNo
indexnowApiKeySetNo
indexnowApiKeyMaskedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructive/open-world/non-readonly; the description adds the real operational consequences: submissions are discarded unless keyFileContent is published at keyFileUrl on every host, clearing disables submissions for the property, generateKey will not overwrite, the key file is checked on save with keyFileVerified reporting readiness, and reads are always masked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and the core generateKey workflow, then the publish requirement in caps, then edge cases. It is dense and slightly long, but every sentence carries actionable information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the full lifecycle (set/generate/rotate/clear), the required follow-up action, verification feedback, and the read path, and it names the return fields. An output schema exists, so return-value exposition is not owed here; nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the description enriches the remaining ambiguity: it explains what generateKey returns (keyFileUrl, keyFileContent), what clear does to submissions, and frames indexnowApiKey as a key whose file the site already publishes (with verification). The 8-128 alphanumeric/hyphen constraint is already in the schema, so the description does not need to restate it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs (sets, generates, rotates, clears) and the exact resource (the IndexNow API key for a property), which immediately distinguishes it from get_indexnow_settings (read) and submit_indexnow_urls (submission). An agent can place it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit branching guidance: use generateKey:true for first-time setup, generateKey refuses to replace an existing key so pass clear:true first to rotate, pass clear:true to remove, or supply your own indexnowApiKey. It also routes reads to get_indexnow_settings, so when/when-not/alternative are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_saved_filterUpdate a saved filterA
Destructive
Inspect

Renames a saved filter preset and/or replaces its filter rows. Only the fields you pass change. filters is the list of filter rows (dimension / operator / value), in the same shape list_saved_filters returns, and is REPLACED wholesale, not merged: read the current rows with list_saved_filters and pass them back with your edits applied. Passing filters without filterLogic resets the preset to AND, so pass both when the preset used OR. The property's owner or anyone with full access to it may edit any preset on it.

NameRequiredDescriptionDefault
nameNo
filtersNoReplaces the stored filter rows. Omit to keep the current ones.
filterIdYes
filterLogicNoOnly read when `filters` is passed; the two are stored together.

Output Schema

NameRequiredDescription
filterNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation by disclosing the specific destructive mechanism: `filters` is REPLACED wholesale, not merged, and omitting `filterLogic` silently resets logic to AND. It also states the authorization requirement (owner or anyone with full access to the property), which annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then orders the sentences by risk: replacement semantics, the list_saved_filters round-trip, the filterLogic reset, and permissions. No sentence is filler; each adds a constraint or side effect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present there is no need to describe return values, and the destructive annotation is already covered. What remains — merge semantics, the AND reset side effect, and edit permissions — is fully addressed, leaving no gap an agent would need to guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, but the description compensates on the highest-risk parameters: it defines `filters` as dimension/operator/value rows matching list_saved_filters' output shape and explains filterLogic's conditional read/reset behavior. `name` and `filterId` are left to inference from the schema, which is acceptable given they are self-evident, but keeps this short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Renames a saved filter preset and/or replaces its filter rows') and immediately bounds the scope to two mutable aspects. An agent can distinguish it from create_saved_filter, delete_saved_filter, and list_saved_filters without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit workflow: read current rows with list_saved_filters, apply edits, pass the full list back. It also names the conditional trap ('passing `filters` without `filterLogic` resets the preset to AND, so pass both when the preset used OR'), which is exactly the when/when-not guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_siteUpdate a propertyA
Destructive
Inspect

Updates the GSC Wizard metadata for a property: tags, branded keywords, sitemap URL list, and how fast GSC Wizard may crawl the site. Only fields you pass are updated; omit a field to leave it unchanged. Pass null for a crawl-rate field to clear the override and go back to the app default. On a property shared with you, FULL access is needed (as in the property settings of the web app); READ_ONLY access is refused.

NameRequiredDescriptionDefault
tagsNo
siteUrlYes
sitemapUrlsNo
brandedKeywordsNo
crawlMinDelayMsNoMinimum milliseconds between crawl batches (0-60000). Composes with robots.txt Crawl-delay; the longer wait wins. null = app default.
crawlMaxConcurrencyNoPages GSC Wizard may fetch from this site at once (1-10). Lower it if the site answers 429 during an audit. null = app default.

Output Schema

NameRequiredDescription
siteNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=true, and closed-world, but the description adds real value beyond them: partial-update semantics, null-clears-override behavior, and an explicit authorization requirement that READ_ONLY access is refused. It still does not explain what the destructive flag means in practice (e.g., whether passing an array replaces the existing list).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose lands in the first clause, followed by partial-update rules, the null rule, and then the permission caveat ordered by likely relevance. Every sentence carries information, though the null-override sentence duplicates what crawlMinDelayMs and crawlMaxConcurrency already state in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the mutation's safety profile is covered by annotations. Partial-update, null semantics, and permission requirements are all present. The remaining omission is collection-field semantics (whether arrays replace existing values) for a tool flagged destructive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: the two crawl parameters are documented in the schema, while tags, siteUrl, sitemapUrls, and brandedKeywords are bare. The description compensates only by restating those field names in prose and adding omit/null semantics that the schema largely already covers, leaving replace-vs-merge behavior and per-field limits unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Updates') and resource scope ('the GSC Wizard metadata for a property'), then enumerates the exact editable field groups: tags, branded keywords, sitemap URL list, and crawl speed. This field set is unique among siblings such as add_site, delete_site, and update_indexnow_settings, so an agent can route to it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operating conditions: only supplied fields change, omitted fields stay, and null clears a crawl-rate override. It also states the access precondition for shared properties (FULL required, READ_ONLY refused). It never names an alternative tool (e.g., create_gsc_property for creating) or says when not to use it, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_topic_clusterUpdate a topic clusterA
Destructive
Inspect

Edits an existing topic cluster's name or keyword list. Only the fields you pass change. keywords REPLACES the whole list by default; pass mode "add" or "remove" to merge into or subtract from the current keywords instead, which is what you usually want when extending a cluster. A keyword is matched as a case-insensitive substring unless it is wrapped in slashes (/seo ?tools/), which makes it a regex. Read the current list with list_topic_clusters first when replacing.

NameRequiredDescriptionDefault
modeNoHow `keywords` is applied: "replace" (default) swaps the list, "add" merges new keywords in (deduplicated, case-insensitively), "remove" deletes the listed ones.replace
nameNo
keywordsNo
clusterIdYes

Output Schema

NameRequiredDescription
clusterNo
keywordsAfterNo
keywordsBeforeNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so safety is covered. The description goes further by disclosing that keywords REPLACES the whole list by default (a destructive nuance), that add/remove merge or subtract, and that matching is case-insensitive substring unless slash-wrapped for regex -- real behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then progressively layers mode behavior, keyword matching rules, and the replace-prerequisite. Four sentences, each carrying distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. For a 4-parameter mutation tool, the description covers purpose, partial-update semantics, mode selection, matching rules, and the read-before-replace prerequisite -- nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (just mode), so the description must compensate, and it does: it explains replace/add/remove semantics for keywords/name and the substring-vs-regex matching rule that appears nowhere in the schema. clusterId and the name length limits remain implied, but the high-value ambiguity (replace vs merge) is fully resolved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Edits an existing topic cluster's name or keyword list') and clarifies the partial-update scope ('Only the fields you pass change'). An agent can immediately distinguish this from create_topic_cluster, delete_topic_cluster, and update_content_group.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes mode selection: 'pass mode "add" or "remove" ... which is what you usually want when extending a cluster,' and names the prerequisite alternative 'Read the current list with list_topic_clusters first when replacing.' Clear context and a named sibling, though it stops short of stating cases where the tool should not be used at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 83 tool updates
    • Changedanalyze_cannibalization4 fields changed
      • removedInput schema / properties / minImpressions / default
        Removed value: -10
      • addedInput schema / properties / minImpressions / description
        Added value: +"Minimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given."
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / minImpressionsAutoRelaxed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "from": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "to": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedanalyze_ctr_curve4 fields changed
      • removedInput schema / properties / minImpressions / default
        Removed value: -10
      • addedInput schema / properties / minImpressions / description
        Added value: +"Minimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given."
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / minImpressionsAutoRelaxed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "from": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "to": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedanalyze_query_shapes1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedaudit_onpage_seo1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedbreakdown_by_path1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedcompare_migration1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/mode",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changeddetect_anomalies11 fields changed
      • addedInput schema / properties / minImpressions
        Added value: +{
        +  "description": "ctr and position only (ignored for clicks and impressions): a day with fewer impressions is kept but marked lowVolume, severity capped at low. Omit for the automatic floor, the larger of 10 and 20% of the median daily impressions; 0 turns it off. The value used is returned as minImpressions.",
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / anomalies / items / properties / clicks
        Added value: +{
        +  "$ref": "#/properties/sensitivity"
        +}
      • addedOutput schema / properties / anomalies / items / properties / direction / description
        Added value: +"Numeric: actual above (\"up\") or below (\"down\") expected. For position, \"down\" is a better ranking."
      • addedOutput schema / properties / anomalies / items / properties / impressions
        Added value: +{
        +  "$ref": "#/properties/sensitivity"
        +}
      • addedOutput schema / properties / anomalies / items / properties / lowVolume
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / anomalies / items / properties / outcome
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "\"improved\" or \"worsened\": the good-or-bad reading of direction for this metric."
        +}
      • addedOutput schema / properties / baselineContaminated
        Added value: +{
        +  "$ref": "#/properties/anomalies/items/properties/lowVolume"
        +}
      • addedOutput schema / properties / episodes
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "direction": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "meanActual": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "meanExpected": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "ongoing": {
        +        "$ref": "#/properties/anomalies/items/properties/lowVolume"
        +      },
        +      "outcome": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "peakSeverity": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "possibleLevelShift": {
        +        "$ref": "#/properties/anomalies/items/properties/lowVolume"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / minImpressions
        Added value: +{
        +  "$ref": "#/properties/sensitivity"
        +}
      • changedOutput schema / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "critical": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "high": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "info": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "largestDeviation": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "low": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "medium": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "mostAffectedMetric": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "total": {
        -        "$ref": "#/properties/sensitivity"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "critical": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "high": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "info": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "largestDeviation": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "low": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "lowVolume": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "medium": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "mostAffectedMetric": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "total": {
        +        "$ref": "#/properties/sensitivity"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changeddetect_change_points12 fields changed
      • changedInput schema / properties / sensitivity / description
        Previous value: -"Mean-shift threshold in std-devs: lower = more sensitive (more change points). Default 2."New value: +"A break is kept when its shift exceeds sensitivity + 1.6 standard errors of the day-to-day noise inside the segments: lower = more sensitive (more change points). Default 2."
      • addedOutput schema / properties / changePoints / items / properties / afterMean / description
        Added value: +"Daily mean of the whole segment from the break on, rounded; segmentAfter dates it."
      • addedOutput schema / properties / changePoints / items / properties / beforeMean / description
        Added value: +"Daily mean of the whole segment before the break, rounded; segmentBefore dates it."
      • addedOutput schema / properties / changePoints / items / properties / rampDays
        Added value: +{
        +  "$ref": "#/properties/sensitivity",
        +  "description": "Gradual only: length in days of the best-fitting transition."
        +}
      • addedOutput schema / properties / changePoints / items / properties / rampEndDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Gradual only: last day of that transition."
        +}
      • addedOutput schema / properties / changePoints / items / properties / rampStartDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Gradual only: first day of that transition."
        +}
      • addedOutput schema / properties / changePoints / items / properties / score
        Added value: +{
        +  "$ref": "#/properties/sensitivity",
        +  "description": "Strength of the break in sensitivity units (its shift in standard errors less 1.6, capped at 99): kept because it exceeds the sensitivity."
        +}
      • addedOutput schema / properties / changePoints / items / properties / shape
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "step",
        +        "gradual",
        +        "ambiguous"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How the level moved: step (at once), gradual (over the ramp dated by rampStartDate to rampEndDate; date is near its middle) or ambiguous (the data cannot tell at once from over several weeks, common on small sites). Word the change accordingly."
        +}
      • removedOutput schema / properties / changePoints / items / properties / windowDays
        Removed value: -{
        -  "$ref": "#/properties/sensitivity",
        -  "description": "Days in each of the beforeMean / afterMean windows, not the whole period."
        -}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • changedOutput schema / properties / strongestShift / description
        Previous value: -"Empty result only: the strongest shift; rerunning with sensitivity stdDevs reports it. Absent when it peaks on the first or last day the detector tests, where it cannot be dated; emptyBecause says so."New value: +"Always present. On an empty result, the strongest split: stdDevs is its score in sensitivity units (the name predates the 2026-10 method), and a rerun with sensitivity stdDevs reports it when nextStep offers that rerun. Null otherwise, with strongestShiftReason saying why."
      • addedOutput schema / properties / strongestShiftReason
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "no_data",
        +        "too_short",
        +        "constant",
        +        "change_points_found",
        +        "edge_start",
        +        "edge_end",
        +        "trend",
        +        "small_shift"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Present exactly when strongestShift is null: no_data (no rows), too_short (under 14 calendar days), constant (every day equal), change_points_found (the result is not empty), edge_start / edge_end (the strongest split sits on the first or last day a break can fall on, so it cannot be dated), trend (a straight line explains it) or small_shift (under 10%)."
        +}
    • Changedfind_decaying_content14 fields changed
      • addedInput schema / properties / minBaselineClicks
        Added value: +{
        +  "default": 5,
        +  "description": "Minimum baseline clicks per key (default 5). Decliners under it are left out and counted in `belowClickFloor`; 1 lists every decliner.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedInput schema / properties / minImpressions / default
        Removed value: -100
      • addedInput schema / properties / minImpressions / description
        Added value: +"Minimum baseline impressions per key (default 100). When left out and nothing qualifies, the tool retries once at 10 and reports `minImpressionsAutoRelaxed`; a value you pass, including 100, is always applied as given."
      • addedInput schema / properties / sortBy
        Added value: +{
        +  "default": "clicksLost",
        +  "description": "Row order: clicksLost (largest absolute loss first, the default) or clickChangePct (most negative first).",
        +  "enum": [
        +    "clicksLost",
        +    "clickChangePct"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / belowClickFloor
        Added value: +{
        +  "$ref": "#/properties/recent/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / decaying / items / properties / clicksLost
        Added value: +{
        +  "$ref": "#/properties/recent/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / decaying / items / properties / lowConfidence
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / decaying / items / properties / pattern
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / decaying / items / properties / recentIsUpperBound / $ref
        Added value: +"#/properties/decaying/items/properties/lowConfidence"
      • removedOutput schema / properties / decaying / items / properties / recentIsUpperBound / type
        Removed value: -[
        -  "boolean",
        -  "null"
        -]
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / minBaselineClicks
        Added value: +{
        +  "$ref": "#/properties/recent/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / minImpressionsAutoRelaxed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "from": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        },
        +        "to": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / truncated / $ref
        Previous value: -"#/properties/decaying/items/properties/recentIsUpperBound"New value: +"#/properties/decaying/items/properties/lowConfidence"
    • Changedfind_page_poaching_opportunities5 fields changed
      • removedInput schema / properties / minImpressions / default
        Removed value: -10
      • addedInput schema / properties / minImpressions / description
        Added value: +"Minimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given."
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / minImpressions
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / minImpressionsAutoRelaxed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "from": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "to": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedforecast_traffic1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_account_info1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/user/properties/id",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_bing_crawl_issues8 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / issues / items / properties / issues / $ref
        Added value: +"#/properties/partialDays"
      • removedOutput schema / properties / issues / items / properties / issues / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_crawl_stats6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_feeds6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_keyword_stats6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/keyword",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/keyword",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
    • Changedget_bing_link_counts6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_page_queries6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_page_stats6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_query_page_stats8 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / notes / $ref
        Added value: +"#/properties/partialDays"
      • removedOutput schema / properties / notes / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_query_page_trend6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_query_stats6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_traffic_stats6 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_url_submission_quota5 fields changed
      • addedOutput schema / properties / completeness
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / dateBasis
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / latestDataDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Newest date with a row in everything Bing sent for this call, before the window filter."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Requested days among Bing's newest (provisional) or after latestDataDate (missing, not zero), up to today."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_branded_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_content_group_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_core_web_vitals1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_cross_site_summary1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_decay_overview1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_feed_audit_results1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_filter_options1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_ga4_ecommerce1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_ga4_error_pages1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_ga4_key_events1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_gmc_account_health1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_gmc_best_sellers1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_gmc_competitors1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_gmc_data_sources1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_gmc_pricing_insights1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_gmc_title_hygiene1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_indexing_tracker_report1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_longtail_clusters1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_merchant_listings_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_migration_health1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_organic_shopping_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_page_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_position_distribution1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_product_listing_status1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_query_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_query_shape_trend1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_sitemap_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_tag_group_view1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_topic_cluster_performance1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_yandex_indexing_history1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_yandex_query_stats1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedget_yandex_site_summary1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_algo_updates3 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "description": "Name of the top-level field that holds the rows sortedBy describes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sortedBy / $ref
        Added value: +"#/properties/listKey"
      • removedOutput schema / properties / sortedBy / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_annotations3 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "description": "Name of the top-level field that holds the rows sortedBy describes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sortedBy / $ref
        Added value: +"#/properties/listKey"
      • removedOutput schema / properties / sortedBy / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_bing_sites1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_content_groups1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_experiments1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_ga4_custom_dimensions1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_ga4_properties1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/hint",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_gmc_accounts1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/reason",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_indexnow_submissions1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_migration_redirects3 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "description": "Name of the top-level field that holds the rows sortedBy describes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sortedBy / $ref
        Added value: +"#/properties/listKey"
      • removedOutput schema / properties / sortedBy / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_migrations1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_report_clients3 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "description": "Name of the top-level field that holds the rows sortedBy describes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sortedBy / $ref
        Added value: +"#/properties/listKey"
      • removedOutput schema / properties / sortedBy / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_saved_filters3 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "description": "Name of the top-level field that holds the rows sortedBy describes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sortedBy / $ref
        Added value: +"#/properties/listKey"
      • removedOutput schema / properties / sortedBy / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_shared_reports3 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "description": "Name of the top-level field that holds the rows sortedBy describes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sortedBy / $ref
        Added value: +"#/properties/listKey"
      • removedOutput schema / properties / sortedBy / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_sitemaps4 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • removedOutput schema / properties / sitemaps / items / properties / contents / $ref
        Removed value: -"#/properties/sitemaps/items/properties/warnings"
      • addedOutput schema / properties / sitemaps / items / properties / contents / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "indexed": {
        +          "type": "null"
        +        },
        +        "submitted": {
        +          "$ref": "#/properties/sitemaps/items/properties/warnings"
        +        },
        +        "type": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_tags3 fields changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "description": "Name of the top-level field that holds the rows sortedBy describes.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / sortedBy / $ref
        Added value: +"#/properties/listKey"
      • removedOutput schema / properties / sortedBy / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_topic_clusters1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_tracked_urls1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_url_inspections1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedlist_yandex_sites1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/limitations/items/anyOf/1",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedquery_countries1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedquery_devices1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedquery_ga4_custom_dimensions1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedquery_ga4_report1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedquery_gmc_report1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedquery_search_analytics1 field changed
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
    • Changedscore_opportunities4 fields changed
      • removedInput schema / properties / minImpressions / default
        Removed value: -10
      • addedInput schema / properties / minImpressions / description
        Added value: +"Minimum impressions per query (default 10). When left out and nothing passes it, the tool retries once at 1 and reports `minImpressionsAutoRelaxed`; a value you pass, including 10, is always applied as given."
      • addedOutput schema / properties / listKey
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Name of the top-level field that holds the rows sortedBy describes."
        +}
      • addedOutput schema / properties / minImpressionsAutoRelaxed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "from": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "to": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  2. 5 tool updates
    • Changedget_ga4_ecommerce2 fields changed
      • addedInput schema / properties / filters / properties / firstUserChannel
        Added value: +{
        +  "description": "GA4 firstUserDefaultChannelGroup names, matched exactly (any of): the channel that first acquired the user, as in GA4's User acquisition report, rather than the session's own channel. E.g. [\"Organic Search\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / firstUserSourceMedium
        Added value: +{
        +  "description": "GA4 firstUserSourceMedium values, matched exactly (any of): the source / medium that first acquired the user (User acquisition report), e.g. [\"google / organic\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
    • Changedget_ga4_key_events2 fields changed
      • addedInput schema / properties / filters / properties / firstUserChannel
        Added value: +{
        +  "description": "GA4 firstUserDefaultChannelGroup names, matched exactly (any of): the channel that first acquired the user, as in GA4's User acquisition report, rather than the session's own channel. E.g. [\"Organic Search\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / firstUserSourceMedium
        Added value: +{
        +  "description": "GA4 firstUserSourceMedium values, matched exactly (any of): the source / medium that first acquired the user (User acquisition report), e.g. [\"google / organic\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
    • Changedget_ga4_overview2 fields changed
      • addedInput schema / properties / filters / properties / firstUserChannel
        Added value: +{
        +  "description": "GA4 firstUserDefaultChannelGroup names, matched exactly (any of): the channel that first acquired the user, as in GA4's User acquisition report, rather than the session's own channel. E.g. [\"Organic Search\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / firstUserSourceMedium
        Added value: +{
        +  "description": "GA4 firstUserSourceMedium values, matched exactly (any of): the source / medium that first acquired the user (User acquisition report), e.g. [\"google / organic\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
    • Changedquery_ga4_custom_dimensions2 fields changed
      • addedInput schema / properties / filters / properties / firstUserChannel
        Added value: +{
        +  "description": "GA4 firstUserDefaultChannelGroup names, matched exactly (any of): the channel that first acquired the user, as in GA4's User acquisition report, rather than the session's own channel. E.g. [\"Organic Search\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / firstUserSourceMedium
        Added value: +{
        +  "description": "GA4 firstUserSourceMedium values, matched exactly (any of): the source / medium that first acquired the user (User acquisition report), e.g. [\"google / organic\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
    • Changedquery_ga4_report3 fields changed
      • changedInput schema / properties / dimension / enum
        Previous value: -[
        -  "channel",
        -  "sourceMedium",
        -  "page",
        -  "landingPage",
        -  "country",
        -  "device",
        -  "event",
        -  "date",
        -  "hostName"
        -]New value: +[
        +  "channel",
        +  "sourceMedium",
        +  "page",
        +  "landingPage",
        +  "country",
        +  "device",
        +  "event",
        +  "date",
        +  "hostName",
        +  "firstUserChannel",
        +  "firstUserSourceMedium"
        +]
      • addedInput schema / properties / filters / properties / firstUserChannel
        Added value: +{
        +  "description": "GA4 firstUserDefaultChannelGroup names, matched exactly (any of): the channel that first acquired the user, as in GA4's User acquisition report, rather than the session's own channel. E.g. [\"Organic Search\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedInput schema / properties / filters / properties / firstUserSourceMedium
        Added value: +{
        +  "description": "GA4 firstUserSourceMedium values, matched exactly (any of): the source / medium that first acquired the user (User acquisition report), e.g. [\"google / organic\"].",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
  3. 25 tool updates
    • Changedanalyze_cannibalization1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedanalyze_ctr_curve1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedanalyze_query_shapes1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedanalyze_sampling_impact1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedbreakdown_by_path1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedfind_decaying_content1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedfind_page_poaching_opportunities1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_branded_performance1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_content_group_performance1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_decay_overview1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_page_performance1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_position_distribution1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_query_performance1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_query_shape_trend1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_ranking_changes1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_site_summary1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_sitemap_performance1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_tag_group_view1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedget_topic_cluster_performance1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedquery_countries1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedquery_devices1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedquery_search_analytics1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedquery_top_pages1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedquery_top_queries1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
    • Changedscore_opportunities1 field changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."New value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty, and no position: it reads null, not 0."
  4. 26 tool updates
    • Changedanalyze_cannibalization2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedanalyze_ctr_curve2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedanalyze_query_shapes2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedanalyze_sampling_impact2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedbreakdown_by_path2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedfind_decaying_content2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedfind_page_poaching_opportunities2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_branded_performance2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_content_group_performance2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news",
        -  "discover"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_cross_site_summary2 fields changed
      • changedInput schema / properties / searchType / description
        Previous value: -"Search type of the headline totals and the per-site comparison."New value: +"Search type of the headline totals and the per-site comparison; `all` sums web, image, video, news and discover, like the app's \"All\" filter."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news",
        -  "discover"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "all"
        +]
    • Changedget_decay_overview2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_page_performance1 field changed
      • addedInput schema / properties / searchType
        Added value: +{
        +  "default": "web",
        +  "description": "Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty.",
        +  "enum": [
        +    "web",
        +    "image",
        +    "video",
        +    "news",
        +    "discover",
        +    "googleNews",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedget_position_distribution2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_query_performance1 field changed
      • addedInput schema / properties / searchType
        Added value: +{
        +  "default": "web",
        +  "description": "Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty.",
        +  "enum": [
        +    "web",
        +    "image",
        +    "video",
        +    "news",
        +    "discover",
        +    "googleNews",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedget_query_shape_trend2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_ranking_changes2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_site_summary1 field changed
      • addedInput schema / properties / searchType
        Added value: +{
        +  "default": "web",
        +  "description": "Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty.",
        +  "enum": [
        +    "web",
        +    "image",
        +    "video",
        +    "news",
        +    "discover",
        +    "googleNews",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedget_sitemap_performance2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_tag_group_view2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news",
        -  "discover"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedget_topic_cluster_performance2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedquery_countries1 field changed
      • addedInput schema / properties / searchType
        Added value: +{
        +  "default": "web",
        +  "description": "Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty.",
        +  "enum": [
        +    "web",
        +    "image",
        +    "video",
        +    "news",
        +    "discover",
        +    "googleNews",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedquery_devices1 field changed
      • addedInput schema / properties / searchType
        Added value: +{
        +  "default": "web",
        +  "description": "Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty.",
        +  "enum": [
        +    "web",
        +    "image",
        +    "video",
        +    "news",
        +    "discover",
        +    "googleNews",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedquery_search_analytics2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news",
        -  "discover",
        -  "googleNews"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedquery_top_pages2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news",
        -  "discover"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedquery_top_queries2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
    • Changedscore_opportunities2 fields changed
      • addedInput schema / properties / searchType / description
        Added value: +"Search type: web (default), image, video, news (the News tab), discover, googleNews (news.google.com), or all (web + image + video + news + discover combined, position impression-weighted, like the app's \"All\" filter). Discover and googleNews carry no query dimension, so query-level results for them are empty."
      • changedInput schema / properties / searchType / enum
        Previous value: -[
        -  "web",
        -  "image",
        -  "video",
        -  "news"
        -]New value: +[
        +  "web",
        +  "image",
        +  "video",
        +  "news",
        +  "discover",
        +  "googleNews",
        +  "all"
        +]
  5. 3 tool updates
    • Changedlist_experiments7 fields changed
      • addedInput schema / properties / experimentId
        Added value: +{
        +  "description": "Return only this experiment (active or archived). Required with includeUrls.",
        +  "type": "string"
        +}
      • addedInput schema / properties / includeUrls
        Added value: +{
        +  "default": false,
        +  "description": "Add the experiment's saved URLs as members [{url, group}], in saved order, 2000 per call.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / memberOffset
        Added value: +{
        +  "default": 0,
        +  "description": "With includeUrls: index of the first member to return; pass the previous nextMemberOffset.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / experiments / items / properties / memberOffset
        Added value: +{
        +  "$ref": "#/properties/count"
        +}
      • addedOutput schema / properties / experiments / items / properties / memberTotal
        Added value: +{
        +  "$ref": "#/properties/count"
        +}
      • addedOutput schema / properties / experiments / items / properties / members
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "group": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "url": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / experiments / items / properties / nextMemberOffset
        Added value: +{
        +  "$ref": "#/properties/count"
        +}
    • Changedlist_shared_reports1 field changed
      • addedOutput schema / properties / reports / items / properties / sharedWith / items / properties / pendingConfirmation
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedmanage_report_access2 fields changed
      • addedOutput schema / properties / ownerConfirmationEmailSent
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / pendingConfirmation
        Added value: +{
        +  "$ref": "#/properties/granted"
        +}
  6. 2 tool updates
    • Changedget_feed_audit_results4 fields changed
      • addedInput schema / properties / market
        Added value: +{
        +  "description": "Optional market key from run.markets (\"<contentLanguage>~<feedLabel>\", e.g. \"en~GB\" or \"en~AED_121185698126\"). Narrows `checks` to that market's own per-check counts and adds them to its run.perMarket entry. Omit for the run's overall checks.",
        +  "maxLength": 80,
        +  "pattern": "^[A-Za-z]{0,3}(?:-[A-Za-z0-9]{1,8})?~[A-Za-z0-9_-]{1,64}$",
        +  "type": "string"
        +}
      • changedOutput schema / properties / filters / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "checkKey": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "limit": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "severity": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "checkKey": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "limit": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "market": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "severity": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / marketNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / run / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "bySeverity": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": true,
        -            "properties": {
        -              "critical": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "info": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "warning": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "completedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "coverage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "crawlBlocked": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "createdAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "error": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offersAudited": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "offersTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pageScored": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "pagesFailed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesFetched": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "perCheck": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "applicable": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                },
        -                "failed": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "runDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "runId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "score": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreFeed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scorePage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreVersion": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "status": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "bySeverity": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "critical": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "info": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "warning": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "completedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "coverage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "crawlBlocked": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "createdAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "error": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "markets": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "contentLanguage": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "country": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "currency": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "feedLabel": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "home": {
        +                  "$ref": "#/properties/notConfigured"
        +                },
        +                "key": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "offersAudited": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "offersTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pageScored": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "pagesFailed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesFetched": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "perCheck": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "applicable": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "failed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "perMarket": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "bySeverity": {
        +                  "$ref": "#/properties/run/anyOf/0/properties/bySeverity"
        +                },
        +                "home": {
        +                  "$ref": "#/properties/notConfigured"
        +                },
        +                "key": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "offersAudited": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "perCheck": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": {
        +                        "additionalProperties": true,
        +                        "properties": {
        +                          "applicable": {
        +                            "$ref": "#/properties/range/anyOf/0/properties/days"
        +                          },
        +                          "failed": {
        +                            "$ref": "#/properties/range/anyOf/0/properties/days"
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "score": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "scoreFeed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "scorePage": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "runDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "runId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "score": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreFeed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scorePage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreVersion": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "status": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedrun_feed_audit1 field changed
      • changedOutput schema / properties / run / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "bySeverity": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": true,
        -            "properties": {
        -              "critical": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "info": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "warning": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "completedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "coverage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "crawlBlocked": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "createdAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "error": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offersAudited": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "offersTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pageScored": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "pagesFailed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesFetched": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "perCheck": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "applicable": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                },
        -                "failed": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "runDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "runId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "score": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreFeed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scorePage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreVersion": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "status": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "bySeverity": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "critical": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "info": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "warning": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "completedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "coverage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "crawlBlocked": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "createdAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "error": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "markets": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "contentLanguage": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "country": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "currency": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "feedLabel": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "home": {
        +                  "$ref": "#/properties/notConfigured"
        +                },
        +                "key": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "offersAudited": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "offersTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pageScored": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "pagesFailed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesFetched": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "perCheck": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "applicable": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "failed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "perMarket": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "bySeverity": {
        +                  "$ref": "#/properties/run/anyOf/0/properties/bySeverity"
        +                },
        +                "home": {
        +                  "$ref": "#/properties/notConfigured"
        +                },
        +                "key": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "offersAudited": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "perCheck": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": {
        +                        "additionalProperties": true,
        +                        "properties": {
        +                          "applicable": {
        +                            "$ref": "#/properties/range/anyOf/0/properties/days"
        +                          },
        +                          "failed": {
        +                            "$ref": "#/properties/range/anyOf/0/properties/days"
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "score": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "scoreFeed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "scorePage": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "runDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "runId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "score": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreFeed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scorePage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreVersion": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "status": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  7. 131 tool updates
    • Changedadd_migration_redirects1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedadd_site2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / site / additionalProperties
        Previous value: -falseNew value: +true
    • Changedadd_tracked_urls1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedanalyze_cannibalization15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / cannibalized / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / cannibalized / items / properties / pages / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedanalyze_ctr_curve15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / buckets / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / sources / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedanalyze_query_shapes22 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / aiShaped / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "queries": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "shareOfImpressionsPct": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "shareOfQueriesPct": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "zeroClickQueries": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "queries": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "shareOfImpressionsPct": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "shareOfQueriesPct": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "zeroClickQueries": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / buckets / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / buckets / items / properties / bucketOrder
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • changedOutput schema / properties / buckets / items / properties / examples / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • addedOutput schema / properties / dataMaturity
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "dateBasis": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "firstIncompleteDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "probe": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dataState": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "endDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "searchType": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "startDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "settledThrough": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "source": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "warehouseCutoff": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/buckets/items/properties/examples/items/properties/signals"
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / settledThrough
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "queries": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "queries": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedanalyze_sampling_impact9 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / pageSampling / $ref
        Added value: +"#/properties/querySampling"
      • removedOutput schema / properties / pageSampling / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "missingClicksPercent": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "missingImpressionsPercent": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "rowCount": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / querySampling / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "missingClicksPercent": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "missingImpressionsPercent": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "rowCount": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "gap": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "anonymisedImpressionsShare": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "anonymisedShare": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days",
        +                "description": "hiddenClicks / totalClicks, a 0-1 fraction."
        +              },
        +              "capHit": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "hiddenClicks": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days",
        +                "description": "Clicks no row of the dimension carries."
        +              },
        +              "hiddenImpressions": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "rowCap": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "rowClicks": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days",
        +                "description": "Clicks over every row of the dimension; null when unknown."
        +              },
        +              "rowImpressions": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "rowsTotal": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days",
        +                "description": "Rows of the dimension; null when unknown."
        +              },
        +              "totalClicks": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "totalImpressions": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "truncatedImpressionsShare": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "truncatedShare": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days",
        +                "description": "0-1 share of clicks in rows past rowCap: 0 when the cap was not hit, null when the path cannot split it."
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "missingClicksPercent": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "missingImpressionsPercent": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "rowCount": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedaudit_onpage_seo13 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / contextRange / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / metricsUnavailable
        Added value: +{
        +  "$ref": "#/properties/truncated"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / skipped / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "by_severity": {},
        -      "indexable_pages": {
        -        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        -      },
        -      "non_indexable_pages": {
        -        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        -      },
        -      "total_issues": {
        -        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        -      },
        -      "total_pages": {
        -        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "by_severity": {},
        +      "indexable_pages": {
        +        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        +      },
        +      "non_indexable_pages": {
        +        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        +      },
        +      "total_issues": {
        +        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        +      },
        +      "total_pages": {
        +        "$ref": "#/properties/contextRange/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedbreakdown_by_path13 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / groups / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedbulk_inspect_urls4 fields changed
      • changedInput schema / properties / urls / description
        Previous value: -"Up to 25 URLs per call; use add_tracked_urls for more."New value: +"Up to 25 URLs per call; use add_tracked_urls for more, where this connection offers it."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / quota / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "count": {
        -        "$ref": "#/properties/count"
        -      },
        -      "limit": {
        -        "$ref": "#/properties/count"
        -      },
        -      "remaining": {
        -        "$ref": "#/properties/count"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "count": {
        +        "$ref": "#/properties/count"
        +      },
        +      "limit": {
        +        "$ref": "#/properties/count"
        +      },
        +      "remaining": {
        +        "$ref": "#/properties/count"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / results / items / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcheck_tracked_url_now3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / results / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / stopped / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "retryAfterSeconds": {
        -        "$ref": "#/properties/count"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "retryAfterSeconds": {
        +        "$ref": "#/properties/count"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcompare_migration11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/mode"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/mode"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/mode"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/mode"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/mode"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/mode"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/mode"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/mode"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • changedOutput schema / properties / windows / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "$ref": "#/properties/windows/anyOf/0/properties/before"
        -      },
        -      "before": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "days": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "end": {
        -                "$ref": "#/properties/mode"
        -              },
        -              "start": {
        -                "$ref": "#/properties/mode"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "daysSinceGoLive": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "equalLength": {
        -        "$ref": "#/properties/windows/anyOf/0/properties/yoyBaseline"
        -      },
        -      "goLiveDate": {
        -        "$ref": "#/properties/mode"
        -      },
        -      "latestDate": {
        -        "$ref": "#/properties/mode"
        -      },
        -      "strategy": {
        -        "$ref": "#/properties/mode"
        -      },
        -      "timeline": {
        -        "$ref": "#/properties/windows/anyOf/0/properties/before"
        -      },
        -      "warnings": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "code": {
        -              "$ref": "#/properties/mode"
        -            },
        -            "message": {
        -              "$ref": "#/properties/mode"
        -            },
        -            "severity": {
        -              "$ref": "#/properties/mode"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "windowScale": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "yoyBaseline": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "after": {
        +        "$ref": "#/properties/windows/anyOf/0/properties/before"
        +      },
        +      "before": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "days": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "end": {
        +                "$ref": "#/properties/mode"
        +              },
        +              "start": {
        +                "$ref": "#/properties/mode"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "daysSinceGoLive": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "equalLength": {
        +        "$ref": "#/properties/windows/anyOf/0/properties/yoyBaseline"
        +      },
        +      "goLiveDate": {
        +        "$ref": "#/properties/mode"
        +      },
        +      "latestDate": {
        +        "$ref": "#/properties/mode"
        +      },
        +      "strategy": {
        +        "$ref": "#/properties/mode"
        +      },
        +      "timeline": {
        +        "$ref": "#/properties/windows/anyOf/0/properties/before"
        +      },
        +      "warnings": {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "code": {
        +              "$ref": "#/properties/mode"
        +            },
        +            "message": {
        +              "$ref": "#/properties/mode"
        +            },
        +            "severity": {
        +              "$ref": "#/properties/mode"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "windowScale": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "yoyBaseline": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_annotation2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / annotation / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate_content_group4 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / group / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / group / properties / rules / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "type": {
        -          "$ref": "#/properties/group/properties/id"
        -        },
        -        "value": {
        -          "$ref": "#/properties/group/properties/id"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "type": {
        +          "$ref": "#/properties/group/properties/id"
        +        },
        +        "value": {
        +          "$ref": "#/properties/group/properties/id"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ruleWarnings
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "code": {
        +        "$ref": "#/properties/group/properties/id"
        +      },
        +      "message": {
        +        "$ref": "#/properties/group/properties/id"
        +      },
        +      "pattern": {
        +        "$ref": "#/properties/group/properties/id"
        +      },
        +      "severity": {
        +        "$ref": "#/properties/group/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedcreate_gsc_property2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / results / items / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate_report_client2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / client / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clientId": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdAt": {
        -        "$ref": "#/properties/client/anyOf/0/properties/clientId"
        -      },
        -      "email": {
        -        "$ref": "#/properties/client/anyOf/0/properties/clientId"
        -      },
        -      "name": {
        -        "$ref": "#/properties/client/anyOf/0/properties/clientId"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clientId": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdAt": {
        +        "$ref": "#/properties/client/anyOf/0/properties/clientId"
        +      },
        +      "email": {
        +        "$ref": "#/properties/client/anyOf/0/properties/clientId"
        +      },
        +      "name": {
        +        "$ref": "#/properties/client/anyOf/0/properties/clientId"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_saved_filter2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / filter / additionalProperties
        Previous value: -falseNew value: +true
    • Changedcreate_shared_report2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / report / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "createdAt": {
        -        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        -      },
        -      "dataSourceType": {
        -        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        -      },
        -      "reportId": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "reportType": {
        -        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        -      },
        -      "rowCount": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "siteUrl": {
        -        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        -      },
        -      "title": {
        -        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        -      },
        -      "url": {
        -        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdAt": {
        +        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        +      },
        +      "dataSourceType": {
        +        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        +      },
        +      "reportId": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "reportType": {
        +        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        +      },
        +      "rowCount": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "siteUrl": {
        +        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        +      },
        +      "title": {
        +        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        +      },
        +      "url": {
        +        "$ref": "#/properties/report/anyOf/0/properties/reportId"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_topic_cluster2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / cluster / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete_annotation1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete_content_group1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete_migration_redirects2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / filters / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "deletedAll": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "label": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "siteUrlA": {
        -        "$ref": "#/properties/filters/anyOf/0/properties/label"
        -      },
        -      "siteUrlB": {
        -        "$ref": "#/properties/filters/anyOf/0/properties/label"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "deletedAll": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "label": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "siteUrlA": {
        +        "$ref": "#/properties/filters/anyOf/0/properties/label"
        +      },
        +      "siteUrlB": {
        +        "$ref": "#/properties/filters/anyOf/0/properties/label"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changeddelete_saved_filter1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete_shared_report1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete_site1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddelete_topic_cluster1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changeddetect_anomalies16 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / anomalies / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / coverage / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "calendarDays": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "daysAnalyzed": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "daysWithData": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "firstDataDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "lastDataDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "trailingGap": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "lastDataDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "missingDays": {
        -                "$ref": "#/properties/sensitivity"
        -              },
        -              "note": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "status": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "zeroFilledDays": {
        -        "$ref": "#/properties/sensitivity"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "calendarDays": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "daysAnalyzed": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "daysWithData": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "firstDataDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "lastDataDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "trailingGap": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "lastDataDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "missingDays": {
        +                "$ref": "#/properties/sensitivity"
        +              },
        +              "note": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "status": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "zeroFilledDays": {
        +        "$ref": "#/properties/sensitivity"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "critical": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "high": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "info": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "largestDeviation": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "low": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "medium": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "mostAffectedMetric": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "total": {
        -        "$ref": "#/properties/sensitivity"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "critical": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "high": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "info": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "largestDeviation": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "low": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "medium": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "mostAffectedMetric": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "total": {
        +        "$ref": "#/properties/sensitivity"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changeddetect_change_points25 fields changed
      • changedInput schema / properties / days / description
        Previous value: -"Trailing days of daily data to analyze (min 14, default 180)."New value: +"Trailing days of daily data to analyze (min 14, default 180). Ignored when startDate is given; with endDate alone, the window is `days` long and ends there."
      • addedInput schema / properties / endDate
        Added value: +{
        +  "description": "Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string \"null\".",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / startDate
        Added value: +{
        +  "description": "Optional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date: omit both startDate and endDate to analyze the trailing `days` window ending at the latest settled date. Pass it with endDate to read a fixed window, for example to reproduce an earlier result; passed alone, the window runs from here to the latest settled date. The window must span 14 to 480 days. Never pass null or the string \"null\".",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / changePoints / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / changePoints / items / properties / segmentAfter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "days": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "endDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "startDate": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / changePoints / items / properties / segmentBefore
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "days": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "endDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "startDate": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / changePoints / items / properties / segmentMeanAfter
        Added value: +{
        +  "$ref": "#/properties/sensitivity"
        +}
      • addedOutput schema / properties / changePoints / items / properties / segmentMeanBefore
        Added value: +{
        +  "$ref": "#/properties/sensitivity"
        +}
      • addedOutput schema / properties / changePoints / items / properties / windowDays
        Added value: +{
        +  "$ref": "#/properties/sensitivity",
        +  "description": "Days in each of the beforeMean / afterMean windows, not the whole period."
        +}
      • changedOutput schema / properties / coverage / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "calendarDays": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "daysWithData": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "firstDataDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "lastDataDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "trailingGap": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "lastDataDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "missingDays": {
        -                "$ref": "#/properties/sensitivity"
        -              },
        -              "note": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "status": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "zeroFilledDays": {
        -        "$ref": "#/properties/sensitivity"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "calendarDays": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "daysWithData": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "firstDataDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "lastDataDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "trailingGap": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "lastDataDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "missingDays": {
        +                "$ref": "#/properties/sensitivity"
        +              },
        +              "note": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "status": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "zeroFilledDays": {
        +        "$ref": "#/properties/sensitivity"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "$ref": "#/properties/sensitivity"
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "$ref": "#/properties/sensitivity"
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / strongestShift
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "date": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "stdDevs": {
        +          "$ref": "#/properties/sensitivity"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Empty result only: the strongest shift; rerunning with sensitivity stdDevs reports it. Absent when it peaks on the first or last day the detector tests, where it cannot be dated; emptyBecause says so."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / trendSummary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "direction": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "excludedUnsettledDays": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "firstMean14d": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "firstWindow": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "endDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "startDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "fromZero": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "halfwayDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "lastMean14d": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "lastWindow": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "endDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "startDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "ratio": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "slopePerDay": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "windowDays": {
        +          "$ref": "#/properties/sensitivity"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Overall movement, present even when count is 0: first vs last 14-day means, their ratio (null from zero: fromZero), slopePerDay, direction (up / down past 10% and count noise, else flat) and halfwayDate for a 1.5x+ move."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedfind_decaying_content16 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / counts / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "mild": {
        -        "$ref": "#/properties/recent/anyOf/0/properties/days"
        -      },
        -      "moderate": {
        -        "$ref": "#/properties/recent/anyOf/0/properties/days"
        -      },
        -      "severe": {
        -        "$ref": "#/properties/recent/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "mild": {
        +        "$ref": "#/properties/recent/anyOf/0/properties/days"
        +      },
        +      "moderate": {
        +        "$ref": "#/properties/recent/anyOf/0/properties/days"
        +      },
        +      "severe": {
        +        "$ref": "#/properties/recent/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / decaying / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / recent / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / windowNormalization / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "comparisonDays": {
        -        "$ref": "#/properties/recent/anyOf/0/properties/days"
        -      },
        -      "currentDays": {
        -        "$ref": "#/properties/recent/anyOf/0/properties/days"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "scale": {
        -        "$ref": "#/properties/recent/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "comparisonDays": {
        +        "$ref": "#/properties/recent/anyOf/0/properties/days"
        +      },
        +      "currentDays": {
        +        "$ref": "#/properties/recent/anyOf/0/properties/days"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "scale": {
        +        "$ref": "#/properties/recent/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedfind_page_poaching_opportunities14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / opportunities / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedforecast_traffic13 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / candidateTrendlines / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / forecast / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / historyRange / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / trendline / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "equation": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "r2": {
        -        "$ref": "#/properties/historyRange/anyOf/0/properties/days"
        -      },
        -      "type": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "equation": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "r2": {
        +        "$ref": "#/properties/historyRange/anyOf/0/properties/days"
        +      },
        +      "type": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedgenerate_seo_report22 fields changed
      • changedInput schema / properties / format / enum
        Previous value: -[
        -  "html",
        -  "json"
        -]New value: +[
        +  "html",
        +  "json",
        +  "compact"
        +]
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedget_account_info18 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / access / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / apiKey / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
      • changedOutput schema / properties / googleAccounts / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / googleAccountsUnavailable
        Added value: +{
        +  "$ref": "#/properties/googleAccounts/items/properties/isPrimary"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/user/properties/id"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/user/properties/id"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/user/properties/id"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/user/properties/id"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / profileUnavailable
        Added value: +{
        +  "$ref": "#/properties/googleAccounts/items/properties/isPrimary"
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
      • changedOutput schema / properties / subscription / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cancelAtPeriodEnd": {
        -        "$ref": "#/properties/googleAccounts/items/properties/isPrimary"
        -      },
        -      "currentPeriodEnd": {
        -        "$ref": "#/properties/user/properties/id"
        -      },
        -      "plan": {
        -        "$ref": "#/properties/user/properties/id"
        -      },
        -      "status": {
        -        "$ref": "#/properties/user/properties/id"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "cancelAtPeriodEnd": {
        +        "$ref": "#/properties/googleAccounts/items/properties/isPrimary"
        +      },
        +      "currentPeriodEnd": {
        +        "$ref": "#/properties/user/properties/id"
        +      },
        +      "plan": {
        +        "$ref": "#/properties/user/properties/id"
        +      },
        +      "status": {
        +        "$ref": "#/properties/user/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / subscriptionUnavailable
        Added value: +{
        +  "$ref": "#/properties/googleAccounts/items/properties/isPrimary"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
      • changedOutput schema / properties / user / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/user/properties/id"
        +}
    • Changedget_bing_crawl_issues11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / issues / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_crawl_stats13 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / daily / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_feeds11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / feeds / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_keyword_stats10 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/keyword"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/keyword"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/keyword"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/keyword"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • changedOutput schema / properties / stats / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/keyword"
        +}
    • Changedget_bing_link_counts13 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max link rows to return from the page (default 100). Bing returns up to ~100 rows per page but large properties can exceed that; lower this to keep the payload small."New value: +"Max link rows to return from the page (default 100). Page 0 usually holds every linked URL Bing reports, which can be far more than 100; lower this to keep the payload small."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / links / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / totalPages / description
        Added value: +"The number of linked URLs Bing reports, not a count of result pages."
    • Changedget_bing_page_queries13 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / queries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_page_stats13 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pages / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_query_page_stats13 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pairs / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_query_page_trend15 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / daily / description
        Added value: +"One row per week and position Bing recorded, so a date can repeat."
      • changedOutput schema / properties / daily / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "position": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "position": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_bing_query_stats13 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / queries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_bing_traffic_stats14 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string \"null\"."New value: +"Optional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (about 16 months of search data, 6 of crawl data). Never pass null or the string \"null\"."
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / daily / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_bing_url_submission_quota2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_blended_landing_pages21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedget_branded_performance24 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / anonymized / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "position": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "position": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / branded / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "position": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "position": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / brandedKeywords / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "skipped": {
        -        "$ref": "#/properties/savedKeywords"
        -      },
        -      "total": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "used": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "skipped": {
        +        "$ref": "#/properties/savedKeywords"
        +      },
        +      "total": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "used": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / daily / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / nonBranded / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "position": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "position": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/savedKeywords"
        +}
      • changedOutput schema / properties / previous / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "branded": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "clicks": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "ctr": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "impressions": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "position": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "brandedClickShare": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "nonBranded": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "clicks": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "ctr": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "impressions": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "position": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "total": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "clicks": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "ctr": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "impressions": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "position": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "branded": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "clicks": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "ctr": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "impressions": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "position": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "brandedClickShare": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "nonBranded": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "clicks": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "ctr": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "impressions": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "position": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "total": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "clicks": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "ctr": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "impressions": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "position": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / topBrandedQueries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / topNonBrandedQueries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / total / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "position": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "position": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_content_group_performance17 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / groups / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / groups / items / properties / matchOrder
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pages / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / uncategorized / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clickShare": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "color": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "groupId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "name": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "pages": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "position": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevClicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevCtr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevImpressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevPosition": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clickShare": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "color": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "groupId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "name": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "pages": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "position": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevClicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevCtr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevImpressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevPosition": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_core_web_vitals9 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_cross_site_summary26 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / countries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / current / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / deltas / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +}
      • changedOutput schema / properties / errors / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / errors / items / properties / code
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag",
        +  "description": "The error code the read failed with, as runTool would answer it."
        +}
      • addedOutput schema / properties / errors / items / properties / reason
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag",
        +  "description": "The refusal reason; 'share_inactive' for a share that no longer grants access, else 'read_failed'."
        +}
      • addedOutput schema / properties / errors / items / properties / shared
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/truncated"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / perSite / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / previous / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / scope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "searchType": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        -      },
        -      "sharedCount": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "siteCount": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "tag": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "truncated": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "searchType": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +      },
        +      "sharedCount": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "siteCount": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "tag": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "truncated": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / searchTypes / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sharedLookupFailed
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/truncated"
        +}
      • addedOutput schema / properties / sharedLookupPartial
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/truncated",
        +  "description": "Some properties shared with the caller could not be listed: the ones that could are in the totals, the rest are missing."
        +}
      • addedOutput schema / properties / sitesFailed
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/days",
        +  "description": "Properties left out of the totals, each named in errors."
        +}
      • addedOutput schema / properties / sitesIncluded
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/days",
        +  "description": "Properties whose numbers are in the totals."
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/tag",
        +  "description": "Present only when the totals do not cover every property."
        +}
    • Changedget_decay_overview15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/periods"
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "perPeriod": {
        -        "items": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "perPeriod": {
        +        "items": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_experiment_results6 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / windowNormalization / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "comparisonDays": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "currentDays": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "scale": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "comparisonDays": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "currentDays": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "scale": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_feed_audit_results16 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / checks / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / filters / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "checkKey": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "limit": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "severity": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "checkKey": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "limit": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "severity": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / history / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / run / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "bySeverity": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "critical": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "info": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "warning": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "completedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "coverage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "crawlBlocked": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "createdAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "error": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offersAudited": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "offersTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pageScored": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "pagesFailed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesFetched": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "perCheck": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "applicable": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                },
        -                "failed": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "runDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "runId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "score": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreFeed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scorePage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreVersion": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "status": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "bySeverity": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "critical": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "info": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "warning": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "completedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "coverage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "crawlBlocked": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "createdAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "error": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "offersAudited": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "offersTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pageScored": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "pagesFailed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesFetched": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "perCheck": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "applicable": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "failed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "runDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "runId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "score": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreFeed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scorePage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreVersion": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "status": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / syncNotice / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / syncPaused / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_filter_options12 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / brand / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / contentGroups / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / topicClusters / items / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget_ga4_ecommerce12 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totalRows / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "channels": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "items": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "landingPages": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pages": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "sources": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "channels": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "items": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "landingPages": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pages": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "sources": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_ga4_error_pages14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / patterns / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / prevTotals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "activeUsers": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "screenPageViews": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "sessions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "activeUsers": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "screenPageViews": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "sessions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "activeUsers": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "screenPageViews": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "sessions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "activeUsers": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "screenPageViews": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "sessions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_ga4_key_events11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_ga4_llm_traffic21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedget_ga4_overview21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedget_gmc_account_health17 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / businessInfo / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "addressRegionCode": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "hasAddress": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "hasCustomerServiceEmail": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "hasCustomerServicePhone": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "hasCustomerServiceUri": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "hasPhone": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "phoneVerificationState": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "addressRegionCode": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "hasAddress": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "hasCustomerServiceEmail": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "hasCustomerServicePhone": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "hasCustomerServiceUri": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "hasPhone": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "phoneVerificationState": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / checks / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / homepage / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "claimed": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "uri": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "claimed": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "uri": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / issueCounts / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "critical": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "error": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "suggestion": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "unspecified": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "critical": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "error": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "suggestion": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "unspecified": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / issues / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / issues / items / properties / impactedDestinations / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "impacts": {
        -          "anyOf": [
        -            {
        -              "items": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "regionCode": {
        -                    "$ref": "#/properties/siteUrl"
        -                  },
        -                  "severity": {
        -                    "$ref": "#/properties/siteUrl"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "reportingContext": {
        -          "$ref": "#/properties/siteUrl"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "impacts": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "regionCode": {
        +                    "$ref": "#/properties/siteUrl"
        +                  },
        +                  "severity": {
        +                    "$ref": "#/properties/siteUrl"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "reportingContext": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / programs / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "activeRegionCodes": {
        -          "$ref": "#/properties/countriesWithoutShippingService"
        -        },
        -        "programId": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "state": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "unmetRequirements": {
        -          "anyOf": [
        -            {
        -              "items": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "affectedRegionCodes": {
        -                    "$ref": "#/properties/countriesWithoutShippingService"
        -                  },
        -                  "documentationUri": {
        -                    "$ref": "#/properties/siteUrl"
        -                  },
        -                  "title": {
        -                    "$ref": "#/properties/siteUrl"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "activeRegionCodes": {
        +          "$ref": "#/properties/countriesWithoutShippingService"
        +        },
        +        "programId": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "state": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "unmetRequirements": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "affectedRegionCodes": {
        +                    "$ref": "#/properties/countriesWithoutShippingService"
        +                  },
        +                  "documentationUri": {
        +                    "$ref": "#/properties/siteUrl"
        +                  },
        +                  "title": {
        +                    "$ref": "#/properties/siteUrl"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / returnPolicies / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "countries": {
        -          "$ref": "#/properties/countriesWithoutShippingService"
        -        },
        -        "days": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "label": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "policyType": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "returnPolicyId": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "returnPolicyUri": {
        -          "$ref": "#/properties/siteUrl"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "countries": {
        +          "$ref": "#/properties/countriesWithoutShippingService"
        +        },
        +        "days": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "label": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "policyType": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "returnPolicyId": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "returnPolicyUri": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / shipping / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "activeDeliveryCountries": {
        -        "$ref": "#/properties/countriesWithoutShippingService"
        -      },
        -      "activeServiceCount": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "serviceCount": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "warehouseCount": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "activeDeliveryCountries": {
        +        "$ref": "#/properties/countriesWithoutShippingService"
        +      },
        +      "activeServiceCount": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "serviceCount": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "warehouseCount": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / termsOfService / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "accepted": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "termsOfService": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "validUntil": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "regionCode": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "required": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "termsOfService": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "tosFileUri": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "accepted": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "termsOfService": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "validUntil": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "regionCode": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "required": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "termsOfService": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "tosFileUri": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_best_sellers12 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / reportUnavailable / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_competitors13 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / domains / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "avgAdsOrganicRatio": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "avgHigherPositionRate": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "avgPageOverlapRate": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "avgRank": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "avgRelativeVisibility": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "bestRank": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "days": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "domain": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "isYourDomain": {
        -          "$ref": "#/properties/notConfigured"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "avgAdsOrganicRatio": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "avgHigherPositionRate": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "avgPageOverlapRate": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "avgRank": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "avgRelativeVisibility": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "bestRank": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "days": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "domain": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "isYourDomain": {
        +          "$ref": "#/properties/notConfigured"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / reportUnavailable / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_data_sources15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / findings / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / rows / items / properties / destinations / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "destination": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "state": {
        -          "$ref": "#/properties/siteUrl"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "destination": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "state": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / properties / fetch / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "enabled": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "frequency": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "host": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "protocol": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "timeZone": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "enabled": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "frequency": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "host": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "protocol": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "timeZone": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / properties / latestUpload / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dataSourceId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "issues": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "code": {
        -                  "$ref": "#/properties/siteUrl"
        -                },
        -                "count": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                },
        -                "description": {
        -                  "$ref": "#/properties/siteUrl"
        -                },
        -                "documentationUri": {
        -                  "$ref": "#/properties/siteUrl"
        -                },
        -                "severity": {
        -                  "$ref": "#/properties/siteUrl"
        -                },
        -                "title": {
        -                  "$ref": "#/properties/siteUrl"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "itemsCreated": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "itemsTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "itemsUpdated": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "processingState": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "uploadTime": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dataSourceId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "issues": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "code": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "count": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "description": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "documentationUri": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "severity": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "title": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "itemsCreated": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "itemsTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "itemsUpdated": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "processingState": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "uploadTime": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_pricing_insights13 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / reportUnavailable / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "aboveBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "atBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "belowBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "competitivenessRows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "currencyMismatch": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "effectivenessCounts": {},
        -      "insightsRows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "products": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "withBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "withSuggestion": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "aboveBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "atBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "belowBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "competitivenessRows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "currencyMismatch": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "effectivenessCounts": {},
        +      "insightsRows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "products": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "withBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "withSuggestion": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_title_hygiene14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / duplicateTitleGroups / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "count": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "exampleOfferIds": {
        -          "anyOf": [
        -            {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "key": {
        -          "$ref": "#/properties/siteUrl"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "count": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "exampleOfferIds": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "key": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / repeatedWordOffers / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "count": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "examples": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "offerId": {
        -                  "$ref": "#/properties/siteUrl"
        -                },
        -                "title": {
        -                  "$ref": "#/properties/siteUrl"
        -                },
        -                "word": {
        -                  "$ref": "#/properties/siteUrl"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "count": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "examples": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "offerId": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "title": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "word": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / titleLengthHistogram / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "count": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "key": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "label": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "max": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "min": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "count": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "key": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "label": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "max": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "min": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / topWords / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "brandTitles": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "isBrand": {
        -          "$ref": "#/properties/notConfigured"
        -        },
        -        "share": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "titles": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "word": {
        -          "$ref": "#/properties/siteUrl"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brandTitles": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "isBrand": {
        +          "$ref": "#/properties/notConfigured"
        +        },
        +        "share": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "titles": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "word": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_indexing_tracker6 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / stats / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "errors": {
        -        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        -      },
        -      "indexed": {
        -        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        -      },
        -      "lastCheckAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "notIndexed": {
        -        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        -      },
        -      "pending": {
        -        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        -      },
        -      "total": {
        -        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        -      },
        -      "warnings": {
        -        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "errors": {
        +        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        +      },
        +      "indexed": {
        +        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        +      },
        +      "lastCheckAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "notIndexed": {
        +        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        +      },
        +      "pending": {
        +        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        +      },
        +      "total": {
        +        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        +      },
        +      "warnings": {
        +        "$ref": "#/properties/tracker/anyOf/0/properties/staleCrawlThresholdDays"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / tracker / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "createdAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "emailDigestEnabled": {
        -        "$ref": "#/properties/tracker/anyOf/0/properties/isActive"
        -      },
        -      "id": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "isActive": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "staleCrawlThresholdDays": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "createdAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "emailDigestEnabled": {
        +        "$ref": "#/properties/tracker/anyOf/0/properties/isActive"
        +      },
        +      "id": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "isActive": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "staleCrawlThresholdDays": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_indexing_tracker_report14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / breakdown / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "freshCrawlPercent": {
        -        "$ref": "#/properties/days"
        -      },
        -      "indexedPercent": {
        -        "$ref": "#/properties/days"
        -      },
        -      "totalTracked": {
        -        "$ref": "#/properties/days"
        -      },
        -      "warningCount": {
        -        "$ref": "#/properties/days"
        -      },
        -      "warningFreePercent": {
        -        "$ref": "#/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "freshCrawlPercent": {
        +        "$ref": "#/properties/days"
        +      },
        +      "indexedPercent": {
        +        "$ref": "#/properties/days"
        +      },
        +      "pendingCount": {
        +        "$ref": "#/properties/days"
        +      },
        +      "totalTracked": {
        +        "$ref": "#/properties/days"
        +      },
        +      "warningCount": {
        +        "$ref": "#/properties/days"
        +      },
        +      "warningFreePercent": {
        +        "$ref": "#/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / lostPages / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / lostPagesTotal
        Added value: +{
        +  "$ref": "#/properties/days"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / newlyIndexed / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / newlyIndexedTotal
        Added value: +{
        +  "$ref": "#/properties/days"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_indexnow_settings1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget_inspection_quota1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget_longtail_clusters23 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / clusters / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / clusters / items / properties / topPages / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / clusters / items / properties / urlRange / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "end": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "start": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "end": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "start": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • addedOutput schema / properties / dataMaturity
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "dateBasis": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "firstIncompleteDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "probe": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dataState": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "endDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "searchType": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "startDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "settledThrough": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "source": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "warehouseCutoff": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / knees / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/warnings"
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / settledThrough
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "rawRows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "urls": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "rawRows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "urls": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_merchant_listings_performance16 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / appearances / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "appearance": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "clicks": {
        -          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        -        },
        -        "ctr": {
        -          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        -        },
        -        "impressions": {
        -          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        -        },
        -        "position": {
        -          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "appearance": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "clicks": {
        +          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        +        },
        +        "ctr": {
        +          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        +        },
        +        "impressions": {
        +          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        +        },
        +        "position": {
        +          "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pages / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / timeline / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        -      },
        -      "position": {
        -        "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        +      },
        +      "position": {
        +        "$ref": "#/properties/totals/anyOf/0/properties/clicks"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_migration_health16 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +}
      • changedOutput schema / properties / mappings / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "checksAvailable": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        -      },
        -      "total": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -      },
        -      "truncated": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "checksAvailable": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        +      },
        +      "total": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +      },
        +      "truncated": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +}
      • changedOutput schema / properties / migration / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "id": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/migration/anyOf/0/properties/id"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/migration/anyOf/0/properties/id"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/migration/anyOf/0/properties/id"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/migration/anyOf/0/properties/id"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / redirects / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "byFlag": {
        -        "$ref": "#/properties/summary"
        -      },
        -      "byStatus": {
        -        "$ref": "#/properties/summary"
        -      },
        -      "checked": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -      },
        -      "total": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "byFlag": {
        +        "$ref": "#/properties/summary"
        +      },
        +      "byStatus": {
        +        "$ref": "#/properties/summary"
        +      },
        +      "checked": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +      },
        +      "total": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / segments / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "countries": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "clicksAfter": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "clicksBefore": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "key": {
        -                  "$ref": "#/properties/migration/anyOf/0/properties/id"
        -                },
        -                "recoveryPct": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "shareAfter": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "shareBefore": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "countriesTotal": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -      },
        -      "devices": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "clicksAfter": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "clicksBefore": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "key": {
        -                  "$ref": "#/properties/migration/anyOf/0/properties/id"
        -                },
        -                "recoveryPct": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "shareAfter": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                },
        -                "shareBefore": {
        -                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "scope": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "a": {
        -                "$ref": "#/properties/migration/anyOf/0/properties/id"
        -              },
        -              "b": {
        -                "$ref": "#/properties/migration/anyOf/0/properties/id"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "countries": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "clicksAfter": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "clicksBefore": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "key": {
        +                  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +                },
        +                "recoveryPct": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "shareAfter": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "shareBefore": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "countriesTotal": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +      },
        +      "devices": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "clicksAfter": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "clicksBefore": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "key": {
        +                  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +                },
        +                "recoveryPct": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "shareAfter": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                },
        +                "shareBefore": {
        +                  "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "scope": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "a": {
        +                "$ref": "#/properties/migration/anyOf/0/properties/id"
        +              },
        +              "b": {
        +                "$ref": "#/properties/migration/anyOf/0/properties/id"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / setup / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "mappingLabel": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "matchMode": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "mode": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "onlyMapped": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "regexA": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "regexB": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "searchType": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "sectionDepth": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "siteUrlA": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "siteUrlB": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "urlPrefixA": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "urlPrefixB": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "mappingLabel": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "matchMode": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "mode": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "onlyMapped": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "regexA": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "regexB": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "searchType": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "sectionDepth": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "siteUrlA": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "siteUrlB": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "urlPrefixA": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "urlPrefixB": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/migration/anyOf/0/properties/id"
        +}
      • changedOutput schema / properties / warnings / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / windows / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after": {
        -        "$ref": "#/properties/windows/anyOf/0/properties/before"
        -      },
        -      "before": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "days": {
        -                "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -              },
        -              "end": {
        -                "$ref": "#/properties/migration/anyOf/0/properties/id"
        -              },
        -              "start": {
        -                "$ref": "#/properties/migration/anyOf/0/properties/id"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "daysSinceGoLive": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -      },
        -      "equalLength": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        -      },
        -      "goLiveDate": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "latestDate": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "strategy": {
        -        "$ref": "#/properties/migration/anyOf/0/properties/id"
        -      },
        -      "timeline": {
        -        "$ref": "#/properties/windows/anyOf/0/properties/before"
        -      },
        -      "warnings": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "code": {
        -              "$ref": "#/properties/migration/anyOf/0/properties/id"
        -            },
        -            "message": {
        -              "$ref": "#/properties/migration/anyOf/0/properties/id"
        -            },
        -            "severity": {
        -              "$ref": "#/properties/migration/anyOf/0/properties/id"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "windowScale": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        -      },
        -      "yoyBaseline": {
        -        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "after": {
        +        "$ref": "#/properties/windows/anyOf/0/properties/before"
        +      },
        +      "before": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "days": {
        +                "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +              },
        +              "end": {
        +                "$ref": "#/properties/migration/anyOf/0/properties/id"
        +              },
        +              "start": {
        +                "$ref": "#/properties/migration/anyOf/0/properties/id"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "daysSinceGoLive": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +      },
        +      "equalLength": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        +      },
        +      "goLiveDate": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "latestDate": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "strategy": {
        +        "$ref": "#/properties/migration/anyOf/0/properties/id"
        +      },
        +      "timeline": {
        +        "$ref": "#/properties/windows/anyOf/0/properties/before"
        +      },
        +      "warnings": {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "code": {
        +              "$ref": "#/properties/migration/anyOf/0/properties/id"
        +            },
        +            "message": {
        +              "$ref": "#/properties/migration/anyOf/0/properties/id"
        +            },
        +            "severity": {
        +              "$ref": "#/properties/migration/anyOf/0/properties/id"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "windowScale": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/sectionDepth"
        +      },
        +      "yoyBaseline": {
        +        "$ref": "#/properties/setup/anyOf/0/properties/onlyMapped"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_organic_shopping_performance15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / nonProductTimeline / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "clicks": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "ctr": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        },
        -        "date": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "impressions": {
        -          "$ref": "#/properties/range/anyOf/0/properties/days"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicks": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "ctr": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "date": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "impressions": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / nonProductTotals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / timeline / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "conversionValue": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "conversions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "conversionValue": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "conversions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_page_performance14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / daily / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_position_distribution18 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / buckets / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / buckets / items / properties / bandOrder
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days",
        +  "description": "1-based place of the band, best first: 1 is 1-3, 4 is 21+."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / dayTotals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "date": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "deep": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "first": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "second": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "top3": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "total": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "date": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "deep": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "first": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "second": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "top3": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "total": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / days / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / totals / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "rows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "rows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_product_listing_status17 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / issueCounts / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / rows / items / properties / contentLanguage
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / rows / items / properties / feedLabel
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / rows / items / properties / productId
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / syncNotice / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / syncPaused / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_query_performance14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / daily / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_query_shape_trend16 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / periods / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_query_value_attribution21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedget_ranking_changes21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedget_site_summary21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedget_sitemap_performance15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / failedChildSitemaps / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "error": {
        -          "$ref": "#/properties/siteUrl"
        -        },
        -        "sitemapUrl": {
        -          "$ref": "#/properties/siteUrl"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "error": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sitemapUrl": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / urls / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_tag_group_view25 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / countries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / current / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / daily / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / deltas / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / devices / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +}
      • changedOutput schema / properties / errors / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / errors / items / properties / code
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate",
        +  "description": "The error code the read failed with, as runTool would answer it."
        +}
      • addedOutput schema / properties / errors / items / properties / reason
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate",
        +  "description": "The refusal reason; 'share_inactive' for a share that no longer grants access, else 'read_failed'."
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pages / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / perSite / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / previous / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / queries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/range/anyOf/0/properties/startDate"
        -      },
        -      "startDate": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +      },
        +      "startDate": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sitesFailed
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days",
        +  "description": "Properties left out of the totals, each named in errors."
        +}
      • addedOutput schema / properties / sitesIncluded
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days",
        +  "description": "Properties whose numbers are in the totals."
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/startDate",
        +  "description": "Present only when the totals do not cover every property."
        +}
    • Changedget_topic_cluster_performance18 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / clusters / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/queries/items/properties/matchedKeywords"
        +}
      • changedOutput schema / properties / queries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / unclustered / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "clickShare": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "clicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "clusterId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "ctr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "impressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "keywordCount": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "name": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "position": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevClicks": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevCtr": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevImpressions": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "prevPosition": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "queries": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "clickShare": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "clicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "clusterId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "ctr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "impressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "keywordCount": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "name": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "position": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevClicks": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevCtr": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevImpressions": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "prevPosition": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "queries": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_yandex_indexing_history17 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / crawlResponses / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / crawlResponses / items / properties / points / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / pagesInSearch / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "date": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "value": {
        +          "$ref": "#/properties/crawlResponses/items/properties/points/items/properties/value"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / pagesInSearch / items
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "date": {
        -      "$ref": "#/properties/siteUrl"
        -    },
        -    "value": {
        -      "$ref": "#/properties/crawlResponses/items/properties/points/items/properties/value"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedOutput schema / properties / pagesInSearch / type
        Removed value: -"array"
      • addedOutput schema / properties / searchAppearanceChanges / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "event": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "points": {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "date": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "value": {
        +                "$ref": "#/properties/crawlResponses/items/properties/points/items/properties/value"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "points"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / searchAppearanceChanges / items
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "event": {
        -      "$ref": "#/properties/siteUrl"
        -    },
        -    "points": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "date": {
        -            "$ref": "#/properties/siteUrl"
        -          },
        -          "value": {
        -            "$ref": "#/properties/crawlResponses/items/properties/points/items/properties/value"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "points"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / searchAppearanceChanges / type
        Removed value: -"array"
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_yandex_query_stats11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / queries / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_yandex_site_summary12 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / problems / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "code": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "lastChangedAt": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "severity": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / problems / items
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "code": {
        -      "$ref": "#/properties/siteUrl"
        -    },
        -    "lastChangedAt": {
        -      "$ref": "#/properties/siteUrl"
        -    },
        -    "severity": {
        -      "$ref": "#/properties/siteUrl"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedOutput schema / properties / problems / type
        Removed value: -"array"
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedinspect_url4 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / message
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / quotaExhausted
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedlist_algo_updates17 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • changedOutput schema / properties / updates / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / updates / items / properties / beginISO / $ref
        Previous value: -"#/properties/updates/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / updates / items / properties / endISO / $ref
        Previous value: -"#/properties/updates/items/properties/id"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / updates / items / properties / id / $ref
        Added value: +"#/properties/sortedBy"
      • removedOutput schema / properties / updates / items / properties / id / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / updates / items / properties / name / $ref
        Previous value: -"#/properties/updates/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / updates / items / properties / severity / $ref
        Previous value: -"#/properties/updates/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / updates / items / properties / uri / $ref
        Previous value: -"#/properties/updates/items/properties/id"New value: +"#/properties/sortedBy"
    • Changedlist_annotations21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / annotations / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / annotations / items / properties / category / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / annotations / items / properties / color / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / annotations / items / properties / description / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / annotations / items / properties / event_date / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / annotations / items / properties / external_id / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / annotations / items / properties / external_source / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / annotations / items / properties / id / $ref
        Added value: +"#/properties/sortedBy"
      • removedOutput schema / properties / annotations / items / properties / id / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / annotations / items / properties / label / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / annotations / items / properties / scope / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / annotations / items / properties / site_id / $ref
        Previous value: -"#/properties/annotations/items/properties/id"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
    • Changedlist_bing_sites15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataSource / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/siteDetails/items/properties/url"
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url"
        +}
      • addedOutput schema / properties / hint / $ref
        Added value: +"#/properties/siteDetails/items/properties/url"
      • removedOutput schema / properties / hint / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url"
        +}
      • addedOutput schema / properties / notConfigured / $ref
        Added value: +"#/properties/siteDetails/items/properties/isVerified"
      • removedOutput schema / properties / notConfigured / type
        Removed value: -[
        -  "boolean",
        -  "null"
        -]
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteDetails/items/properties/url"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteDetails/items/properties/url"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteDetails/items/properties/url"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteDetails/items/properties/url"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / siteDetails
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "isVerified": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "url": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteDetails/items/properties/url"
        +}
    • Changedlist_content_groups10 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / groups / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_experiments11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / experiments / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / experiments / items / properties / groups / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_ga4_custom_dimensions9 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_ga4_properties11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/hint"
        +}
      • changedOutput schema / properties / errors / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "accountEmail": {
        -          "$ref": "#/properties/hint"
        -        },
        -        "message": {
        -          "$ref": "#/properties/hint"
        -        },
        -        "reason": {
        -          "$ref": "#/properties/hint"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "accountEmail": {
        +          "$ref": "#/properties/hint"
        +        },
        +        "message": {
        +          "$ref": "#/properties/hint"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/hint"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/hint"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/hint"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/hint"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/hint"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/hint"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/hint"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / properties / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/hint"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/hint"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/hint"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/hint"
        +}
    • Changedlist_gmc_accounts11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / accounts / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • changedOutput schema / properties / errors / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "accountEmail": {
        -          "$ref": "#/properties/reason"
        -        },
        -        "error": {
        -          "$ref": "#/properties/reason"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "accountEmail": {
        +          "$ref": "#/properties/reason"
        +        },
        +        "error": {
        +          "$ref": "#/properties/reason"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/reason"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/reason"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/reason"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/reason"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
    • Changedlist_indexnow_submissions13 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / submissions / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / submissions / items / properties / response_code / $ref
        Added value: +"#/properties/total"
      • removedOutput schema / properties / submissions / items / properties / response_code / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / total
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
    • Changedlist_migration_redirects22 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • changedOutput schema / properties / migrations / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / migrations / items / properties / label / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / migrations / items / properties / siteUrlA / $ref
        Added value: +"#/properties/sortedBy"
      • removedOutput schema / properties / migrations / items / properties / siteUrlA / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / migrations / items / properties / siteUrlB / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / redirects / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / redirects / items / properties / createdAt / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / redirects / items / properties / fromUrl / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / redirects / items / properties / id / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / redirects / items / properties / label / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / redirects / items / properties / siteUrlA / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / redirects / items / properties / siteUrlB / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / redirects / items / properties / toUrl / $ref
        Previous value: -"#/properties/migrations/items/properties/siteUrlA"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
    • Changedlist_migrations10 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id"
        +}
      • changedOutput schema / properties / migrations / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/migrations/items/properties/id"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/migrations/items/properties/id"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/migrations/items/properties/id"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/migrations/items/properties/id"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/migrations/items/properties/id"
        +}
    • Changedlist_report_clients15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / clients / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / clients / items / properties / clientId / $ref
        Added value: +"#/properties/sortedBy"
      • removedOutput schema / properties / clients / items / properties / clientId / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / clients / items / properties / createdAt / $ref
        Previous value: -"#/properties/clients/items/properties/clientId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / clients / items / properties / email / $ref
        Previous value: -"#/properties/clients/items/properties/clientId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / clients / items / properties / name / $ref
        Previous value: -"#/properties/clients/items/properties/clientId"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
    • Changedlist_saved_filters16 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • changedOutput schema / properties / filters / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / filters / items / properties / createdAt / $ref
        Previous value: -"#/properties/filters/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / filters / items / properties / filterLogic / $ref
        Previous value: -"#/properties/filters/items/properties/id"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / filters / items / properties / id / $ref
        Added value: +"#/properties/sortedBy"
      • removedOutput schema / properties / filters / items / properties / id / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / filters / items / properties / name / $ref
        Previous value: -"#/properties/filters/items/properties/id"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / filters / items / properties / siteUrl / $ref
        Previous value: -"#/properties/filters/items/properties/id"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
    • Changedlist_shared_reports22 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / reports / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / reports / items / properties / createdAt / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / reports / items / properties / dataSourceType / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / reports / items / properties / reportId / $ref
        Added value: +"#/properties/sortedBy"
      • removedOutput schema / properties / reports / items / properties / reportId / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / reports / items / properties / reportType / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / reports / items / properties / sharedWith / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / reports / items / properties / sharedWith / items / properties / clientId / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / reports / items / properties / sharedWith / items / properties / email / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / reports / items / properties / sharedWith / items / properties / grantedAt / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / reports / items / properties / sharedWith / items / properties / name / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / reports / items / properties / title / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • changedOutput schema / properties / reports / items / properties / url / $ref
        Previous value: -"#/properties/reports/items/properties/reportId"New value: +"#/properties/sortedBy"
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
    • Changedlist_sitemaps10 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / sitemaps / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_sites21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedlist_tags12 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/sortedBy"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/sortedBy"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / tags / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / tags / items / properties / name / $ref
        Added value: +"#/properties/sortedBy"
      • removedOutput schema / properties / tags / items / properties / name / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/sortedBy"
        +}
    • Changedlist_topic_clusters10 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / clusters / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_tracked_urls11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / urls / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / urls / items / properties / createdAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_url_inspections11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / inspections / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pagination / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hasMore": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "limit": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "nextOffset": {
        -        "$ref": "#/properties/pagination/anyOf/0/properties/limit"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offset": {
        -        "$ref": "#/properties/pagination/anyOf/0/properties/limit"
        -      },
        -      "returned": {
        -        "$ref": "#/properties/pagination/anyOf/0/properties/limit"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hasMore": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "limit": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "nextOffset": {
        +        "$ref": "#/properties/pagination/anyOf/0/properties/limit"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "offset": {
        +        "$ref": "#/properties/pagination/anyOf/0/properties/limit"
        +      },
        +      "returned": {
        +        "$ref": "#/properties/pagination/anyOf/0/properties/limit"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_yandex_sites10 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/limitations/items"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/limitations/items"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/limitations/items"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/limitations/items"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / sites / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
    • Changedmanage_report_access1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedmanage_tags1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedquery_countries15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / countries / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pagination / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hasMore": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "limit": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "nextOffset": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offset": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "returned": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hasMore": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "limit": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "nextOffset": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "offset": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "returned": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/brandKeywordsSkipped"
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_devices14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / devices / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/brandKeywordsSkipped"
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_ga4_custom_dimensions11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_ga4_report11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_gmc_report11 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / reportUnavailable / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "message": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "reason": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "message": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "reason": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_search_analytics13 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "clicksCovered": {
        +          "$ref": "#/properties/rowCount",
        +          "description": "0-1 share of the totals named by sharesOf that this page's rows carry."
        +        },
        +        "filteredTotals": {
        +          "$ref": "#/properties/coverage/anyOf/0/properties/siteTotals",
        +          "description": "The same totals with the filters applied (scope \"filtered\")."
        +        },
        +        "hiddenClicksShare": {
        +          "$ref": "#/properties/rowCount",
        +          "description": "0-1 share of those totals that no row of this dimension carries (anonymised queries on query rows, near zero on page, country and device rows); null when unknown."
        +        },
        +        "hiddenImpressionsShare": {
        +          "$ref": "#/properties/rowCount"
        +        },
        +        "impressionsCovered": {
        +          "$ref": "#/properties/rowCount"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "Why some fields are null, when they are."
        +        },
        +        "rowsReturned": {
        +          "$ref": "#/properties/rowCount",
        +          "description": "Rows on this page."
        +        },
        +        "rowsTotal": {
        +          "$ref": "#/properties/rowCount",
        +          "description": "Rows across every page; null when unknown."
        +        },
        +        "scope": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"property\", or \"filtered\" when the rows were read with filters."
        +        },
        +        "sharesOf": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"siteTotals\", or \"filteredTotals\" when scope is \"filtered\"."
        +        },
        +        "siteTotals": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avgPositionWeighted": {
        +                  "$ref": "#/properties/rowCount",
        +                  "description": "Impression-weighted average position."
        +                },
        +                "clicks": {
        +                  "$ref": "#/properties/rowCount"
        +                },
        +                "ctrPercent": {
        +                  "$ref": "#/properties/rowCount",
        +                  "description": "A 0-100 percentage."
        +                },
        +                "impressions": {
        +                  "$ref": "#/properties/rowCount"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The property's totals for this window and search type, with no dimension and no filter."
        +        },
        +        "totalsFrom": {
        +          "$ref": "#/properties/siteUrl",
        +          "description": "\"get_site_summary\" (the read and arithmetic that tool uses) or \"property_totals\" (the same, for a search type other than web)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How much of the property total the rows cover, totals inline. Quote totals from here; do not sum rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/siteUrl",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / pagination / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hasMore": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "limit": {
        -        "$ref": "#/properties/rowCount"
        -      },
        -      "nextOffset": {
        -        "$ref": "#/properties/rowCount"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offset": {
        -        "$ref": "#/properties/rowCount"
        -      },
        -      "returned": {
        -        "$ref": "#/properties/rowCount"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hasMore": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "limit": {
        +        "$ref": "#/properties/rowCount"
        +      },
        +      "nextOffset": {
        +        "$ref": "#/properties/rowCount"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "offset": {
        +        "$ref": "#/properties/rowCount"
        +      },
        +      "returned": {
        +        "$ref": "#/properties/rowCount"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/dimensions"
        +}
      • changedOutput schema / properties / rows / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_top_pages21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedquery_top_queries21 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / account
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
        +}
      • addedOutput schema / properties / coverageUnavailable
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Why coverage is null, when it is."
        +}
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/title"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/title"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/title"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/title"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/title"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/title"
        -      },
        -      "source": {
        -        "$ref": "#/properties/title"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/title"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/title"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/title"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/title"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/title"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/title"
        +      },
        +      "source": {
        +        "$ref": "#/properties/title"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/title"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / notConfigured
        Added value: +{
        +  "$ref": "#/properties/comparisonHasData"
        +}
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/title"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/title"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/title"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Sort order per list, when the result holds several lists."
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Requested days after settledThrough; their numbers are still incomplete."
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/title"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "brand": {
        +          "$ref": "#/properties/kind",
        +          "description": "\"branded\" or \"non_branded\"."
        +        },
        +        "brandKeywordsSkipped": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +          "description": "Branded keywords that could not be compiled and were left out of the filter."
        +        },
        +        "contentGroup": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "topicCluster": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "id": {
        +                  "$ref": "#/properties/title"
        +                },
        +                "name": {
        +                  "$ref": "#/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
        +}
      • changedOutput schema / properties / siteScope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "hostnames": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "includesSubdomainsOf": {
        -        "$ref": "#/properties/title"
        -      },
        -      "note": {
        -        "$ref": "#/properties/title"
        -      },
        -      "sharedWithSites": {
        -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "hostnames": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "includesSubdomainsOf": {
        +        "$ref": "#/properties/title"
        +      },
        +      "note": {
        +        "$ref": "#/properties/title"
        +      },
        +      "sharedWithSites": {
        +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "\"asc\" or \"desc\"."
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Row field the rows are sorted by."
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Secondary sort field, when the tool states one."
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "The tie-break's direction, present only when it differs from sortOrder."
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "A caveat that changes how the numbers read."
        +}
    • Changedremove_tracked_urls1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedrun_feed_audit3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / run / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "bySeverity": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "critical": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "info": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "warning": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "completedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "coverage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "crawlBlocked": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "createdAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "error": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offersAudited": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "offersTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pageScored": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "pagesFailed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesFetched": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "perCheck": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "applicable": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                },
        -                "failed": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "runDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "runId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "score": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreFeed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scorePage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreVersion": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "status": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "bySeverity": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "critical": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "info": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "warning": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "completedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "coverage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "crawlBlocked": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "createdAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "error": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "offersAudited": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "offersTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pageScored": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "pagesFailed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesFetched": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "perCheck": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "applicable": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "failed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "runDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "runId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "score": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreFeed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scorePage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreVersion": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "status": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedscore_opportunities14 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / dataMaturity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dateBasis": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "firstIncompleteDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "note": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "probe": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "dataState": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "endDate": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "searchType": {
        -                "$ref": "#/properties/siteUrl"
        -              },
        -              "startDate": {
        -                "$ref": "#/properties/siteUrl"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "settledThrough": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "source": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "warehouseCutoff": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dateBasis": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "firstIncompleteDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "note": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "probe": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "dataState": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "endDate": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "searchType": {
        +                "$ref": "#/properties/siteUrl"
        +              },
        +              "startDate": {
        +                "$ref": "#/properties/siteUrl"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "settledThrough": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "source": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "warehouseCutoff": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / emptyBecause
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / methodLimits
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / opportunities / items / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / ordering
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "sortOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sortedBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenBy": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "thenOrder": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / partialDays
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / range / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "endDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startDate": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "endDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startDate": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / sortOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / sortedBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenBy
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / thenOrder
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedset_dashboard_visibility2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / slots / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "limit": {
        -        "$ref": "#/properties/slots/anyOf/0/properties/used"
        -      },
        -      "plan": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "used": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "limit": {
        +        "$ref": "#/properties/slots/anyOf/0/properties/used"
        +      },
        +      "plan": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "used": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedsubmit_indexnow_urls3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / keyFile / items / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / submissions / items / additionalProperties
        Previous value: -falseNew value: +true
    • Changedsubmit_sitemap2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / results / items / additionalProperties
        Previous value: -falseNew value: +true
    • Changedupdate_annotation2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / annotation / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "category": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      },
        -      "color": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      },
        -      "created_at": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      },
        -      "description": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      },
        -      "event_date": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      },
        -      "id": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "label": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      },
        -      "scope": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      },
        -      "site_id": {
        -        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "category": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      },
        +      "color": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      },
        +      "created_at": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      },
        +      "description": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      },
        +      "event_date": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      },
        +      "id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "label": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      },
        +      "scope": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      },
        +      "site_id": {
        +        "$ref": "#/properties/annotation/anyOf/0/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_content_group3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / group / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "color": {
        -        "$ref": "#/properties/group/anyOf/0/properties/id"
        -      },
        -      "created_at": {
        -        "$ref": "#/properties/group/anyOf/0/properties/id"
        -      },
        -      "description": {
        -        "$ref": "#/properties/group/anyOf/0/properties/id"
        -      },
        -      "id": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "$ref": "#/properties/group/anyOf/0/properties/id"
        -      },
        -      "rules": {}
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "color": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      },
        +      "created_at": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      },
        +      "description": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      },
        +      "id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      },
        +      "rules": {}
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / ruleWarnings
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "code": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      },
        +      "message": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      },
        +      "pattern": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      },
        +      "severity": {
        +        "$ref": "#/properties/group/anyOf/0/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_indexnow_settings1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedupdate_saved_filter2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "created_at": {
        -        "$ref": "#/properties/filter/anyOf/0/properties/id"
        -      },
        -      "filters": {},
        -      "id": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "$ref": "#/properties/filter/anyOf/0/properties/id"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "created_at": {
        +        "$ref": "#/properties/filter/anyOf/0/properties/id"
        +      },
        +      "filters": {},
        +      "id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "$ref": "#/properties/filter/anyOf/0/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_site3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / site / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / site / properties / crawlRateEffective / additionalProperties
        Previous value: -falseNew value: +true
    • Changedupdate_topic_cluster2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / cluster / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "created_at": {
        -        "$ref": "#/properties/cluster/anyOf/0/properties/id"
        -      },
        -      "id": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "keywords": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "name": {
        -        "$ref": "#/properties/cluster/anyOf/0/properties/id"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "created_at": {
        +        "$ref": "#/properties/cluster/anyOf/0/properties/id"
        +      },
        +      "id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "keywords": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "name": {
        +        "$ref": "#/properties/cluster/anyOf/0/properties/id"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  8. 4 tool updates
    • Changedget_core_web_vitals1 field changed
      • addedOutput schema / properties / softNavMetrics
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/target"
        +  },
        +  "type": "array"
        +}
    • Addedget_gmc_account_health
    • Addedget_gmc_data_sources
    • Addedquery_gmc_report
  9. 4 tool updates
    • Changedcompare_migration11 fields changed
      • addedInput schema / properties / goLiveDate
        Added value: +{
        +  "description": "Optional. First day the new setup was live, as YYYY-MM-DD. When given, side A is read over the before window and side B over the after window around this date (see windowStrategy), and the result adds windows, recoveryPct and trend buckets. Do not combine with startDate/endDate.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / urlPrefixA / description
        Previous value: -"Side A URL prefix (required for two-urls)."New value: +"Side A URL prefix (required for two-urls): a full URL (\"https://acme.com/old-blog/\"), a host (\"blog.acme.com/\") or a path on any host (\"/old-blog/\"), as list_migrations returns them."
      • changedInput schema / properties / urlPrefixB / description
        Previous value: -"Side B URL prefix (required for two-urls)."New value: +"Side B URL prefix (required for two-urls), in the same forms as urlPrefixA."
      • addedInput schema / properties / windowDays
        Added value: +{
        +  "description": "Only with goLiveDate. Window length in days for \"recent\" and \"from-go-live\" (default 28). Shortened to the post-launch days available.",
        +  "maximum": 365,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / windowStrategy
        Added value: +{
        +  "description": "Only with goLiveDate. \"recent\" (default): the last windowDays days vs the windowDays days before go-live, where the migration stands now. \"from-go-live\": the first windowDays days after go-live vs the windowDays days before, the launch dip included. \"full\": the 90 days before go-live vs every day since (lengths differ; per-day figures and recovery stay comparable).",
        +  "enum": [
        +    "recent",
        +    "from-go-live",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / yoyBaseline
        Added value: +{
        +  "description": "Only with goLiveDate. Compare the after window with the same weeks one year (364 days) earlier instead of the days before go-live, which removes seasonality. Default false.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / recoveryNote
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / recoveryPct
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / truncated / $ref
        Added value: +"#/properties/windows/anyOf/0/properties/yoyBaseline"
      • removedOutput schema / properties / truncated / type
        Removed value: -[
        -  "boolean",
        -  "null"
        -]
      • addedOutput schema / properties / windows
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "after": {
        +          "$ref": "#/properties/windows/anyOf/0/properties/before"
        +        },
        +        "before": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "days": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "end": {
        +                  "$ref": "#/properties/mode"
        +                },
        +                "start": {
        +                  "$ref": "#/properties/mode"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "daysSinceGoLive": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "equalLength": {
        +          "$ref": "#/properties/windows/anyOf/0/properties/yoyBaseline"
        +        },
        +        "goLiveDate": {
        +          "$ref": "#/properties/mode"
        +        },
        +        "latestDate": {
        +          "$ref": "#/properties/mode"
        +        },
        +        "strategy": {
        +          "$ref": "#/properties/mode"
        +        },
        +        "timeline": {
        +          "$ref": "#/properties/windows/anyOf/0/properties/before"
        +        },
        +        "warnings": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "code": {
        +                "$ref": "#/properties/mode"
        +              },
        +              "message": {
        +                "$ref": "#/properties/mode"
        +              },
        +              "severity": {
        +                "$ref": "#/properties/mode"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "windowScale": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "yoyBaseline": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedcreate_shared_report1 field changed
      • changedInput schema / properties / dataSourceType / enum
        Previous value: -[
        -  "inline",
        -  "queries",
        -  "pages",
        -  "countries",
        -  "rankings",
        -  "content-group",
        -  "page-performance"
        -]New value: +[
        +  "inline",
        +  "queries",
        +  "pages",
        +  "countries",
        +  "rankings",
        +  "content-group",
        +  "page-performance",
        +  "migration"
        +]
    • Addedget_migration_health
    • Addedlist_migrations
  10. 5 tool updates
    • Changedget_feed_audit_results3 fields changed
      • addedOutput schema / properties / staleNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / syncNotice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / syncPaused
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_gmc_best_sellers1 field changed
      • addedOutput schema / properties / reportUnavailable
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_gmc_competitors1 field changed
      • addedOutput schema / properties / reportUnavailable
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_gmc_pricing_insights1 field changed
      • addedOutput schema / properties / reportUnavailable
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_product_listing_status2 fields changed
      • addedOutput schema / properties / syncNotice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / syncPaused
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  11. 2 tool updates
    • Changedget_product_listing_status4 fields changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip, for reading past the first page: pass the previous answer's nextOffset (default 0, max 100,000).",
        +  "maximum": 100000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / merchantActionCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / offset
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
    • Changedget_yandex_query_stats1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Rows to return, across pages. Yandex serves 500 per request and holds 3,000, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused."New value: +"Rows to return, across pages. Yandex serves 500 per request and at most 3,000 for a window, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused."
  12. 63 tool updates
    • Changedadd_site9 fields changed
      • addedOutput schema / properties / accountRepaired
        Added value: +{
        +  "$ref": "#/properties/alreadyRegistered"
        +}
      • addedOutput schema / properties / alreadyRegistered
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / site / properties / activated
        Added value: +{
        +  "$ref": "#/properties/alreadyRegistered"
        +}
      • changedOutput schema / properties / site / properties / connectedAt / $ref
        Previous value: -"#/properties/site/properties/id"New value: +"#/properties/message"
      • addedOutput schema / properties / site / properties / id / $ref
        Added value: +"#/properties/message"
      • removedOutput schema / properties / site / properties / id / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / site / properties / permissionLevel / $ref
        Previous value: -"#/properties/site/properties/id"New value: +"#/properties/message"
      • changedOutput schema / properties / site / properties / siteUrl / $ref
        Previous value: -"#/properties/site/properties/id"New value: +"#/properties/message"
    • Changedanalyze_cannibalization1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedanalyze_ctr_curve1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedanalyze_sampling_impact1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedaudit_onpage_seo4 fields changed
      • addedOutput schema / properties / budgetNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / contextNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / notAudited
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedbreakdown_by_path5 fields changed
      • addedOutput schema / properties / groupCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / pageRowsCapped
        Added value: +{
        +  "$ref": "#/properties/truncated"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedbulk_inspect_urls6 fields changed
      • addedOutput schema / properties / results / items / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / skipReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / retryAfterSeconds
        Added value: +{
        +  "$ref": "#/properties/count"
        +}
      • addedOutput schema / properties / stopReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedcheck_tracked_url_now7 fields changed
      • addedOutput schema / properties / notChecked
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / retryAfterSeconds
        Added value: +{
        +  "$ref": "#/properties/count"
        +}
      • addedOutput schema / properties / results / items / properties / skipReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / stopped
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "retryAfterSeconds": {
        +          "$ref": "#/properties/count"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedcompare_migration2 fields changed
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
    • Changeddetect_anomalies2 fields changed
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "calendarDays": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "daysAnalyzed": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "daysWithData": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "firstDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "lastDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "trailingGap": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "lastDataDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "missingDays": {
        +                  "$ref": "#/properties/sensitivity"
        +                },
        +                "note": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "status": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "zeroFilledDays": {
        +          "$ref": "#/properties/sensitivity"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changeddetect_change_points2 fields changed
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "calendarDays": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "daysWithData": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "firstDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "lastDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "trailingGap": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "lastDataDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "missingDays": {
        +                  "$ref": "#/properties/sensitivity"
        +                },
        +                "note": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "status": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "zeroFilledDays": {
        +          "$ref": "#/properties/sensitivity"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedfind_decaying_content5 fields changed
      • changedInput schema / properties / comparisonEndDate / description
        Previous value: -"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here."
      • changedInput schema / properties / comparisonStartDate / description
        Previous value: -"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here."
      • addedOutput schema / properties / decaying / items / properties / baselineClicksScaled
        Added value: +{
        +  "$ref": "#/properties/recent/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / windowNormalization
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "comparisonDays": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        },
        +        "currentDays": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "scale": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedfind_page_poaching_opportunities5 fields changed
      • addedOutput schema / properties / ctrSourceNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / scanLimit
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / scanNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedforecast_traffic3 fields changed
      • changedInput schema / properties / granularity / description
        Previous value: -"Forecast granularity. Weekly needs >= 13 weeks of history, monthly >= 6 months."New value: +"Forecast granularity. Weekly needs about 105 days of history (13 complete weeks), monthly about 240 days (6 complete months)."
      • addedOutput schema / properties / forecastNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_branded_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_content_group_performance2 fields changed
      • addedOutput schema / properties / fallbackReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_cross_site_summary2 fields changed
      • addedOutput schema / properties / perSite / items / properties / shared
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/truncated"
        +}
      • changedOutput schema / properties / scope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "searchType": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        -      },
        -      "siteCount": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "tag": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "truncated": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "searchType": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +      },
        +      "sharedCount": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "siteCount": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "tag": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "truncated": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_decay_overview2 fields changed
      • addedOutput schema / properties / incompletePeriods
        Added value: +{
        +  "$ref": "#/properties/periods"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_experiment_results3 fields changed
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / windowNormalization
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "comparisonDays": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "currentDays": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "scale": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_feed_audit_results4 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / crawlNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / run / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "bySeverity": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "critical": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "info": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "warning": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "completedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "coverage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "createdAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "error": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offersAudited": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "offersTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pageScored": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "pagesFailed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesFetched": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "perCheck": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "applicable": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                },
        -                "failed": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "runDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "runId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "score": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreFeed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scorePage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreVersion": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "status": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "bySeverity": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "critical": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "info": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "warning": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "completedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "coverage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "crawlBlocked": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "createdAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "error": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "offersAudited": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "offersTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pageScored": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "pagesFailed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesFetched": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "perCheck": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "applicable": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "failed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "runDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "runId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "score": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreFeed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scorePage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreVersion": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "status": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_ga4_ecommerce2 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedget_ga4_error_pages2 fields changed
      • addedOutput schema / properties / prevTotals
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "activeUsers": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "screenPageViews": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "sessions": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedget_ga4_key_events3 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / metricMode
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedget_ga4_overview3 fields changed
      • changedInput schema / properties / comparisonEndDate / description
        Previous value: -"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here."
      • changedInput schema / properties / comparisonStartDate / description
        Previous value: -"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here."
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
    • Changedget_gmc_best_sellers2 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_competitors2 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_pricing_insights3 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "aboveBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "atBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "belowBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "competitivenessRows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "effectivenessCounts": {},
        -      "insightsRows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "products": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "withBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "withSuggestion": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "aboveBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "atBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "belowBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "competitivenessRows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "currencyMismatch": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "effectivenessCounts": {},
        +      "insightsRows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "products": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "withBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "withSuggestion": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_title_hygiene3 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / variantsCollapsed
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
    • Changedget_indexing_tracker_report3 fields changed
      • addedOutput schema / properties / configured
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/configured"
        +}
    • Changedget_indexnow_settings1 field changed
      • addedOutput schema / properties / keySiteUrl
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_longtail_clusters2 fields changed
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/apiRowCapReached"
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_merchant_listings_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_organic_shopping_performance4 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_page_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_position_distribution2 fields changed
      • changedInput schema / properties / scanLimit / description
        Previous value: -"How many top rows by clicks to bucket. Raise it when a long-tail property reports `truncated: true`. The ClickHouse period path clamps it at 50,000; ignored by the ClickHouse daily path, which aggregates in SQL."New value: +"How many top rows by clicks to bucket on the live Search Console API. Raise it when a long-tail property reports `truncated: true`. Ignored on the ClickHouse warehouse, which buckets every row in SQL."
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_product_listing_status8 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / itemIssuesNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / itemIssuesUnavailable
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / rows / items / properties / freeListingsStatus
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / stale
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / staleNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / syncedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_query_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_query_shape_trend1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_ranking_changes2 fields changed
      • changedInput schema / properties / comparisonEndDate / description
        Previous value: -"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here."
      • changedInput schema / properties / comparisonStartDate / description
        Previous value: -"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here."
    • Changedget_sitemap_performance3 fields changed
      • addedOutput schema / properties / childSitemapNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / failedChildSitemaps
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "error": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sitemapUrl": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_topic_cluster_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_yandex_indexing_history2 fields changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_yandex_query_stats2 fields changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_yandex_site_summary2 fields changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedinspect_url3 fields changed
      • addedOutput schema / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_algo_updates2 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional filter: only include updates on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."New value: +"Optional filter: only include updates that began on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional filter: only include updates on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."New value: +"Optional filter: only include updates still rolling out on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."
    • Changedlist_ga4_custom_dimensions1 field changed
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
    • Changedlist_ga4_properties2 fields changed
      • addedOutput schema / properties / errors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "accountEmail": {
        +            "$ref": "#/properties/hint"
        +          },
        +          "message": {
        +            "$ref": "#/properties/hint"
        +          },
        +          "reason": {
        +            "$ref": "#/properties/hint"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/connected"
        +}
    • Changedlist_gmc_accounts18 fields changed
      • changedOutput schema / properties / account / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / accountEmail / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / accountId / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / accountName / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / name / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / error / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / errors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "accountEmail": {
        +            "$ref": "#/properties/reason"
        +          },
        +          "error": {
        +            "$ref": "#/properties/reason"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / gaps
        Added value: +{
        +  "$ref": "#/properties/accounts/items/properties/linkedSiteUrls"
        +}
      • changedOutput schema / properties / gcpProjectNumber / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / hint / $ref
        Added value: +"#/properties/reason"
      • removedOutput schema / properties / hint / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / incomplete
        Added value: +{
        +  "$ref": "#/properties/connected"
        +}
      • addedOutput schema / properties / incompleteNote
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • changedOutput schema / properties / linkedAccountId / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / note / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / reason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / siteUrl / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / unprobedAccountIds
        Added value: +{
        +  "$ref": "#/properties/accounts/items/properties/linkedSiteUrls"
        +}
    • Changedlist_saved_filters1 field changed
      • changedInput schema / properties / siteUrl / description
        Previous value: -"Restrict to filters for one property. Omit to list all of the user's filters."New value: +"Restrict to the presets on one property (one you own or one shared with you). Omit to list the presets on every property you own."
    • Changedlist_tracked_urls5 fields changed
      • addedOutput schema / properties / configured
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / urls / items / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / urls / items / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / urls / items / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_url_inspections3 fields changed
      • addedOutput schema / properties / inspections / items / properties / google_canonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / inspections / items / properties / inspection_result_link
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / inspections / items / properties / user_canonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_yandex_sites1 field changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
    • Changedquery_countries1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_devices1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_ga4_custom_dimensions2 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedquery_ga4_report2 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedquery_search_analytics1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedrun_feed_audit4 fields changed
      • changedInput schema / properties / force / description
        Previous value: -"Queue an audit even when one completed inside the last 28 days (default false). Cannot bypass the one-audit-per-property-per-day rule."New value: +"Queue an audit even when one completed inside the last 28 days (default false). Cannot bypass the one-audit-per-property-per-day rule or a run still in progress."
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / run
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bySeverity": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "critical": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "info": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "warning": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "completedAt": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "coverage": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "crawlBlocked": {
        +          "$ref": "#/properties/notConfigured"
        +        },
        +        "createdAt": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "error": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "offersAudited": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "offersTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "pageScored": {
        +          "$ref": "#/properties/notConfigured"
        +        },
        +        "pagesFailed": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "pagesFetched": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "pagesTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "perCheck": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "applicable": {
        +                    "$ref": "#/properties/range/anyOf/0/properties/days"
        +                  },
        +                  "failed": {
        +                    "$ref": "#/properties/range/anyOf/0/properties/days"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "runDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "runId": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "score": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "scoreFeed": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "scorePage": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "scoreVersion": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "startedAt": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "status": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedscore_opportunities4 fields changed
      • addedOutput schema / properties / scanLimit
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / scanNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedsubmit_indexnow_urls2 fields changed
      • addedOutput schema / properties / historyLogged
        Added value: +{
        +  "$ref": "#/properties/pendingKeyValidation"
        +}
      • addedOutput schema / properties / keySiteUrl
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedsubmit_sitemap5 fields changed
      • addedOutput schema / properties / actions / $ref
        Added value: +"#/properties/notAttempted"
      • removedOutput schema / properties / actions / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / notAttempted
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / retryAfterSeconds
        Added value: +{
        +  "$ref": "#/properties/attempted"
        +}
      • addedOutput schema / properties / stopReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedupdate_indexnow_settings8 fields changed
      • addedInput schema / properties / generateKey
        Added value: +{
        +  "default": false,
        +  "description": "Create a new valid key and return the key file to publish. Only when the property has no key yet; clear the old key first to rotate.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / indexnowApiKey / description
        Previous value: -"The new key. Omit together with clear: true to remove the current key."New value: +"The new key. Omit when using generateKey or clear."
      • addedOutput schema / properties / generated
        Added value: +{
        +  "$ref": "#/properties/indexnowApiKeySet"
        +}
      • addedOutput schema / properties / keyFileContent
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / keyFileError
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / keyFileUrl
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / keyFileUrls
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / keyFileVerified
        Added value: +{
        +  "$ref": "#/properties/indexnowApiKeySet"
        +}
  13. 1 tool update
    • Changedget_yandex_query_stats3 fields changed
      • changedInput schema / properties / deviceType / description
        Previous value: -"Device filter. Yandex filters rather than breaking down by device, so each value is a separate query. MOBILE_AND_TABLET overlaps MOBILE and TABLET — do not sum them."New value: +"Device filter. Yandex filters rather than breaking down by device, so each value is a separate query. MOBILE_AND_TABLET overlaps MOBILE and TABLET, so do not sum them."
      • addedInput schema / properties / limit / description
        Added value: +"Rows to return, across pages. Yandex serves 500 per request and holds 3,000, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused."
      • changedInput schema / properties / limit / maximum
        Previous value: -500New value: +3000
  14. 4 tool updates
    • Changedget_yandex_indexing_history1 field changed
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/siteUrl"
        +  },
        +  "type": "array"
        +}
    • Changedget_yandex_query_stats1 field changed
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/siteUrl"
        +  },
        +  "type": "array"
        +}
    • Changedget_yandex_site_summary1 field changed
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/siteUrl"
        +  },
        +  "type": "array"
        +}
    • Changedlist_yandex_sites8 fields changed
      • changedOutput schema / properties / dataSource / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • changedOutput schema / properties / hint / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "anyOf": [
        +      {
        +        "not": {}
        +      },
        +      {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    ]
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / sites / items / properties / hostId / $ref
        Added value: +"#/properties/limitations/items"
      • removedOutput schema / properties / sites / items / properties / hostId / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / sites / items / properties / mainMirrorUrl / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • changedOutput schema / properties / sites / items / properties / unicodeUrl / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • changedOutput schema / properties / sites / items / properties / url / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
  15. 2 tool updates
    • Changedget_ga4_key_events2 fields changed
      • addedOutput schema / properties / prevRawEventCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / rawEventCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
    • Changedquery_ga4_report2 fields changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
  16. 10 tool updates
    • Changedgenerate_seo_report4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_blended_landing_pages4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_ga4_llm_traffic4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_ga4_overview4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_query_value_attribution4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_ranking_changes4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_site_summary4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedlist_sites4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedquery_top_pages4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedquery_top_queries4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
  17. 5 tool updates
    • Changedget_ga4_ecommerce2 fields changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_ga4_key_events5 fields changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedOutput schema / properties / isKeyEvent
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
      • addedOutput schema / properties / keyEventNames / $ref
        Added value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • removedOutput schema / properties / keyEventNames / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_ga4_overview1 field changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
    • Changedquery_ga4_custom_dimensions6 fields changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • changedOutput schema / properties / availableDimensions / $ref
        Previous value: -"#/properties/metrics"New value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • changedOutput schema / properties / availableMetrics / $ref
        Previous value: -"#/properties/metrics"New value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • addedOutput schema / properties / metrics / $ref
        Added value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • removedOutput schema / properties / metrics / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedquery_ga4_report7 fields changed
      • changedInput schema / properties / dimension / enum
        Previous value: -[
        -  "channel",
        -  "sourceMedium",
        -  "page",
        -  "landingPage",
        -  "country",
        -  "device",
        -  "event"
        -]New value: +[
        +  "channel",
        +  "sourceMedium",
        +  "page",
        +  "landingPage",
        +  "country",
        +  "device",
        +  "event",
        +  "date",
        +  "hostName"
        +]
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedInput schema / properties / secondaryDimension
        Added value: +{
        +  "description": "Optional second dimension that splits every row: \"date\" (per day) or \"hostName\" (per site/stream host). Must differ from `dimension`.",
        +  "enum": [
        +    "date",
        +    "hostName"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / metrics / $ref
        Added value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • removedOutput schema / properties / metrics / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / secondaryDimension
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  18. 126 tool updates
    • First observedadd_migration_redirects
    • First observedadd_site
    • First observedadd_tracked_urls
    • First observedanalyze_cannibalization
    • First observedanalyze_ctr_curve
    • First observedanalyze_query_shapes
    • First observedanalyze_sampling_impact
    • First observedaudit_onpage_seo
    • First observedbreakdown_by_path
    • First observedbulk_inspect_urls
    • First observedcheck_tracked_url_now
    • First observedcompare_migration
    • First observedcreate_annotation
    • First observedcreate_content_group
    • First observedcreate_gsc_property
    • First observedcreate_report_client
    • First observedcreate_saved_filter
    • First observedcreate_shared_report
    • First observedcreate_topic_cluster
    • First observeddelete_annotation
    • First observeddelete_content_group
    • First observeddelete_migration_redirects
    • First observeddelete_saved_filter
    • First observeddelete_shared_report
    • First observeddelete_site
    • First observeddelete_topic_cluster
    • First observeddetect_anomalies
    • First observeddetect_change_points
    • First observedfind_decaying_content
    • First observedfind_page_poaching_opportunities
    • First observedforecast_traffic
    • First observedgenerate_seo_report
    • First observedget_account_info
    • First observedget_bing_crawl_issues
    • First observedget_bing_crawl_stats
    • First observedget_bing_feeds
    • First observedget_bing_keyword_stats
    • First observedget_bing_link_counts
    • First observedget_bing_page_queries
    • First observedget_bing_page_stats
    • First observedget_bing_query_page_stats
    • First observedget_bing_query_page_trend
    • First observedget_bing_query_stats
    • First observedget_bing_traffic_stats
    • First observedget_bing_url_submission_quota
    • First observedget_blended_landing_pages
    • First observedget_branded_performance
    • First observedget_content_group_performance
    • First observedget_core_web_vitals
    • First observedget_cross_site_summary
    • First observedget_decay_overview
    • First observedget_experiment_results
    • First observedget_feed_audit_results
    • First observedget_filter_options
    • First observedget_ga4_ecommerce
    • First observedget_ga4_error_pages
    • First observedget_ga4_key_events
    • First observedget_ga4_llm_traffic
    • First observedget_ga4_overview
    • First observedget_gmc_best_sellers
    • First observedget_gmc_competitors
    • First observedget_gmc_pricing_insights
    • First observedget_gmc_title_hygiene
    • First observedget_indexing_tracker
    • First observedget_indexing_tracker_report
    • First observedget_indexnow_settings
    • First observedget_inspection_quota
    • First observedget_longtail_clusters
    • First observedget_merchant_listings_performance
    • First observedget_organic_shopping_performance
    • First observedget_page_performance
    • First observedget_position_distribution
    • First observedget_product_listing_status
    • First observedget_query_performance
    • First observedget_query_shape_trend
    • First observedget_query_value_attribution
    • First observedget_ranking_changes
    • First observedget_site_summary
    • First observedget_sitemap_performance
    • First observedget_tag_group_view
    • First observedget_topic_cluster_performance
    • First observedget_yandex_indexing_history
    • First observedget_yandex_query_stats
    • First observedget_yandex_site_summary
    • First observedinspect_url
    • First observedlist_algo_updates
    • First observedlist_annotations
    • First observedlist_bing_sites
    • First observedlist_content_groups
    • First observedlist_experiments
    • First observedlist_ga4_custom_dimensions
    • First observedlist_ga4_properties
    • First observedlist_gmc_accounts
    • First observedlist_indexnow_submissions
    • First observedlist_migration_redirects
    • First observedlist_report_clients
    • First observedlist_saved_filters
    • First observedlist_shared_reports
    • First observedlist_sitemaps
    • First observedlist_sites
    • First observedlist_tags
    • First observedlist_topic_clusters
    • First observedlist_tracked_urls
    • First observedlist_url_inspections
    • First observedlist_yandex_sites
    • First observedmanage_report_access
    • First observedmanage_tags
    • First observedquery_countries
    • First observedquery_devices
    • First observedquery_ga4_custom_dimensions
    • First observedquery_ga4_report
    • First observedquery_search_analytics
    • First observedquery_top_pages
    • First observedquery_top_queries
    • First observedremove_tracked_urls
    • First observedrun_feed_audit
    • First observedscore_opportunities
    • First observedset_dashboard_visibility
    • First observedsubmit_indexnow_urls
    • First observedsubmit_sitemap
    • First observedupdate_annotation
    • First observedupdate_content_group
    • First observedupdate_indexnow_settings
    • First observedupdate_saved_filter
    • First observedupdate_site
    • First observedupdate_topic_cluster

Publisher details

Operator
GSC Wizard · Publisher source
Vendor relationship
First-party
Trust center
Not available
Restrictions
Unknown

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    23 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources