Pages

Friday, March 6, 2026

Designing Salesforce Payment Workflows with QuickBooks and Stripe (Part: 1)

Guess blog by: Antonina Kharchenko

Introduction: Understanding Salesforce Payment Workflows


Managing client records and financial data across Salesforce and external systems is complex. Client data exists in Salesforce, but to create subscriptions, invoices, or records in Stripe or QuickBooks, teams often rely on spreadsheets, CSV exports, or emails. When a client updates an address, email, or billing detail, these changes must be manually reflected in Stripe or QuickBooks, increasing the chance of errors and delays.

Most business applications remain isolated: only about 29% of systems are integrated, and 95% of IT leaders report challenges with data integration. These disconnected systems force teams to rely on manual data transfers like spreadsheets and emails when synchronizing client records between Salesforce, payment providers, and accounting platforms.

This article focuses on how to design reliable payment workflows in Salesforce when integrating with systems like Stripe or QuickBooks. We’ll explore how to structure objects, define workflow triggers, model integration fields, and automate billing-related processes so that customer records, subscriptions, and invoices stay aligned across systems. These design principles help reduce manual work, improve data consistency, and support scalable billing workflows directly from Salesforce.


Designing Salesforce Payment Workflows


Payment Process, image from Breadwinner

A payment workflow in Salesforce is more than building Stripe or QuickBooks to Salesforce integration. It’s about structuring objects, fields, and automation so that client data, subscriptions, and invoices are created and updated reliably. Proper workflow design reduces manual work, ensures data consistency, and makes integration predictable.

1. Define the Workflow Triggers
  • Choose the initiating events: Typically, a workflow begins with a Salesforce object changing state. For example:
    • A new Account or Contact is created → trigger client provisioning in Stripe or QuickBooks.
    • An Opportunity ready for billing → trigger subscription creation or invoice generation.
  • Determine conditional logic: Decide when the workflow should execute, such as only for specific Opportunity types, regions, or billing plans. This avoids unnecessary API calls.

2. Model Integration Fields in Salesforce
  • External system IDs: Store QuickBooks or Stripe customer IDs on the Salesforce Account or Contact object. This allows reliable mapping for updates.
  • Payment and subscription status: Include fields such as Subscription Status, Invoice Status, Last Payment Date, or Last Sync Timestamp. These fields make it possible to monitor workflow execution and detect failures.
  • Custom fields for required external data: Map required fields from QuickBooks or Stripe that Salesforce does not track natively (e.g., tax codes, billing cycles, Stripe plan IDs).

3. Decide on Automation Tools
  • Flow vs Apex:
    • Flow is suitable for standard automation, like creating a subscription after an Opportunity closes, or updating a QuickBooks record when an Account changes.
    • Apex may be needed for complex logic, bulk updates, or handling retries for failed API calls.
  • Process orchestration: Combine Flows with scheduled or triggered updates for tasks such as:
    • Periodic reconciliation of invoices.
    • Updating subscription status daily from Stripe.
    • Keeping Salesforce recurring payment records aligned with external payment and accounting systems

4. Map Data Flow Direction
  • Single source of truth: Define which system owns each piece of data. For example, Salesforce may own client contact info, while Stripe owns subscription history.
  • One-way vs two-way sync: Determine if updates flow only from Salesforce → external system, or if external changes also flow back. One-way sync is simpler and reduces conflicts, two-way sync adds visibility but requires careful conflict resolution.

5. Sequence and Error Handling
  • Workflow sequence example:
    • Opportunity meets billing criteria.
    • Validate client data in Salesforce.
    • Push the customer record to Stripe or QuickBooks.
    • Create a subscription or invoice in an external system.
    • Record external ID and status back in Salesforce.
    • Log errors or retries if any step fails.
  • Monitoring and alerts: Include fields or reports to track failed updates, partial syncs, or API errors. Set up notifications for admins so issues can be resolved quickly.

Existing Solutions to Solve the Problem in Salesforce


There are several approaches to integrating Salesforce with financial systems to manage client data, subscriptions, and Stripe payments Salesforce. Each approach comes with trade-offs in terms of effort, reliability, and maintainability.


Summary: Each integration of Salesforce payment solutions has strengths and limitations. Organizations should weigh ease of setup, level of automation, and long-term maintainability when selecting a solution, for example to integrate QuickBooks with Salesforce.


Step-by-Step: Managing Salesforce Payment Workflows


To demonstrate how Salesforce payment workflows can be implemented, we reviewed available solutions on the AppExchange. Building a custom integration or using middleware would require more development time and maintenance. Prebuilt solutions provide a quicker way to get started while still illustrating the core workflow concepts. 

Salesforce Stripe integrations on AppExchange

After evaluating options, we selected Breadwinner, which can connect Salesforce with QuickBooks or Stripe. For this guide, we’ll use the Salesforce Payments Stripe app as an example.

Payments Integration on AppExchange

The focus of this guide is on synchronizing client records, creating subscriptions, and handling updates reliably, ensuring Salesforce remains aligned with the external system.


Step 1: Install the App

Install the Breadwinner Payments Integration from AppExchange into your Salesforce org. Assign the required permissions to integration users and admins as per the app’s setup guide.

Get the app


Step 2: Connect the Stripe

Use the app’s authentication flow to link a Stripe account. This establishes a secure connection so Salesforce can push and receive data.

Connect with a Payment Processor


Step 3: Configure Object Mappings

Map Salesforce objects (Accounts, Contacts, Opportunities, or custom objects) to Stripe customers and subscriptions. Identify which fields from Salesforce will populate the corresponding Stripe fields, such as email, billing address, and subscription plan.

Example of Associated Salesforce Account


Step 4: Test Synchronization

Test the workflow with a small set of records. Verify that client records, subscriptions, and related data are created correctly in Stripe and that updates in Salesforce are reflected as expected.

Create an Invoice or Subscription from Salesforce


Step 5: Monitor and Refine

Use app-provided logs and Salesforce reports to monitor workflow execution. Check for errors, partial syncs, or missing data, and adjust field mappings, triggers, or validation rules as needed.

Key Takeaway: Using a prebuilt AppExchange app allows you to connect Salesforce to an external system, synchronize client records, and automate subscription or invoice creation, keeping both systems aligned without complex coding.

Agentforce and Payment Integrations

Payment integrations can also support automation through Agentforce. When billing and payment data from Stripe or QuickBooks is synchronized with Salesforce, Agentforce can use this data to trigger workflows, update account status, or initiate follow-up actions based on payment activity.

Breadwinner provides integration apps listed on AgentExchange, the marketplace for Agentforce extensions within Salesforce. These apps allow synchronized financial data to be used reliably in Agentforce workflows and automation.

Breadwinner on AgentExchange

In practice, this type of setup allows teams to manage billing workflows directly from Salesforce, while payment processing and financial records remain managed in external systems such as Stripe or QuickBooks.


Closing Thoughts: Building Reliable Salesforce Payment Workflows


Payment integrations are not only about connecting systems, they are about designing workflows that keep customer, subscription, and financial data consistent across platforms.

When Salesforce is used as the operational hub for sales and customer management, integrations with platforms like Stripe and QuickBooks make it possible to automate billing processes while maintaining a clear and reliable source of truth for different types of data.

The key principles discussed in this article help reduce manual work and improve data reliability across systems. Whether organizations choose prebuilt AppExchange applications, middleware platforms, or custom integrations, the most successful implementations start with well-designed workflows inside Salesforce.

In the next article, we’ll explore the operational side of Salesforce payment workflows in more detail, including common integration challenges, typical failure scenarios, and practical recommendations for building stable and secure payment integrations.


Monday, February 9, 2026

Excel: Copy Formula

One of the most powerful features of Excel is the formula and the ability to copy the formula easily across rows. But in a scenario where rows are filtered in other columns, the shortcut will not work -- this applies to both Excel desktop and Excel online

Rows filter >> double click bottom left of formula cell

  • will copy the value to all the rows below if all rows below are blank
  • will stop copying when it reaches a row (filtered or unfiltered) that is not blank


Rows filter >> manual copy and paste the formula

  • works, the filtered rows will be ignored, and the value will not be overwritten from the paste


Salesforce: ListEmail

In addition to the B2B Marketing Analytics - Account Engagement Emails and Account Engagement Email Templates Datasets discussed here. We can also retrieve email statistics sent from MCAE/Pardot using SOQL into the ListEmail object in Salesforce. 

The ListEmail object represents a list email sent from Salesforce or from Account Engagement, and the email sent result is synced to Salesforce. When the list email is sent, recipients are generated by combining the recipients from ListEmailIndividualRecipients and ListEmailRecipientSource. Duplicate and other invalid recipients are removed. The result is recipient sent any given list email. ListEmail has a one-to-many relationship with ListEmailRecipientSource and ListEmailIndividualRecipient. This object is available in API version 41.0 and later.

To differentiate emails sent from Salesforce or Pardot, check the SentVia field. 

SELECT SentVia, count(Id) FROM ListEmail WHERE CreatedDate = this_year GROUP BY SentVia

Each row represents an email sent; no recipients are on this object because the email can be sent to many people. Check ListEmailIndividualRecipient for email recipients, which is a child of ListEmail.


Reference:

Wednesday, December 3, 2025

Salesforce: Campaign Member Deletion

Contact or Lead Deletion

When a Contact or Lead used in a Campaign Member is deleted, all Campaign Members for that lead or contact will also be deleted.

Undeleting the Contact or Lead from the Recycle Bin will restore all Campaign Members for the Contact or Lead, including the Status. However, the Last Modified Date and By of the Campaign Member record will be updated with the timestamp of when the Contact or Lead is undeleted, along with the name of the user who performed the undeletion. The Campaign Member ID will be restored to the original Campaign Member ID. 


Campaign Deletion

When a Campaign is deleted, all Campaign Members associated with that Campaign will also be deleted.

Undeleting the Contact from the Recycle Bin will restore all Campaign Members for the Campaign, including the Status. However, the Last Modified Date and By of the Campaign Member record will be updated with the timestamp of when the Campaign is undeleted, along with the name of the user who performed the undeletion. The Campaign Member ID will be restored to the original Campaign Member ID. 


CampaignMember Deletion

When a Campaign Member record is deleted, it is not sent to the Recycle Bin, so it cannot be restored. Vote for this idea.


Bonus: In the CampaignMember object, there are LeadId, ContactId, and LeadOrContactId fields. For a Lead in Campaign Member, when the Lead converted to a Contact:

  • The LeadOrContactId will be updated from LeadId to ContactId
  • The LeadId will not be changed
  • The ContactId will be populated with the Contact ID


Monday, December 1, 2025

Excel: Count of Duplicate

We have recently encountered duplicate data entries being created in Salesforce by automation, resulting in multiple entries with the same lookup value. 

A spreadsheet is still one of the most widely use tools shared among business users. In this blog, I'll have 2 scenarios:

1. Mark how many duplicate roles based on a key field.

I know this can be achieved easily with a pivot table, but it would be great to see the number in the table itself.

sample: Excel formula for row 2, and the unique key is in column E

=COUNTIF(E:E,E2)


2. Mark rows to be kept and to be deleted

From the duplicate row, we need to keep 1 row and delete the rest.

Excel formula for row 2 =IF(COUNTIF($E$2:E2,E2)=1, "Keep", "Delete")

Excel formula for row 3 =IF(COUNTIF($E$2:E3,E3)=1, "Keep", "Delete")



Wednesday, November 5, 2025

Salesforce: Upsert

For upsert action in Salesforce, if the key field is not an External ID, you may encounter:

"UPSERT requires the external ID field to be specified"

This error occurs because Salesforce's upsert operation relies on an External ID to determine whether to insert a new record or update an existing one. Without an External ID, Salesforce cannot perform this match.

Additional Notes:

  • If the field is not unique, you may encounter a DUPLICATE_EXTERNAL_ID error if multiple records match the same value during an upsert.
  • Auto-number fields cannot be used as External IDs

Once you select Action = Upsert in Salesforce Inspector, you need to enter the External ID



Similarly, if you are using Workbench, you can select the External Id field from the selected object, as shown in the screenshot below; the Id and Name fields can be used as the External Id field by default.



Page-level ad