FunnelKeeper + Meta Ads
Meta spend joins the same portfolio view as Google. Self-serve Meta OAuth has not shipped yet — connections are operator-managed today — and one product category can never read Meta at all.
What FunnelKeeper reads from Meta Ads
- Daily campaign spend, in the ad account's currency
- Campaign names, impressions and clicks
- Ad account and campaign identifiers, for joining to your own attribution data
What it never does
- Adult-adjacent products can never touch Meta. It is a database CHECK constraint, not a setting
- No spend change without a human approval on the action-queue row
- No self-serve connection yet — an operator wires the token during early access
How to connect Meta Ads
Visible to operators; ask us during early access Operator-managed token. Meta OAuth is not shipped Daily. Campaign spend backfills in stages up to a year on a new connection, then reads a rolling 7-day window.
Meta Ads questions
Why can some products never connect Meta?
Because adult-adjacent products get their advertising accounts destroyed for it, and a policy you can toggle is not a policy. The ban lives in the database as the adult_never_meta CHECK, so no code path — including ours — can route around it.
When does self-serve Meta connect arrive?
It is not committed to a date. Until it ships, Meta spend can be wired by an operator during early access, and everything downstream — channel splits, CAC, payback — behaves exactly as it does for Google.
Usually connected alongside
Connect Meta Ads on the free tier. The first sync backfills history, so the dashboard opens with something in it.
Start freeAgents: the same page as markdown at /integrations/meta-ads.md.