StoreKit / Playsettled purchase
Server truthvalidated receipt
Ad platformsdeduped event
purchase.signal.ts
if (receipt.acknowledged) {
send("Purchase", {
value,
event_id,
source: "server"
})
}01
Stop counting fake purchases.
A purchase event should not fire because a paywall closed or a store sheet returned control. It should fire when the store and your backend can prove the user received the entitlement.
- Gate purchase events behind receipt validation or billing acknowledgement.
- Separate pending, cancelled, failed, and settled purchase states.
- Prevent Meta and TikTok from optimizing on purchases that never settled.