RevenueCat cancellation surveys

Ask why a RevenueCat subscription stopped renewing

Turn RevenueCat’s non-renewing state into a contextual in-app conversation, separated into trial and paid cancellation feedback and delivered verbatim to Slack.

What this workflow actually does

RevenueCat tells an app what a customer owns and whether an active entitlement will renew. Paydirt adds the missing research layer: when the app observes an active entitlement with renewal turned off, it can present the appropriate trial or paid cancellation form.

Paydirt 2.0 does not add, replace, or require an upgrade to the RevenueCat package. Its source adapter is adapted inside the host target to the API surface the installed version already exposes. That avoids a second SwiftPM graph for the same Purchases modules and keeps RevenueCat as the subscription source of truth.

The resulting Slack conversation can include provider, product, entitlement, period type, price context, expiration, and the exact answers. The metadata describes the subscription; it does not silently change an entitlement or attempt a save offer.

A strong fit for

  • Apps already using RevenueCat CustomerInfo
  • Separating free-trial churn from paid churn
  • Collecting product and entitlement context with raw feedback
  • Foreground detection after an App Store cancellation

Not designed to replace

  • Server-only churn analytics where the app never opens again
  • Replacing RevenueCat entitlements or purchase logic
  • Intercepting Apple’s cancellation UI
  • Automatically discounting or restoring a subscription

From trigger to exact answers

  1. 01

    Keep RevenueCat unchanged

    The adapter observes the app’s existing Purchases configuration and preserves any delegate already installed.

  2. 02

    Inspect active entitlements

    A cancellation candidate is active, expires in the future, and reports `willRenew == false`.

  3. 03

    Route trial and paid users

    RevenueCat period context selects the trial-cancellation form or subscription-cancellation form.

  4. 04

    Deduplicate and deliver

    Paydirt deduplicates the detected event, saves the conversation turn by turn, and posts one final raw message to Slack.

Use the adapter returned by setup

A coding agent detects RevenueCat, copies the version-compatible adapter returned by `paydirt_setup`, starts it after Paydirt configuration, and builds the real target.

import Paydirt

Paydirt.configure(apiKey: "PUBLIC_PAYDIRT_SDK_KEY", theme: .automatic)

PaydirtRevenueCatAdapter.shared.start(
    cancellationFormId: "PAID_CANCELLATION_FORM_ID",
    trialCancellationFormId: "TRIAL_CANCELLATION_FORM_ID"
)

What reaches Slack

  • Provider and RevenueCat product identifier
  • Entitlement and trial-or-paid period context
  • Localized price and billing period when available
  • Expiration and the integration’s user identifier when intentionally supplied
  • Every exact question, answer, and text/audio marker

Know the limits

  • In-app detection requires the app to refresh CustomerInfo; a user who never returns cannot be interviewed in app
  • Apple controls subscription cancellation and may update renewal state asynchronously
  • Price and offering context are only as complete as the product information available to the app
  • Paydirt gathers reasons but does not modify RevenueCat entitlements or trigger retention actions

Questions developers ask

Will Paydirt introduce a second RevenueCat dependency?

No. Paydirt 2.0 has no RevenueCat package dependency. The generated source adapter uses the RevenueCat version already present in the host app.

Is an older RevenueCat version a blocker?

No. The agent keeps the installed version, adapts the source adapter to the APIs already used by the app, and omits optional metadata that version does not expose. It does not upgrade RevenueCat solely for Paydirt.

Can it distinguish trial cancellations from paid cancellations?

Yes. The adapter uses RevenueCat period context to route an active non-renewing entitlement to separate trial and paid forms.

Does this replace RevenueCat webhooks?

No. RevenueCat webhooks remain better for server-side event completeness. Paydirt’s adapter is for presenting contextual feedback when the customer is back inside the app.

Ship the smallest useful feedback loop

Install one form at a real product moment, send the completed raw conversation to one Slack channel, and verify it in the app before expanding.

Start setup