Manual Payment Tracking Eliminated with Stripe–Salesforce Automation
for a US Nonprofit
A US-based nonprofit organization needed automated Stripe invoice generation, real-time payment status tracking, and overdue payment reminders — all operating inside Salesforce without any manual intervention. We built it across four record-triggered flows in a sandbox-to-production implementation.
payment flows built
automated on Opp create
automation configured
updates required
paths (profit / nonprofit)
- Salesforce Sandbox Org active sandbox to install and test the Stripe app before production go-live
- Stripe Sandbox Account test-mode Stripe account with API keys for sandbox integration validation
- Stripe for Salesforce Platform App AppExchange-listed app installed in the sandbox org with API extension package
- Stripe Webhook URL endpoint configured in Stripe dashboard to push payment events into Salesforce
- Custom Opportunity Fields Stripe Invoice ID, Invoice URL, and Stripe Payment Status fields on Opportunity
- Record-Triggered Flow Permissions Salesforce admin access to create and activate Flows with Apex action invocations
- How to configure the Stripe for Salesforce Platform app end-to-end — installation, authorization, and webhook setup
- How to automate Stripe invoice generation using Salesforce Record-Triggered Flows with no custom Apex code
- How to sync Stripe payment status back to Salesforce Opportunity records in real time using Stripe event webhooks
- How to handle both create and update Opportunity scenarios separately to avoid duplicate Stripe invoice creation
- How to build a 30-day payment reminder flow with separate email alert logic for different Salesforce record types
- How to validate Stripe payment success and failure scenarios in sandbox before deploying to production
A Mission-Driven US Nonprofit Outgrowing Manual Payment Workflows
CT Nonprofit Alliance is a US-based mission-driven organization running payment and donation workflows inside Salesforce. By the time they engaged us, their team was manually tracking invoice creation, payment confirmation, and overdue follow-up outside of Salesforce — checking Stripe separately, copying payment status into records, and sending reminders by hand. The operational cost of that gap was growing with every new transaction.
They had a Salesforce sandbox org and a Stripe sandbox account in place. What they needed was a complete Stripe-to-Salesforce automation layer: one that generates invoices automatically on Opportunity creation, syncs payment status in real time via webhooks, and fires reminder emails for unpaid invoices after 30 days — all without touching a record manually. Twopir's Salesforce Flow and integration work was the right fit for exactly this kind of automation-first engagement.
Four Payment Workflow Gaps Driving Manual Overhead Every Day
Stripe and Salesforce were both in use but operating as separate silos. Every payment event in Stripe required a human to check the dashboard, update the Opportunity record, and follow up on outstanding invoices. For a nonprofit with limited operational staff, that overhead was unsustainable at scale.
No Automated Stripe Invoice Generation on Opportunity Creation
When a new Opportunity was created in Salesforce, no invoice was generated in Stripe automatically. Staff had to log into Stripe, manually create a customer if one didn't exist, build and send an invoice, then copy the Invoice URL back into Salesforce. Every new payment record required 4–6 manual steps across two platforms.
Stripe Payment Status Not Reflected in Salesforce Opportunities
When a payment succeeded or failed in Stripe, Salesforce had no way of knowing. Staff checked Stripe manually, then updated the Opportunity's payment status by hand — or didn't update it at all. Opportunity records routinely showed outdated payment status, making pipeline reporting unreliable.
No Automated Follow-Up for Unpaid Invoices After 30 Days
Overdue payment follow-up depended entirely on someone remembering to check. There was no systematic way to identify which Opportunities had a payment link sent but still showed an unpaid status after 30 days, and no automated email reminder going to the payer. Unpaid invoices aged without intervention, directly impacting collections.
Opportunity Update Scenarios Not Handled Separately from Creates
When an Opportunity was updated — for example, a change in amount or stage — the same invoice logic needed to run again, but with different conditions: checking for existing Stripe customer and invoice IDs before creating new ones. Without separate flow logic for create vs. update, running a single flow caused duplicate invoices. There was no safe, automated path for handling Opportunity amendments in Stripe.
How We Structured the Engagement
We approached this as a sandbox-first automation build: configure the Stripe for Salesforce Platform app from scratch, build four distinct record-triggered flows covering every payment scenario, validate each flow end-to-end in the sandbox environment, then prepare the architecture for production deployment. No custom Apex code was written — the entire implementation runs on Salesforce Flow with Stripe's published Apex actions, which means it's maintainable by any Salesforce admin going forward.
We've deployed similar Stripe–Salesforce payment automation for organizations across the US, and the pattern holds: the most common failure mode is using a single flow for both create and update scenarios, which reliably produces duplicate Stripe invoices. Our approach separates these explicitly.
Stripe App Installation, Authorization & Webhook Configuration
We installed the Stripe for Salesforce Platform app into the client's Salesforce sandbox org, followed by the required Stripe API extension package. The Stripe sandbox account connection was authorized using the Stripe API keys, and the Salesforce org authorization was completed within the platform. This two-step authorization establishes the secure channel through which Salesforce Flows can invoke Stripe Apex actions at runtime.
Webhook configuration was handled next: we registered the Salesforce-provided Stripe webhook URL in the Stripe dashboard, configured the Stripe account details, and enabled the specific webhook events needed for payment processing — including invoice.payment_succeeded and invoice.payment_failed. The API version was set correctly to match the installed Stripe package, which is a common point of failure when teams configure this independently. With webhooks enabled, Stripe can now push real-time payment events into Salesforce as Stripe Event records.
.png)
.png)
.png)
Opportunity Create Flow — Stripe Invoice Generation (V12)
We built the Opportunity Create Flow — named "Opportunity after flow stripe payment url generate and update – V12" — as a Record-Triggered Flow that fires when an Opportunity record is created. The flow first retrieves the Stripe account configuration and the related Salesforce Account details. It then checks the Opportunity stage and amount conditions to determine whether invoice generation should proceed. This conditional gate prevents test or placeholder Opportunities from triggering live Stripe actions unnecessarily.
The core logic handles the Stripe customer ID check: if the related Account already has a Stripe Customer ID stored, the flow retrieves the existing Stripe customer rather than creating a duplicate. If no Stripe ID exists, it creates a new Stripe customer and stores the resulting Customer ID on the Salesforce Account. From there, the flow creates the Stripe invoice, adds invoice items, finalizes the invoice, and writes the resulting Stripe Invoice ID and hosted Invoice URL back to the Opportunity record. Every step is handled inside Salesforce Flow using Stripe's published Apex actions — no external API calls or middleware required.
.png)
.png)
.png)
Opportunity Update Flow — Invoice Update Logic (V11)
The Opportunity Update Flow — "Opportunity after Update flow stripe payment url generate and update – V11" — handles the same invoice generation logic but fires on record update rather than creation. Separating these two triggers is the most critical architectural decision in the entire implementation. A single flow handling both create and update would fire on every field change to an Opportunity, creating a new Stripe invoice each time — which breaks both the Stripe account and the Opportunity record's invoice tracking within hours of going live.
The update flow includes additional validation: it checks whether the Opportunity already has a Stripe Invoice ID before deciding whether to create a new invoice or update an existing one. Stage and amount validation runs first. The Stripe customer existence check mirrors the create flow logic. From there, it creates or retrieves the Stripe customer, creates the invoice and invoice items, finalizes the invoice, and updates the Opportunity's Stripe Invoice ID and Invoice URL fields. This flow handles cases like amount changes after the initial Opportunity creation without producing orphaned invoices in Stripe.
.png)
.png)
Payment Pending Reminder Flow — 30-Day Email Automation (V7)
The Payment Pending Reminder Flow — "Payment Link Created and Pending for 30 Days Sending email alert – V7" — is a scheduled-path flow that fires on Opportunity create or update, then waits 30 days from the transaction creation date before checking payment status. If the Stripe Payment Status field still shows unpaid or open at the 30-day mark, the flow sends a reminder email alert to the relevant stakeholder. This replaces the manual follow-up process entirely with a zero-touch, time-based automation.
One design decision we implemented specifically for this client: the flow includes separate email alert logic for Profit record types and Nonprofit record types on the Opportunity object. Nonprofits often have different communication requirements for payment follow-up — different email templates, different sender identities, different escalation paths. Building this as two distinct alert branches inside the same flow means both record types are covered without needing separate flows to maintain. The flow also updates the Opportunity stage to Closed Won automatically when payment is confirmed as completed.
.png)
Stripe Event Payment Status Update Flow & Sandbox Validation (V4)
The Stripe Event Payment Status Update Flow — "Update Opportunity status When Stripe event changes – V4" — is triggered by the creation of a Stripe Event record in Salesforce, which occurs when Stripe sends a webhook event to the org. The flow identifies the Stripe Event type, finds the related Opportunity record, and updates the Opportunity's Stripe Payment Status field to reflect the incoming event: Paid for a successful payment, Failed for a payment failure. This closes the feedback loop between Stripe and Salesforce entirely — no polling, no manual checking.
Sandbox validation covered all critical scenarios: Stripe Invoice ID generation, Invoice URL population on Opportunity records, Stripe Payment Status updates via webhook events for both payment.success and payment.failed event types, and the 30-day reminder email configuration. Each scenario was tested end-to-end in the Stripe sandbox environment before signoff. The implementation is structured so that production deployment requires only one additional step: installing the paid Stripe app in the production org. All four flows, custom fields, and webhook configurations migrate directly.
.png)
Is Your Salesforce Org Still Manually Tracking Stripe Payments?
If your team is logging into Stripe to check payment status and copying data back into Salesforce records by hand, there's a direct automation path to fix it. We'll map your current payment workflow and show you exactly what a record-triggered Flow build looks like for your org — free, in 5 business days.
What Changed — In Numbers and In Practice
The metric that resonated most with the client wasn't the automation counts — it was the elimination of the daily Stripe-to-Salesforce reconciliation task. The team no longer needs to check two platforms to understand where a payment stands. Everything the Opportunity record showed about payment status used to be at least 24 hours stale. Now it's current within seconds of a Stripe event firing.
"The payment tracking used to live in Stripe, and the deal records lived in Salesforce — and reconciling the two was a daily manual task. After this build, the Opportunity record is the source of truth for both. That's what we actually needed."
— Twopir Project Lead · US Nonprofit Salesforce Implementation · 2024Stripe Salesforce Integration — Common Questions Answered
Related Case Studies
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
Ready to Stop Managing Stripe and Salesforce Separately?
We'll audit your current payment workflow inside Salesforce, map where the manual steps live, and show you the automation architecture to close those gaps — delivered within 5 business days at no cost.
Serving US · UK · Australia · UAE · Canada · US EST · UK GMT · AEST coverage · Response within 24 hours guaranteed