← All integrations Paid acquisition

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.

Accessread + human-approved proposals
SyncDaily
On demandScheduled only

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

Dashboard Visible to operators; ask us during early access
Status 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 free

Agents: the same page as markdown at /integrations/meta-ads.md.