The Client

A Mission-Driven US Nonprofit Outgrowing Manual Payment Workflows

CNA
CT Nonprofit Alliance
Client name used with approval pending · Full Stripe–Salesforce Payment Automation Engagement
IndustryNonprofit / Mission-Driven
RegionUnited States — Connecticut
Team SizeInternal Salesforce implementation team
Stack BeforeSalesforce Sandbox · Manual payment tracking
Platform ImplementedStripe for Salesforce Platform (AppExchange)
EngagementSandbox Implementation & Automation Build

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.


The Problem

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.

01

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.

02

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.

03

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.

04

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.


The Solution

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.

Five Phases · Sandbox Implementation and Validation
Full delivery timeline: Sandbox implementation and testing phase — structured from app installation through production-readiness validation. Webhook-driven architecture · Zero custom Apex.
Phase 01 — App Setup & Authorization Phase 02 — Invoice Creation Flow Phase 03 — Invoice Update Flow Phase 04 — Payment Reminder Flow Phase 05 — Event Status Sync & Validation
Phase 01

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.

tripe App Installation, Authorization
tripe App Installation, Authorization
Stripe App Installation
Stripe App Installation
Webhook Configuration
Webhook Configuration
📦
Stripe for Salesforce Platform App
Installed in sandbox org with Stripe API extension package; AppExchange listing verified before install.
🔐
Dual Authorization Flow
Stripe sandbox API key authorization paired with Salesforce org authorization; both required for Apex action invocations to succeed.
🔔
Webhook Event Enablement
Stripe webhook URL registered in Stripe dashboard; required payment processing events enabled for real-time Salesforce event record creation.
Phase 02
Phase 02

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.

Webhook Configuration
Opportunity Create Flow
Webhook Configuration
Opportunity Create Flow
Webhook Configuration
Opportunity Create Flow
🧩
Stripe Customer ID Deduplication
Flow checks Account for existing Stripe Customer ID before creating a new customer; prevents duplicate Stripe customer records across Opportunities.
🧾
Invoice Creation Sequence
Create Invoice → Add Invoice Items → Finalize Invoice — three sequential Stripe Apex action steps, all inside a single Salesforce Flow.
📝
Opportunity Field Updates
Stripe Invoice ID and Stripe Invoice URL written back to the Opportunity record automatically as the final step of the flow.
Phase 03
Phase 03

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.

Webhook Configuration
Opportunity Update Flow
Webhook Configuration
Opportunity Update Flow
🔀
Create vs. Update Separation
Dedicated flow for update trigger prevents duplicate invoice creation on every Opportunity field change; this is the most common failure mode in Stripe–Salesforce implementations.
Stage & Amount Validation
Flow validates Opportunity stage and amount conditions before running any Stripe Apex actions; ensures invoice generation only fires for qualified Opportunities.
🔁
Invoice ID Existence Check
Checks for existing Stripe Invoice ID on the Opportunity before creating a new invoice; enables safe re-running of the flow after amendments.
Phase 04
Phase 04

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.

30-day reminder email flow
30-day reminder email flow
📅
30-Day Scheduled Path
Salesforce Flow scheduled path waits 30 days from transaction creation date; rechecks Stripe Payment Status before firing email alert.
📧
Dual Record Type Email Logic
Separate Email Alert actions for Profit and Nonprofit Opportunity record types; different templates served to each without requiring separate flows.
🏆
Auto Stage Update on Payment
When Stripe Payment Status confirms completion, flow automatically updates Opportunity stage to Closed Won; eliminates manual pipeline updates.
Phase 05
Phase 05

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.

Stripe Event Payment Status Update Flow
Stripe Event Payment Status Update Flow
🔌
Webhook Event-Driven Trigger
Flow fires on Stripe Event record creation in Salesforce; maps Stripe event type to Opportunity payment status update (Paid / Failed) with no manual step.
🧪
Full Sandbox Validation
Payment success and failure scenarios tested in Stripe sandbox; Invoice ID, Invoice URL, and Stripe Payment Status verified on Opportunity records before production sign-off.
🚀
Production-Ready Architecture
Entire implementation built for direct migration to production; only the one-time paid app installation required at go-live, no rework of flows or configurations.

Impact & Outcomes

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.

4
Complete automated Salesforce payment flows built and validated in sandbox, covering every Stripe transaction scenario
100%
Stripe invoice generation automated on Opportunity create — zero manual invoice steps required after go-live
Real-time
Stripe payment status sync to Salesforce Opportunity records via webhook events, replacing a daily manual reconciliation task
30-day
Automated unpaid invoice reminder emails with separate logic for Profit and Nonprofit record types, no human scheduling required
Stripe Invoice ID and Invoice URL automatically populated on every qualifying Opportunity record at creation
Stripe Customer ID stored on Account records — no duplicate customer creation across multiple Opportunities
Stripe Payment Status updated dynamically on Opportunity records based on incoming Stripe webhook events (Paid / Failed)
30-day pending payment reminder email automation configured and validated in sandbox for both record types
Opportunity stage auto-updated to Closed Won when Stripe payment confirmed — no manual pipeline management
All four flows, custom fields, and webhook configuration tested end-to-end in sandbox and ready for production deployment

"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 · 2024

Frequently Asked Questions

Stripe Salesforce Integration — Common Questions Answered

Stripe integrates with Salesforce through the Stripe for Salesforce Platform app available on AppExchange. Once installed and authorized, Salesforce Flows can invoke Stripe Apex actions to create customers, generate invoices, and finalize payments. Stripe webhooks then push payment status events back into Salesforce, updating Opportunity records automatically without manual intervention. For nonprofits, the key advantage is that both the payment record and the donor or payer Opportunity record stay synchronized in real time — eliminating the need to check two platforms separately. Learn more about our Salesforce practice →
Yes. A Salesforce Record-Triggered Flow on the Opportunity object can fire on record creation, check whether a Stripe customer already exists for the related Account, create one if not, then invoke Stripe Apex actions to generate, itemize, and finalize an invoice — all without code. The resulting Stripe Invoice ID and hosted payment URL are written back to the Opportunity record automatically. Stage and amount conditions are checked first so only qualifying Opportunities trigger the invoice generation sequence.
For Opportunity payment status tracking, you need at minimum invoice.payment_succeeded and invoice.payment_failed. These events create Stripe Event records inside Salesforce, which a separate Record-Triggered Flow then monitors to update the Stripe Payment Status field on the related Opportunity. Additional events like customer.created and invoice.finalized are useful for audit completeness. The Stripe webhook URL provided by the Salesforce app must be registered in the Stripe dashboard before events will flow into the org.
A Salesforce Record-Triggered Flow with a scheduled path handles this. When an Opportunity is created or updated with a pending payment status, the flow sets a 30-day wait from the transaction creation date. After the wait, it re-checks the payment status field. If still unpaid, it triggers an Email Alert action. Separate alert templates can be created for different record types — for example, profit-oriented versus nonprofit donation flows. This means the correct message and sender identity goes to each recipient without needing multiple separate flows.
Yes. Twopir Consulting delivers Salesforce implementations for US-based nonprofit and mission-driven organizations. Our team handles Salesforce Nonprofit Cloud, payment automation, Stripe integration, and operational workflow builds — all delivered from our global team with US-timezone coverage. We've served over 500 clients across the US, UK, Australia, UAE, and Canada. As a Salesforce Gold Partner and HubSpot Gold Solution Partner with 12+ years of delivery history, we specialize in automation-first implementations for organizations that need their CRM to do the operational work.

More From Twopir

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