HookGet Open dashboard

Google Search Console → HookGet

HookGet reads Google Search Console's reporting API on a schedule and turns it into normalised events on the same pipeline as everything else you deliver.

In short

  • Reads the Search Analytics API with the same service-account flow as GA4 — add the account as a user on the property, paste the JSON key.
  • One event per settled day: clicks, impressions, ctr_permille and average position for the whole property.
  • Search data lags ~2–3 days at the source; days are read once, three days after they close.
  • CTR arrives as an integer per-mille rather than a float — integers survive aggregation and eyeballs.

What it produces

Read from the APIBecomesData
One settled day of the propertyseo.performance_reportedclicks, impressions, ctr_permille, avg_position

Set up

# Search Console -> Settings -> Users and permissions: add the service account email
curl -X POST https://api.hookget.com/v1/sources \
  -H "authorization: Bearer $HOOKGET_KEY" \
  -d '{"provider":"google-search-console",
       "secret":"<the JSON key file, pasted whole>",
       "config":{"site_url":"sc-domain:example.com"}}'
One scheduled sync of a pull source The scheduler claims a due source, fetches from the provider's API with the saved cursor, normalises the response into events, and stores them. Only when the sync succeeds does the cursor advance. A failure keeps the old cursor and retries with a growing backoff; after twenty consecutive failures the source pauses and reports its health. Due interval passed Fetch from the saved cursor Normalise dedupe on provider ids Stored, cursor advances only on success — never mid-failure Failure: old cursor kept backoff doubles · 20 strikes → paused, health says why
The two rules that make polling safe: the cursor advances only on success (a partial read never silently skips events — re-reads deduplicate for free), and a failing credential backs off and eventually pauses instead of hammering the provider in your name.

Stated plainly

The API aggregates the whole property per day — per-query and per-page breakdowns exist in the API but are high-cardinality by nature, and this connector deliberately does not turn ten thousand queries a day into ten thousand events. If you need query-level data, export it from Search Console; if you need the daily health of your search presence next to your other signals, that is this.

Questions

Which property format do I use?

Exactly what Search Console shows: sc-domain:example.com for a domain property, or the full URL with trailing slash for a URL-prefix property. The config is validated at creation, so a mismatch is a readable 400.