Intermediate~15 min setupFinance & FinanceVerified April 2026
QuickBooks logo
Stripe logo

How to Sync Stripe Customers to QuickBooks with Pipedream

Auto-create QuickBooks customer records when new customers are added to Stripe, keeping both systems in sync.

Steps and UI details are based on platform versions at time of writing β€” check each platform for the latest interface.

Best for

SaaS companies that need accurate accounting records without manual data entry between payment and bookkeeping systems

Not ideal for

Teams that need two-way sync or batch processing of historical customer data

Sync type

real-time

Use case type

sync

Real-World Example

πŸ’‘

A 25-person subscription software company processes 200+ new customers monthly through Stripe. Their bookkeeper spent 6 hours weekly copying customer details into QuickBooks for invoicing and reporting. Now customer records appear in QuickBooks within 30 seconds of Stripe signup, and the bookkeeper focuses on reconciliation instead of data entry.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently β€” Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into Pipedream

Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. All modules, filters, and field mappings are already configured β€” you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

QuickBooks Online account with admin permissions to create and manage customers
Stripe account with webhook permissions and ability to view customer data
Active subscriptions or payments flowing through Stripe that create customer records
QuickBooks Online Simple Start plan or higher for API access

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Customer NameName
6 optional fieldsβ–Έ show
Email AddressPrimaryEmailAddr
Phone NumberPrimaryPhone
Billing AddressBillAddr
Company NameCompanyName
Customer NotesNotes
Stripe Customer IDDisplayName

Step-by-Step Setup

1

Workflows > New Workflow

Create New Workflow

Go to pipedream.com and click Workflows in the left sidebar. Click the blue New Workflow button in the top right. You'll see an empty workflow canvas with a trigger placeholder. This is where you'll configure the Stripe webhook that fires when customers are created.

  1. 1Click Workflows in the left sidebar
  2. 2Click the blue New Workflow button
  3. 3Click on the trigger placeholder box
  4. 4Search for 'Stripe' in the app list
βœ“ What you should see: You should see a workflow canvas with 'Step 1: Trigger' highlighted and the Stripe app selected.
2

Workflows > Trigger > Stripe > New Customer

Configure Stripe Webhook Source

Select 'New Customer' from the Stripe triggers list. Pipedream will show you the webhook configuration screen. You need to connect your Stripe account first, then Pipedream automatically creates the webhook endpoint in your Stripe dashboard. The webhook fires instantly when customers are created in Stripe.

  1. 1Select 'New Customer' from the trigger options
  2. 2Click 'Connect Account' next to Stripe
  3. 3Authorize Pipedream in the Stripe popup
  4. 4Click 'Create Source' at the bottom
βœ“ What you should see: You should see 'Connected' with a green checkmark next to your Stripe account and a webhook URL generated.
⚠
Common mistake β€” Pipedream creates the webhook in live mode by default. If you're testing, toggle to test mode in the source configuration.
3

Stripe Dashboard > Customers > Add Customer

Test Stripe Connection

Create a test customer in your Stripe dashboard to verify the webhook works. Go to Stripe's dashboard, navigate to Customers, and click Add Customer. Fill in test details and save. Return to Pipedream and refresh the trigger step - you should see the customer data appear in the test event section.

  1. 1Open Stripe dashboard in a new tab
  2. 2Go to Customers > Add Customer
  3. 3Enter test name and email
  4. 4Click 'Add Customer'
  5. 5Return to Pipedream and click 'Test' on the trigger
βœ“ What you should see: The trigger step shows sample customer data with fields like id, email, name, and created timestamp.
Pipedream
β–Ά Deploy & test
executed
βœ“
QuickBooks
βœ“
Stripe
Stripe
πŸ”” notification
received
4

Workflows > + > QuickBooks > Create Customer

Add QuickBooks Step

Click the + button below your trigger step to add a new action. Search for QuickBooks and select it from the app list. Choose 'Create Customer' as the action type. This step will receive the Stripe customer data and create a matching record in QuickBooks Online.

  1. 1Click the + button below the trigger step
  2. 2Search for 'QuickBooks' in the apps list
  3. 3Select QuickBooks from the results
  4. 4Choose 'Create Customer' action
βœ“ What you should see: You should see a new QuickBooks step with 'Create Customer' selected and authentication fields visible.
⚠
Common mistake β€” Make sure you select QuickBooks Online, not QuickBooks Desktop - the API endpoints are different.
5

QuickBooks Step > Connect Account

Connect QuickBooks Account

Click 'Connect Account' in the QuickBooks step configuration. You'll be redirected to Intuit's authorization page where you select which QuickBooks company to connect. Choose the correct company and grant permissions. Pipedream needs read/write access to customers and basic company info.

  1. 1Click 'Connect Account' in the QuickBooks section
  2. 2Select your QuickBooks company in the Intuit popup
  3. 3Click 'Authorize' to grant permissions
  4. 4Confirm the connection in Pipedream
βœ“ What you should see: You should see 'Connected' with your company name displayed next to the QuickBooks logo.
Pipedream settings
Connection
Choose a connection…Add
click Add
QuickBooks
Log in to authorize
Authorize Pipedream
popup window
βœ“
Connected
green checkmark
6

QuickBooks Step > Name Field > Custom Expression

Map Customer Name Fields

In the QuickBooks step, you'll see form fields for Name, Email, and other customer properties. Click the Name field and select 'Custom Expression' from the dropdown. Map the Stripe customer name using the expression builder - typically this is steps.trigger.event.name or a combination of first/last name fields if they're separate in your Stripe data.

  1. 1Click in the Name field input box
  2. 2Select 'Custom Expression' from the dropdown
  3. 3Type steps.trigger.event.name in the expression box
  4. 4Click 'Use Expression' to confirm
βœ“ What you should see: The Name field shows {{steps.trigger.event.name}} and displays the test customer name in the preview.
⚠
Common mistake β€” QuickBooks requires unique customer names. If Stripe customers don't have names, use email addresses or add a timestamp suffix.
QuickBooks fields
DocNumber
CustomerRef.name
TotalAmt
Balance
DueDate
available as variables:
1.props.DocNumber
1.props.CustomerRef.name
1.props.TotalAmt
1.props.Balance
1.props.DueDate
7

QuickBooks Step > Email Field > Trigger Data

Map Email and Contact Fields

Map the customer email from Stripe to QuickBooks by clicking the Email field and selecting the email property from the trigger data. Add the customer's phone number if available in Stripe. You can also map billing address fields if your Stripe customers have complete address data stored.

  1. 1Click the Email field input box
  2. 2Select steps.trigger.event.email from the dropdown
  3. 3Map Phone field if available in your Stripe data
  4. 4Add billing address fields from Stripe if present
βœ“ What you should see: Email field shows the mapped Stripe email value and other contact fields are populated from the test data.
8

Workflows > + > Code > Node.js

Add Duplicate Prevention

Click the + button to add another step before the QuickBooks action. Search for 'Code' and select 'Run Node.js Code'. This step will check if the customer already exists in QuickBooks before creating a duplicate. You'll write a simple lookup using the QuickBooks API to search by email address.

  1. 1Click + between the trigger and QuickBooks steps
  2. 2Search for 'Code' and select it
  3. 3Choose 'Run Node.js Code' action
  4. 4Move this step above the QuickBooks create action
βœ“ What you should see: You should see a code editor with a basic Node.js template and the step positioned before QuickBooks.
⚠
Common mistake β€” The code step needs the same QuickBooks connection - add it in the step configuration before writing the lookup code.
9

Code Step > Editor

Configure Code Step Logic

In the code editor, write logic to search QuickBooks for existing customers with the same email. If found, update the existing customer instead of creating a duplicate. If not found, pass the data through to create a new customer. The code uses Pipedream's QuickBooks integration to query the customer list API.

  1. 1Connect your QuickBooks account in the code step
  2. 2Write the duplicate check logic in the editor
  3. 3Add error handling for API failures
  4. 4Test the code with your sample data
βœ“ What you should see: The code step shows no errors when tested and outputs whether to create or update the customer record.

This code goes in the Node.js code step to prevent duplicate customers by searching QuickBooks before creating new records. Paste it in the code editor between your trigger and QuickBooks create steps.

JavaScript β€” Code Stepexport default defineComponent({
β–Έ Show code
export default defineComponent({
  props: {
    quickbooks: {

... expand to see full code

export default defineComponent({
  props: {
    quickbooks: {
      type: "app",
      app: "quickbooks"
    }
  },
  async run({ steps, $ }) {
    const customerEmail = steps.trigger.event.email;
    const customerName = steps.trigger.event.name || customerEmail;
    
    try {
      // Search for existing customer by email
      const searchQuery = `SELECT * FROM Customer WHERE PrimaryEmailAddr = '${customerEmail}'`;
      const existingCustomer = await this.quickbooks.makeRequest({
        url: `/v3/companyid/query?query=${encodeURIComponent(searchQuery)}`,
        method: 'GET'
      });
      
      if (existingCustomer.QueryResponse?.Customer?.length > 0) {
        console.log(`Customer ${customerEmail} already exists`);
        return {
          action: 'skip',
          existing_customer: existingCustomer.QueryResponse.Customer[0],
          message: 'Customer already exists in QuickBooks'
        };
      }
      
      // Check for duplicate names
      const nameQuery = `SELECT * FROM Customer WHERE Name = '${customerName.replace(/'/g, "\\'")}'`;
      const nameCheck = await this.quickbooks.makeRequest({
        url: `/v3/companyid/query?query=${encodeURIComponent(nameQuery)}`,
        method: 'GET'
      });
      
      const finalName = nameCheck.QueryResponse?.Customer?.length > 0 
        ? `${customerName} (${steps.trigger.event.id.slice(-4)})` 
        : customerName;
        
      return {
        action: 'create',
        customer_name: finalName,
        customer_email: customerEmail,
        stripe_id: steps.trigger.event.id
      };
      
    } catch (error) {
      console.error('QuickBooks API error:', error);
      throw new Error(`Failed to check for existing customer: ${error.message}`);
    }
  }
});
10

Workflows > Test Workflow

Test Complete Workflow

Click 'Test' at the top of the workflow to run all steps with your sample Stripe customer data. Watch each step execute in sequence - the trigger fires, duplicate check runs, and QuickBooks creates or updates the customer. Check your QuickBooks dashboard to verify the customer appears correctly with all mapped fields.

  1. 1Click the 'Test' button at the top right
  2. 2Watch each step execute in the workflow
  3. 3Check for any error messages in red
  4. 4Verify the customer appears in QuickBooks
βœ“ What you should see: All steps show green checkmarks and you see the new customer in your QuickBooks customer list with correct details.
⚠
Common mistake β€” Test with a real Stripe customer to catch field mapping issues that don't show up with mock data.
11

Workflows > Deploy

Deploy Workflow

Click 'Deploy' to activate the workflow for live customer syncing. Pipedream will start processing real Stripe webhooks immediately. The workflow runs automatically whenever new customers are created in Stripe. You can monitor execution history and errors in the workflow's activity log.

  1. 1Click the green 'Deploy' button
  2. 2Confirm deployment in the popup dialog
  3. 3Switch to the activity tab to monitor runs
  4. 4Create a test customer in Stripe to verify live operation
βœ“ What you should see: The workflow status changes to 'Active' and you see live executions in the activity log when Stripe customers are created.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use Pipedream for this if you need instant customer syncing with custom logic. The webhook triggers fire within 15 seconds of Stripe customer creation, and the Node.js code steps let you handle duplicate prevention and field transformation that other platforms struggle with. Pipedream's QuickBooks integration handles OAuth refresh automatically. Skip this for bulk historical imports - use CSV export/import instead.

Cost

This costs about $0.002 per customer sync on Pipedream's free tier (20k operations/month). At 500 new customers monthly, you'll pay nothing. At 2000+ customers monthly, expect $15-20/month. Zapier charges $20/month for the same volume, and Make charges around $12/month but doesn't include the QuickBooks integration in their free tier.

Tradeoffs

Zapier handles QuickBooks field mapping better with dropdown selectors instead of custom expressions. Make has superior error handling and retry logic for API failures. n8n offers unlimited executions if you self-host but requires more technical setup for QuickBooks OAuth. Power Automate works well if you're already in Microsoft 365 but costs $15/user/month minimum. Pipedream wins because the code steps solve the duplicate customer problem that breaks other platforms - QuickBooks' unique name requirement kills basic field mapping approaches.

You'll hit QuickBooks API rate limits if you process customers in rapid bursts - Stripe can create 20+ customers per second during flash sales, but QuickBooks Online throttles to 500 requests per minute. The webhook will retry failed requests, but large customer batches might delay by 10-15 minutes. Customers with special characters in names (apostrophes, quotes) break the API query syntax and need escaping in your duplicate check code.

Ideas for what to build next

  • β†’
    Add Customer Updates β€” Create a second workflow to sync customer profile changes from Stripe to QuickBooks when addresses or contact info is updated.
  • β†’
    Sync Payment Methods β€” Extend the workflow to create payment method records in QuickBooks for each customer's default payment source.
  • β†’
    Connect Invoice Creation β€” Build a follow-up automation that creates QuickBooks invoices when Stripe customers make purchases or subscription payments.

Related guides

Was this guide helpful?
← QuickBooks + Stripe overviewPipedream profile β†’