Skip to content

Search queries, clicks and impressions for a verified site.

Query your data with filters and parameters that you define. Returns zero or more rows grouped by the row keys that you define. You must define a date range of one or more days. When date is one of the group by values, any days without data are omitted from the result list. If you need to know which days have data, issue a broad date range query grouped by date for any metric, and see which day rows are returned.

Job search-console.queries

Your AI asks

checks the price first
telipot run google-search-console.search.analytics \
  --input-json '{"siteUrl":"sc-domain:example.com","startDate":"2026-09-01","endDate":"2026-09-30"}' \
  --quote

Price

Free
Priced· before it runs

google-search-console.search.analytics

FreeCompany account

Whose account it uses

1The person asking
skipped
2Your company’s Google Search Console account
Selected identity for this example
3Our account
not used

What it sends

{
  "siteUrl": "sc-domain:example.com",
  "startDate": "2026-09-01",
  "endDate": "2026-09-30"
}

Your Google Search Console login is added for you. Your AI never sees it.

What it costs

Free

no charge from the provider

Preview the price first. --quote runs nothing.

For developers · run it

Shell · runs the task on the named account

telipot run google-search-console.search.analytics \
  --input-json '{"siteUrl":"sc-domain:example.com","startDate":"2026-09-01","endDate":"2026-09-30"}'

siteUrl

string · required · path

The property as sites.list returns it, a URL-prefix property with its trailing slash or a domain property written sc-domain:example.com

startDate

string · required · body

YYYY-MM-DD in Pacific time, included in the range

endDate

string · required · body

YYYY-MM-DD in Pacific time, included in the range

dimensions

array · body

Zero or more of country, device, page, query, searchAppearance, date and hour, grouped in this order. With none, every value is combined into one row. Grouping by hour needs dataState hourly_all.

type

string · one of "web", "image", "video", "news", "discover", "googleNews" · default "web" · body

The search type to report on; web is the combined All tab and leaves out Discover and Google News

dimensionFilterGroups

array · body

Groups that must all match for a row to be returned. A group is a groupType of and and its filters, each a dimension (country, device, page, query or searchAppearance), an operator (equals, notEquals, contains, notContains, includingRegex or excludingRegex) and an expression.

aggregationType

string · one of "auto", "byPage", "byProperty", "byNewsShowcasePanel" · default "auto" · body

How data is aggregated; grouping or filtering by page rules out byProperty

rowLimit

integer · 1 to 25000 · default 1000 · body

Rows to return; page through the rest with startRow

startRow

integer · at least 0 · default 0 · body

Zero-based index of the first row

dataState

string · one of "final", "all", "hourly_all" · default "final" · body

all adds fresh data that is still partial; hourly_all adds the hourly breakdown

rows

object[]

Sorted by clicks, descending, or by date, ascending, when grouped by date. Absent when no row matches.

responseAggregationType

string

How the results were aggregated

metadata

object

Present when the request asked for fresh or hourly data
Full output schema · JSONNested fields and constraints

Output JSON Schema

{
  "type": "object",
  "properties": {
    "rows": {
      "type": "array",
      "description": "Sorted by clicks, descending, or by date, ascending, when grouped by date. Absent when no row matches.",
      "items": {
        "type": "object",
        "required": [
          "clicks",
          "impressions",
          "ctr",
          "position"
        ],
        "properties": {
          "keys": {
            "type": "array",
            "description": "The dimension values of the row, in the order the request grouped by them; absent when no dimensions are requested",
            "items": {
              "type": "string"
            }
          },
          "clicks": {
            "type": "number"
          },
          "impressions": {
            "type": "number"
          },
          "ctr": {
            "type": "number",
            "description": "From 0 to 1"
          },
          "position": {
            "type": "number",
            "description": "Average position in search results"
          }
        }
      }
    },
    "responseAggregationType": {
      "type": "string",
      "description": "How the results were aggregated"
    },
    "metadata": {
      "type": "object",
      "description": "Present when the request asked for fresh or hourly data",
      "properties": {
        "firstIncompleteDate": {
          "type": "string"
        },
        "firstIncompleteHour": {
          "type": "string"
        }
      }
    }
  }
}

A real answer

examples/google-search-console.search.analytics.json

{
  "rows": [
    {
      "keys": [
        "agent tools"
      ],
      "clicks": 128,
      "impressions": 4210,
      "ctr": 0.0304,
      "position": 6.4
    },
    {
      "keys": [
        "tool gateway for agents"
      ],
      "clicks": 41,
      "impressions": 1388,
      "ctr": 0.0295,
      "position": 8.1
    }
  ],
  "responseAggregationType": "byProperty"
}