Install the Fromly app for Stripe
Approve the OAuth consent in Stripe: nine read-only permissions, shown before you accept. No secret key is ever pasted into Fromly.
Trials, payments, failed charges, cancellations: each one lands on the contact as a tag and an event, so the right email goes to exactly the people it concerns.
Start freeYour first 1,000 emails free. No credit card.
Something happens in Stripe
Tags update on their own
Ada Lovelace
ada@lovelace.dev
The dunning email goes out
Acme · hello@acme.com
Your card didn’t go through
Update your cardFromly connects to Stripe as a Stripe App, through OAuth, so you never paste a secret key. The access is read-only across nine permissions, and the tokens are encrypted at rest.
The first sync imports your customers, their subscriptions, every payment, including one-off buyers who never became a Stripe customer, and the invoice history behind them. From then on, webhooks keep contacts current in real time and a daily pass re-checks everything Stripe cannot stream.
Each contact carries its billing life: the plan, the monthly recurring revenue, the first payment date, and a set of tags (on a trial, paying, past due, churned, one-time buyer) that Fromly recomputes in full on every change so they can never drift out of date.
Past history is imported as backfilled events that automations ignore, so connecting Stripe never emails your old customers. Only what happens after you connect can trigger an automation.
A read-only OAuth install. No API keys change hands.
Approve the OAuth consent in Stripe: nine read-only permissions, shown before you accept. No secret key is ever pasted into Fromly.
Customers, subscriptions, payments and invoices come in. Past events are marked as backfilled and automations ignore them, so your old customers hear nothing.
Subscription changes, successful and failed payments stream in as they happen. A daily re-check catches anything a webhook missed.
Lifecycle tags are recomputed in full on every change, and events like a failed payment or a cancellation are there for your automations to key on.
The Fromly app for Stripe is in Stripe’s app review. Until it is published, Stripe connections are enabled per workspace: start free and request it from your workspace settings.
Billing truth on every contact: plan, revenue, lifecycle tags and the events behind them. MRR is computed per subscription: trials excluded, discounts ignored, metered prices counted as zero, and currencies never summed together.
Contact fields
| Name | What it holds |
|---|---|
| plan | The plan the contact is on right now. |
| mrr_cents | Monthly recurring revenue, normalised to a month, with its currency. |
| first_paid_at | The first time this contact ever paid you. |
| stripe_customer_id | The Stripe customer behind the contact, for cross-checking. |
Events
| Name | What it holds |
|---|---|
| trial.started | A trial began. |
| trial.ended | A trial ran out. |
| subscription.created | A new subscription started. |
| subscription.updated | A plan, quantity or status changed. |
| subscription.canceled | A subscription ended. The win-back moment. |
| payment.succeeded | A payment went through. |
| payment.failed | A charge failed. The dunning moment. |
Tags
A failed payment fires its event; the automation asks the customer to update their card before the subscription slips away.
A cancellation fires its event, and a win-back sequence starts on its own: a week later, a month later, in your words.
When a trial ends without a subscription, the follow-up goes out while the product is still fresh in their mind.
Every contact carries its plan as a tag, so “everyone on the starter plan” is a segment, not a spreadsheet.
One-off buyers sync too, tagged as such, one campaign away from becoming recurring revenue.
Over MCP, your agent sees plans, MRR and lifecycle, and drafts for paying customers, trialists or churned users by name.
Every permission is read-only. Fromly cannot charge, refund, change a subscription or edit anything in Stripe.
The connection is a Stripe App over OAuth. You approve it in Stripe, the tokens are encrypted at rest, and revoking it in Stripe ends the access.
Imported history is backfilled, and automations ignore backfilled events. Your existing customers never hear about the connection.
If a contact already exists, say from Supabase, Stripe data is merged onto it by email, never over it. The signup date and source stay where they came from.
FAQ
Connect Supabase and Stripe, let your agent draft your first flow, and send your first 1,000 emails for free.