The honest answer up front
Every time a subscriber goes to cancel in iOS Settings, Apple sends your server a request and waits about 700 milliseconds for an answer: a message, a switch-plan suggestion, or a signed promotional offer. Both products in this comparison exist to give that answer. Most apps still give none.
RevenueCat handles this API today. Their integration manages the real-time sequence server-side within Apple's 700ms window, supports all four message types (text, text with image, switch-plan, promotional offer), and applies eligibility rules — first-seen age, first-purchase age, offer-redemption recency, storefront, intro/trial status, random sampling — from their dashboard.
If you're already a happy RevenueCat customer, their integration works and staying with one vendor is a reasonable call. This article is for everyone else — and for teams comparing depth on the specific surface where subscribers cancel.
The real question: do you want a platform or a tool?
RevenueCat's retention messaging is a feature of the RevenueCat platform. You operate it from their dashboard, your subscription data flows through their systems, and you pay their platform price — a percentage of the revenue they track. For existing customers that's zero marginal cost and zero new vendors. For everyone else, adopting the feature means adopting the platform.
RetainKit is a standalone tool for exactly this API. Connect an App Store Connect key (a .p8 file), and you're live: no SDK, no app release, no migration of purchases or entitlements, no platform to adopt. Your subscription infrastructure — whether that's StoreKit 2 direct, your own backend, or RevenueCat itself — stays exactly where it is.
Neither shape is wrong. They're priced and built for different situations, which the rest of this article makes concrete.
Pricing math: percentage vs flat
RevenueCat is free up to $2,500 in monthly tracked revenue, then charges 1% of gross tracked revenue above that, with all features included. The percentage applies to gross revenue — before Apple's commission — so the effective rate on what you actually receive is higher. RetainKit charges a flat $49 (Launch) or $149 (Growth) per month.
| Your gross App Store revenue | RevenueCat (1% above $2.5k MTR) | RetainKit (flat) |
|---|---|---|
| $2,000 / mo | $0 — under the free allowance | $0–49 / mo |
| $10,000 / mo | ≈ $75 / mo | $49 / mo |
| $50,000 / mo | ≈ $475 / mo ($5,700 / yr) | $149 / mo ($1,788 / yr) |
| $200,000 / mo | ≈ $1,975 / mo | $149 / mo |
Two honest caveats. First, if you're already paying RevenueCat for subscription infrastructure, retention messaging comes inside that existing bill — the marginal cost of using their integration is zero. Second, below $2,500 MTR RevenueCat costs nothing at all, and RetainKit's free tier covers 100 production retention events a month with unlimited sandbox testing. The pricing gap only matters once real revenue flows — which is exactly when a percentage starts to compound. Check RevenueCat's current pricing before deciding; percentages and allowances change.
Depth comparison, feature by feature
| Capability | RetainKit | RevenueCat |
|---|---|---|
| What it is | Standalone control plane for Apple Retention Messaging. | Full subscription platform; retention messaging is one feature of it. |
| Platform requirement | None. App Store Connect key in, live — no SDK, no app release, works with StoreKit 2 direct. | Operated from the RevenueCat dashboard as part of their platform, with revenue-based pricing. |
| Message types | All four: text, text + image, switch-plan, promotional offer. | All four. Parity here. |
| Eligibility rules | Product, storefront, and subscription-group targeting on every plan. Growth adds subscriber-state conditions via App Store Server Notifications: current billing state (trial / intro / promo / win-back / paid), months subscribed, subscribed-since date, days until renewal, lifetime revenue, and past offer-redemption count. | First seen more than N days ago, first purchase more than N days ago, no offer redeemed in the last N days, storefront list, intro-offer / free-trial status, random sample — combinable with AND logic. |
| A/B testing | 50/50 two-arm on Launch; multi-variant (3+ arms) with statistical-significance readouts on Growth. | Described on RevenueCat's blog as part of the offering; not yet documented in their retention messaging docs at the time of writing. |
| Outcome measurement | Polls Apple for the transaction outcome after each retention event — save rate and revenue retained, on every plan, no extra setup. | Retention messaging charts; accurate analytics require routing App Store Server Notifications to RevenueCat. Their docs note their counts typically run higher than Apple's. |
| Pricing model | Flat: $0 / $49 / $149 per month. | Free to $2,500 MTR, then 1% of gross tracked revenue. |
The eligibility-rule row deserves a sentence of explanation, because the two lists look similar and aren't. RevenueCat's rules describe how the subscriber found you: how long ago they appeared, whether they're in a trial, where they are. RetainKit's Growth-tier conditions describe who the subscriber is right now: a subscriber 11 months into a yearly plan with $180 of lifetime spend and no past redemptions is a different retention problem than a month-two trial convert — and can get a different offer.
When to choose RevenueCat's integration
- You're already on RevenueCat and happy. The retention URL is ready in the dashboard you already use, there's no new vendor, and no new bill.
- You want one throat to choke. Purchases, entitlements, paywalls, analytics, and cancellation-time retention from a single provider is operationally simpler than two tools.
- Your revenue is small. Under the free allowance, their platform — retention messaging included — costs nothing.
When to choose RetainKit
- You use StoreKit 2 directly (or your own backend) and don't want to adopt a subscription platform just to answer Apple's cancellation callback.
- You don't want percentage pricing. At meaningful revenue, ~1% of gross is a five-figure annual line item; a flat $149/mo isn't.
- You want deeper targeting on the cancel surface. Subscriber-state conditions — tenure, lifetime value, renewal window, redemption history — plus multi-variant A/B with significance readouts, and save-rate / revenue-retained measurement out of the box.
Can you use both?
Yes, and it's less exotic than it sounds. Apple lets you configure exactly one retention URL per environment in App Store Connect — whoever hosts that URL owns the cancel surface. So the split is clean: RevenueCat keeps running purchases, entitlements, and analytics as your subscription infrastructure, and you point Apple's retention URL at RetainKit to run the cancellation moment. Nothing about the retention callback requires the two systems to talk to each other; Apple's request carries the transaction context RetainKit needs.
The trade-off is honest, too: your retention outcomes then live in RetainKit's dashboard rather than alongside your RevenueCat charts, and you're back to two vendors. Teams do this when they want RevenueCat's infrastructure but RetainKit's targeting depth where the save actually happens.
Sources
- Apple Retention Messaging documentation
- RevenueCat: Apple Retention Messaging API documentation
- RevenueCat engineering blog: Understanding Apple's Retention Messaging API
- RevenueCat pricing
Set up retention messaging while you wait for Apple. RetainKit hosts the endpoint, signs the offers, and measures what you saved — no SDK, no app release. Try the live demo: no signup or Apple key required.