Phone contact should be something your customers opt into. Collect that consent
explicitly (a separate, unchecked checkbox at signup works well), store it on
your own records, and give people a way to opt out. See
Cancellation Recovery Calls for the
consent details.
Where the number has to be
When a customer cancels or a payment fails, Atllas reads their phone number from one specific place per provider:
A number kept anywhere else (on a charge, an invoice, in metadata, or in a custom RevenueCat attribute) is not used. Numbers are normalized to E.164. Anything that cannot be normalized is skipped.
Stripe
Atllas reads the Phone field on the Stripe Customer. Three ways to get it there:- New customers (automatic). Turn on phone number collection for Checkout or Payment Links. Stripe then saves the number onto the Customer for you.
- One customer. Open the customer in Stripe, choose Edit, and fill in the Phone field.
- In bulk. Set
customer.phonein E.164 format (for example+15551234567) through the Stripe API.
RevenueCat
Atllas reads the reserved$phoneNumber subscriber attribute. Other custom attributes are not used.
- In your app. Set
$phoneNumberas soon as you have the number (after an OTP step or at signup) using the SDK’ssetPhoneNumberhelper. - Existing subscribers. Set the
$phoneNumberattribute through the RevenueCat subscriber attributes API. - Format. Use E.164 (for example
+15551234567). Free-text numbers are normalized where possible and skipped when they cannot be.
$phoneNumber is a reserved RevenueCat attribute, not a custom one you create.
Set it with the reserved setPhoneNumber helper (or the reserved $phoneNumber
key) so it lands in the right place.Checking your coverage
Two places in the portal show how many of your customers are reachable:- On the main Dashboard, Where you’re losing people shows a Who we can chase figure: the share of people who left that have a phone we can call or text.
- On the Integrations page, the connected Stripe card shows your overall phone coverage.

