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.
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 |
|---|---|
| Search Console, every day since the site was connected: date, query, page, country, device, clicks, impressions, plus |
| Cookieless analytics: pageviews and custom events, with path, source, referrer, campaign, country, device, value |
| A crawl's pages: status, title, H1, words, depth, indexable ( |
| A crawl's issues by page |
| A crawl's internal links with anchors |
| Rank tracking: keyword, date, device, position, URL |
| 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.