Connect Search Console
Connect Google Search Console and the searches that brought people to you appear next to your own pages: clicks, impressions, click rate and average position as Google reports them, with the orders and revenue your own site recorded for each page. No revenue is put on a search term, because Google never says which term led to a sale.
1. Connect
Open your site's settings in the dashboard, choose the Revenue tab and find the Google Search Console card. Connect Google Search Console sends you to Google to approve one read-only permission, webmasters.readonly. Nothing in it can change your property. Only a site owner can connect.
2. Pick the property
Back from Google, the card lists the Search Console properties that login can see, the ones that cover this site's domain first and marked Covers this site, with the best one preselected. Press Connect property. When exactly one property covers the domain it is bound for you and the card reads "Search Console connected. The first pull covers the last 16 months and runs on the next sync." Properties the login has not verified are left out of the list.
If the list cannot be fetched, a Property field asks for the string by hand: either sc-domain:yoursite.com or a full address like https://yoursite.com/, exactly as Search Console lists it. A login with no properties at all is told so; connect one that can see your site in Search Console. Choosing a different property later replaces the old one and clears its stored search facts before the new property is pulled. Rebinding the same still-bound property preserves its facts; after disconnect, old facts have no bound property and are cleared on the next binding.
Once connected, the card shows the property, the date it connected, Reconnect and Disconnect. Access renews on its own; if it ever lapses the card says so and asks you to reconnect. Disconnecting stops the pull and removes our access on Google. Numbers already pulled stay.
How the pull runs
The first pull reaches back 16 months, which is as far as Search Console keeps, one month per request. Every pull after that re-reads the trailing seven days. Google finishes counting a day about three days late, and we ask for settled data only, so a day is simply absent until it settles and lands on a later pass; a week's margin also covers a pass the worker missed. A property is due once every 20 hours, so the worker's six-hourly pass pulls it at most once a day, and a fresh connection is picked up on the next pass rather than tomorrow. POST /api/sites/{site}/sync, or datastated sync <site>, pulls it now regardless.
Each day is stored four ways: the daily total, by search term, by page, and by term and page together. The cross product is what lets a page filter narrow the terms. The single-dimension pulls exist because Google anonymises rare queries, so a breakdown never sums back to the day's total. Rows are keyed on date, term and page, and a re-pull replaces a row rather than adding to it.
The Search panel
On the dashboard, What people searched for sits beside your traffic sources. Four figures head it: Clicks, Impressions, Click rate and Avg position, Google's own counts for the property, through the latest day Google has reported. Two tabs below: Search terms and Pages. Every row carries clicks, impressions, CTR and position; the Pages tab adds Orders and Revenue, the orders your own tag and webhooks recorded on that path in the period. They are your numbers, not Google's, and not an estimate of what the searches earned. When the period has no tracked visits the two columns show a dash rather than a zero. Lists show ten rows with a Show all toggle.
Before the first pull lands the panel says so: Search Console runs about three days behind, and the first pull lands within a day of connecting.
The page filter
The box under the figures, "Only pages containing", narrows the panel to pages whose address contains what you type. It sets the dashboard's own page filter (?f_page.contains=), so the same chip appears in the filter bar and the pages panel narrows with it; Clear there clears it here. With a page filter on, the search terms shown are the ones that landed on those pages.
Any other filter hides the panel. Search rows have no visitor behind them, so a filter on source, country, device or anything else cannot be honoured, and the panel would rather disappear than show numbers that pretend to be narrowed.
No revenue per search term
Google does not report which search term led to a sale, so any revenue figure next to a term would be an estimate. DataStated does not assign revenue to search terms. The Pages tab is where the money is: each page carries the orders your own site recorded.
API, MCP and CLI
Management uses integration kind gsc. GET /api/sites/{site}/integrations includes its connection status, property, last sync and error. Owners can call POST /api/sites/{site}/integrations/gsc/sync or /disconnect with settings:write. Sync uses the saved property; it does not change it. Choose a property in the settings flow.
The window response carries a search section, null when no property is connected. GET /api/sites/{site}/search answers that section alone for a range, as a bare payload with no envelope, or {"property": null, "note": "..."} when nothing is connected. The MCP tool is datastated_analytics_search (alias site_search) and the CLI command is datastated search <site>.
{ "property": "sc-domain:acme.com",
"range": { "from": "2026-08-08", "to": "2026-09-07" },
"through": "2026-09-04", // the latest day Google has reported
"totals": { "clicks": 1204, "impressions": 48210, "ctr": 0.025, "position": 14.2 },
"queries": [{ "query": "acme pricing", "clicks": 88, "impressions": 910, "ctr": 0.0967, "position": 3.1 }],
"queryCount": 412, // queries is capped at 200 rows
"pages": [{ "page": "https://acme.com/pricing", "path": "/pricing", "clicks": 140, "impressions": 2100,
"ctr": 0.0667, "position": 4.8, "orders": 12, "revenue": 588 }],
"pageCount": 57,
"pageFilter": null, // always null over the API
"ownRecords": true, // false: orders and revenue are null
"note": "..." }position is Google's average, weighted by impressions where rows are combined. orders and revenue are this site's recorded orders for that path in the range.
Questions? Email us at hello@datastated.com.