HookGet Open dashboard

Meta Ads → HookGet

HookGet reads Meta Ads'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 Insights endpoint daily per ad account with an access token — created in Meta Business settings, pasted once, stored encrypted.
  • One event per settled day: ad.spend_reported with spend_cents, impressions, clicks, reach — and the account currency as an attribute.
  • The token travels as a Bearer header, never in a URL where paging links and logs would echo it.
  • Spend arrives from Meta as a string of whole currency units; it becomes integer cents here, so Meta money and Stripe money add up.

What it produces

Read from the APIBecomesData
One settled day of the ad accountad.spend_reportedspend_cents, impressions, clicks, reach + currency attribute

Set up

# Meta Business settings -> System users -> generate a token with ads_read
curl -X POST https://api.hookget.com/v1/sources \
  -H "authorization: Bearer $HOOKGET_KEY" \
  -d '{"provider":"meta-ads",
       "secret":"<access token>",
       "config":{"account_id":"act_12345678"}}'
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

Meta restates recent numbers as attribution settles — for up to 28 days on some actions. Each day is read once, the day after it closes, and is not re-read when Meta later revises it: an event that silently changes value after you have alerted on it is worse than a small attribution drift. For books-perfect figures, reconcile monthly against Meta’s own invoicing.

Questions

What permissions does the token need?

ads_read on the ad account — nothing more. A system-user token from Business settings outlives personal logins and survives password changes, which is what you want for a scheduled reader.

Multiple ad accounts?

One source per account. Each carries its own token, cursor and health, so one account’s expired token pauses that source alone — and the events stay separable by entity.