Ropely guides
Practical guides for paid-without-access, duplicates, webhooks, and entitlement mismatches.
Stripe payment succeeded but the customer has no access
How to gather Stripe payment evidence and merchant access evidence when a customer paid but cannot use the product.
1 min · paid no access
RevenueCat entitlement is not active after purchase
Separate store purchase evidence from RevenueCat entitlement observations when access is missing.
1 min · entitlement mismatch
Stripe and RevenueCat customer ID mismatch
Why similar abbreviations are not enough to merge Stripe customers with RevenueCat app user IDs.
1 min · identity
Detect duplicate Stripe and App Store subscriptions
Classify overlapping paid Stripe and Apple subscriptions without treating family sharing as fraud.
1 min · duplicate coverage
Debug failed Stripe subscription webhooks
Use Stripe delivery semantics and Ropely ingress health to isolate signature, ordering, and handler failures.
1 min · webhook health
Reconcile web and mobile subscriptions
Compare Stripe, Apple, Google, and RevenueCat evidence without claiming a global historical subscriber list.
1 min · reconciliation
Customer subscribed on web and iOS
Investigate a customer who has both a Stripe subscription and an App Store subscription.
1 min · duplicate coverage
Subscription provisioning monitoring
Watch the gap between commercial success and merchant access using access events.
1 min · provisioning
Stripe webhook health monitoring
What freshness, retry, and signature failures mean for Stripe subscription observability.
1 min · webhook health
Commercial identity explained
How Ropely hashes provider identifiers and when links can be confirmed.
1 min · identity
Expected versus observed entitlements
Keep expected mapping, Stripe Entitlements, RevenueCat, and merchant access in separate layers.
1 min · entitlement mismatch
Subscription grace period versus product access
Billing retry and grace states are not the same as merchant access.
1 min · lifecycle
Detect access after subscription expiration
Find subjects who still have observed access after commercial coverage ended.
1 min · access after expiry
Prevent duplicate subscription charges
Observability can surface overlapping paid coverage. It cannot cancel subscriptions.
1 min · duplicate coverage
Measure revenue at risk from access failures
Sum integer minor units in one currency for customers who paid but lack observed access.
1 min · revenue at risk
Diagnose entitlement mapping failures
When product, price, or entitlement keys do not match across Stripe, stores, and the application.
1 min · entitlement mismatch
Build versus buy subscription observability
Engineering work required to observe Stripe, stores, entitlements, and access without becoming a billing system.
1 min · build vs buy
Human-approved subscription remediation
How Assist previews, approves, executes, and audits internal or merchant-webhook plans without automatic billing changes.
1 min · remediation
Duplicate-subscription remediation workflow
Classify overlapping paid coverage and use human-approved internal actions without advertising provider cancellation.
1 min · duplicate coverage
Why subscription observability should remain read-only by default
Observation credentials are not write authority. Ropely watches subscriptions by default and does not change customer access.
1 min · read only default
Commercial identity merge safety
Approve, hash, and reverse identity links instead of guessing that two provider customers are one person.
1 min · identity
Subscription incident response checklist
Assign, comment, link deployments, and attach human-approved plans when paid access fails.
1 min · incident response
Modeled MRR versus accounting revenue
Exact integer-string modeled MRR grouped by currency is not GAAP revenue and is never FX-converted.
1 min · revenue at risk
Cross-provider subscription analytics
Count subscriptions by provider and currency without inventing one mixed-currency company total.
1 min · analytics
Monitoring subscription renewal failures
Configure deterministic renewal-failure monitors with sample floors, cooldowns, and optional deployment correlation.
1 min · webhook health
Merchant action webhook remediation
Send a signed, human-approved entitlement request to the merchant. A 2xx is accepted, not verified.
1 min · remediation
Entitlement authority versus entitlement observability
Watching purchased, expected, and observed access is not the same job as serving live allow or deny decisions.
2 min · entitlement authority
Subscription entitlements across web and mobile
Stripe, App Store, Play, and RevenueCat facts stay namespaced. One paid surface is not a grant on every client.
2 min · web mobile entitlements
Usage credits without floating-point errors
Authoritative credits are scaled integers. Modeled MRR exposes numerator, denominator, quotient, remainder, and rounding policy.
2 min · usage credits
Commercial identity and organization inheritance
Person, organization, and membership scopes need published precedence. Email is not a merge and not a seat.
2 min · identity inheritance
Access decisions during billing-provider outages
Provider 5xx is not a Ropely refund. Ingress must keep acknowledging. Offline snapshots stay explicitly stale.
2 min · provider outage
Stripe subscription is active but the app still shows the free plan
Isolate Stripe status=active from a client that still renders the free catalog when the paid price is already current.
2 min · paid no access
RevenueCat entitlement is active but the feature stays locked
Separate CustomerInfo.isActive from a client feature gate that still refuses the unlock.
2 min · entitlement mismatch
User still has premium after a cancellation was scheduled
Distinguish cancel_at_period_end and store scheduled cancel from an already-ended commercial period.
1 min · lifecycle
Wrong plan remains after a subscription upgrade
Trace Stripe item price swaps, proration_behavior, and pending_update when the client still shows the old tier.
2 min · entitlement mismatch
Stripe and App Store both bill the same person
Compare Stripe invoice line periods with Apple originalTransactionId coverage without treating two observers as two bills.
2 min · duplicate coverage
RevenueCat anonymous app user ID after login
Diagnose $RCAnonymousID aliasing, Purchases.logIn, and TRANSFER when the identified user lost or gained entitlements.
2 min · identity
Map Apple originalTransactionId to an application user
Use originalTransactionId, appAccountToken, and Get Transaction Info instead of email or device guesses.
2 min · identity
Stripe webhook returned 200 but the database did not update
A 200 acknowledgement stops Stripe retries. Find ack-before-commit, lost writes, and handlers that never persisted.
2 min · webhook health
SaaS seat quantity does not match provisioned seats
Compare Stripe subscription item quantity with assigned organization seats without treating unused licenses as leakage.
2 min · provisioning
Stripe failed payment spike after a release
Break invoice.payment_failed bursts into decline codes, Smart Retries, and livemode isolation before paging product.
1 min · webhook health
Retired Stripe prices are still creating subscriptions
Find Checkout Sessions and Payment Links that still reference archived price ids after the catalog was retired.
2 min · entitlement mismatch