Skip to main content
Glama

SEO GSC Wizard MCP

Organic shopping performance

get_organic_shopping_performance
Read-only

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).

Input Schema

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

NameRequiredDescriptionDefault
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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / listKey
      Added value: +{
      +  "$ref": "#/properties/siteUrl",
      +  "description": "Name of the top-level field that holds the rows sortedBy describes."
      +}
  2. Changed15 schema 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"
      +  }
      +]
  3. Changed4 schema 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"
      +}
  4. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources