Adapty + Meta Conversions API: sending app purchases to Meta reliably
Updated July 10, 2026 · 7 min read
Adapty verifies purchases and renewals server-side, which makes it the right trigger for a Meta Conversions API (CAPI) event. The goal is the same as any CAPI setup: every validated purchase reaches Events Manager with a real value, currency, and enough identity to attribute — deduplicated against any client-side event.
Here's the end-to-end setup and the mistakes that quietly break it.
Setup, end to end
- 1In Meta Events Manager, note the dataset (pixel) ID and generate a Conversions API access token, and confirm it's the dataset your ad account optimizes on.
- 2Capture Meta click identity in-app at checkout and attach it to the Adapty profile (as custom attributes) so the server event can carry it.
- 3Forward purchases from a trusted server context — an Adapty webhook or server-side integration — not from the app, so a post-purchase crash can't skip the event.
- 4On each verified purchase and renewal, build a CAPI Purchase with the price and ISO currency, hashed customer identifiers, and the captured click identity.
- 5Generate one event ID per purchase and send it on both the CAPI event and any client-side Purchase event so Meta deduplicates to a single conversion.
- 6Verify in Test Events, then raise Event Match Quality by filling any missing identity parameters.
The mistakes that break it
- Firing from the app's purchase callback instead of Adapty's verified server event.
- Reporting trial starts and paid conversions as one event, or sending renewals at the trial price.
- Dropping the click identity, which tanks match quality even though the event 'arrives'.
- Mismatched or missing event IDs across client and server, causing double-counting or discards.
- Token pointing at a different Meta dataset than the ad account reads.
Frequently asked questions
Why isn't my Adapty + Facebook integration tracking purchases?
Usually the purchase is verified in Adapty but never forwarded to Meta's Conversions API, or it's forwarded without a value, currency, or click identity. Fire a CAPI Purchase from an Adapty webhook on each verified purchase and renewal, with the real amount and hashed identifiers.
Should I send Adapty purchases to Meta from the client or the server?
From the server. Adapty's webhook fires on verified purchases, so a crash or backgrounding after checkout can't skip it. Keep a client-side event only for identity, deduplicated with a shared event ID.
How do I track Adapty subscription renewals in Meta?
Handle the renewal webhook event and send a CAPI Purchase with the renewal's actual price and currency — not the trial or intro price — and keep trials and paid conversions as separate events.
Related guides
Not sure which of these is breaking your app?
Zoruko audits your app code for broken Meta and TikTok signal chains — free — and ships each fix as a pull request you review.
Run a free audit