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_reportedwithspend_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 API | Becomes | Data |
|---|---|---|
| One settled day of the ad account | ad.spend_reported | spend_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"}}'
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.