Connect Stripe to Salesforce
Put the billing signal where the account team can see it. Subscriptions, payments, and failed charges from Stripe land on the Salesforce account and opportunity, MRR stays current on the account, and a failed payment opens a case for CS before the customer churns. Every update is an ordered run you can trace back to the Stripe event.
Why teams connect Stripe and Salesforce
Sales and CS work in Salesforce. Billing lives in Stripe. Without a link, an AE does not know a renewal already paid, CS finds out about a failed card from an angry email, and the "MRR" field on the account is whatever someone last typed in.
- The account carries a live subscription status, plan, and MRR from Stripe, so the AE opens a renewal already knowing where it stands
- A failed payment opens a case routed to the CS queue with the dunning stage and the invoice link, days before a cancellation
- A closed-won opportunity can create the Stripe customer and subscription, so there is no rekeying and the IDs match from day one
- Every update is an ordered run log, so a wrong MRR number can be traced to the exact Stripe event that set it
Worked example
The retention flow most teams turn on first.
A failed Stripe invoice opens a Salesforce case and updates the account
Triggered on the Stripe event, idempotent on the invoice ID plus attempt count.
- Trigger: Stripe
Event receivedforinvoice.payment_failed, carryingcustomer,subscription,amount_due,attempt_count, andnext_payment_attempt. - Resolve: find the Salesforce Account by
Stripe_Customer_Id__cequal to the Stripecustomer. If none, match on billing email and set the ID. - Idempotency: look for an open Case with
Stripe_Invoice_Id__cequal to this invoice. If one exists, add a comment with the new attempt count instead of a second case. - Case: Salesforce
Create Case, record type "Billing", subject "Payment failed for {plan}", priority byamount_due, linked to the Account and the Contact who is the billing owner. - Account update: set
Payment_Status__cto "Past due" andDunning_Stage__cto the attempt count. - Recovery: a later
invoice.paidfor the same invoice closes the Case as "Resolved" and setsPayment_Status__cback to "Current".
Field mapping
The starting map for the Stripe subscription to Salesforce Account step.
| Stripe | Salesforce | Notes |
|---|---|---|
customer.id | Account.Stripe_Customer_Id__c | Match key. External ID, unique. Set on first sync if only the email matched. |
subscription.id | Account.Stripe_Subscription_Id__c | The primary subscription. A multi-subscription account uses a child object instead. |
subscription.status | Account.Subscription_Status__c | Picklist. Map trialing, active, past_due, canceled, unpaid explicitly; an unknown value goes to review. |
sum(items.price.unit_amount * quantity) / 100 | Account.MRR__c | Currency gotcha: Stripe is integer minor units. Divide by 100, and normalize annual plans to a monthly figure. |
subscription.current_period_end | Account.Renewal_Date__c | Unix timestamp to Salesforce Date. Drives renewal reporting. |
subscription.items[].price.nickname | Account.Plan__c | Override: if price nicknames are not maintained in Stripe, map by price.id through a lookup table instead. |
customer.currency | Account.Currency__c | Used to label MRR. Does not convert; reporting rolls up in the Salesforce corporate currency. |
invoice.hosted_invoice_url | Case.Stripe_Invoice_Link__c | On billing cases only, so CS can send the customer a pay link. |
What syncs, each direction
- Subscription and MRR. Status, plan, quantity, renewal date, and MRR on the account, updated on every subscription change. (Stripe to Salesforce)
- Payments and dunning. Paid invoices update payment status. Failed invoices open or update a CS case with the dunning stage. (Stripe to Salesforce)
- New customer from closed-won. A closed-won opportunity creates the Stripe customer and subscription from the quote lines, with an approval step first. (Salesforce to Stripe)
- Contact and billing details. Billing email, company name, and address stay aligned, with Salesforce as source of truth for the company record. (Either direction)
Governance and audit
The same controls apply to this sync as to every other Neblex workload.
- Ordered run log. Every update is an event log with the Stripe event, the record it resolved to, and the fields it changed. Replay a run without re-sending downstream side effects.
- Approval steps. Creating a Stripe customer or subscription from Salesforce pauses for a named approver, so a mis-scoped deal never bills a customer.
- Scoped access. Stripe uses a restricted key with read on customers, subscriptions, and invoices, and write only where the create-from-CRM flow needs it. Salesforce uses a connected app limited to the objects in the map.
- Environments. Build against Stripe test mode and a Salesforce sandbox, then promote the same flow to production.
Frequently asked questions
Is this real-time or batched?
Real-time. It runs on the Stripe event webhook, so an account's status changes within seconds of the payment or subscription change.
How does it avoid duplicate accounts?
It resolves on the Stripe customer ID stored as an external ID on the account. The first time, when only the email matches, it writes the ID back so every later event matches directly.
What happens if Salesforce is down when an event arrives?
The run fails and retries with backoff. The Stripe event is stored, so nothing is lost, and the run log shows exactly which events are pending.
Does it write anything back to Stripe by default?
No. Write-back to Stripe is off unless you turn on the create-customer-from-closed-won flow, which always runs behind an approval step.
How is this different from the Stripe Connector for Salesforce or a CPQ billing package?
Stripe's own connector and packages like those from Breadwinner or Chargent are good, focused products. Neblex fits when billing is one of many systems you are keeping in step and you want one run log, one set of governance controls, and the ability to branch the flow, for example routing dunning by segment or gating write-back.
Can it keep a full invoice history in Salesforce?
Yes, as a child object on the account, one record per Stripe invoice with amount, status, and the hosted link. It is off by default because many teams only want the summary on the account.
Connectors on this page
Stripe
Payments
- Operations
- 589
- Typed outputs
- 99.7%
- Change triggers
- 10 (webhook)
- Authentication
- Bearer
Salesforce
CRM
- Operations
- 1,296
- Typed outputs
- 57.9%
- Change triggers
- 95 (poll)
- Authentication
- OAuth2
Bring one real integration
We will build it with you against your own systems, with the run log open.