Query and export

query_data and export_data: any question of a client's stored data, and the data itself in CSV, JSON lines or Parquet.

Embed
Preview of the card
<a href="https://seolyticize.com/docs/query-and-export"><img src="https://seolyticize.com/docs/_api/public/orgs/71cb2b7a-a719-4003-b3ea-6321dc1db8ab/spaces/3bf2dbf7-3faa-473c-ba3b-30588f5f8de4/pages/7259e444-496d-47b6-a0a7-a9196fb7c991/social-card.svg?v=3e7ae33eec8b" alt="Query and export" width="600" height="315"></a>

The tools answer the common questions. For the rest, query_data asks the stored data directly and export_data hands it over as a file. Both read only the client's own data, read-only.

Datasets

describe_datasets lists them with their columns:

Dataset

What it holds

gsc

Search Console, every day since the site was connected: date, query, page, country, device, clicks, impressions, plus ctr and position

web_events

Cookieless analytics: pageviews and custom events, with path, source, referrer, campaign, country, device, value

crawl_pages

A crawl's pages: status, title, H1, words, depth, indexable (crawlId, default latest)

crawl_issues

A crawl's issues by page

crawl_links

A crawl's internal links with anchors

rank_captures

Rank tracking: keyword, date, device, position, URL

backlinks

Links to the client's domain from our own link index

A query

{
  "clientId": "client_…",
  "dataset": "gsc",
  "dimensions": ["query"],
  "metrics": ["sum(clicks)", "sum(impressions)", "position"],
  "filters": [
    { "column": "query", "op": "contains", "value": "sms" },
    { "column": "country", "op": "eq", "value": "esp" },
    { "column": "device", "op": "eq", "value": "MOBILE" }
  ],
  "from": "2026-07-01",
  "orderBy": [{ "column": "sum(clicks)", "desc": true }],
  "limit": 100
}

Metrics are count, sum(col), avg(col), min(col), max(col), uniq(col), and the dataset's own (ctr, position for Search Console; visitors, visits, pageviews for analytics). Filters: eq, neq, contains, not_contains, starts_with, gt, gte, lt, lte, in, regex. With no dimensions or metrics, columns lists rows.

Search Console data is kept at several grains; the query reads the one that carries every column it names, so query with page and country reads the full grain, which only reaches back as far as a connection's history has been filled.

An export

The same query plus format (csv, jsonl or parquet) and up to a million rows. The answer is a download link valid for 24 hours:

{ "dataset": "gsc", "format": "parquet", "bytes": 8340211, "url": "https://seolyticize.com/api/v1/exports/…", "expires": "…" }

Load a Parquet export into BigQuery with bq load --source_format=PARQUET dataset.table export.parquet, or into pandas with pd.read_parquet.

Updated