Post Stripe payments to QuickBooks with fee splits

When a Stripe payment lands, automatically record a clean QuickBooks sales receipt with the processing fee broken out on its own line, so month-end reconciles cleanly.

Deterministic Code
StripeQuickBooks OnlineFinanceOperationsData Sync

Build a deterministic code workflow that records every successful Stripe charge as a sales receipt in QuickBooks Online, with the Stripe processing fee broken out as its own line so month-end reconciliation lines up cleanly. This is a fixed pipeline with no judgement calls, so build it as a code workflow, not an agent.

Trigger: a Stripe webhook on the charge.succeeded event.

When the webhook fires, run these steps in order:

1. Call Stripe Retrieve Charge using the charge ID from the webhook payload, and expand balance_transaction so the Stripe fee is included. Pull the gross amount, the Stripe fee amount, the customer email, the customer name, the charge ID, the currency, and the description or statement descriptor.

2. Call QuickBooks Query Entities to look up an existing Customer where PrimaryEmailAddr.Address equals the Stripe email. If exactly one Customer is found, use that Id.

3. If no Customer is found, call QuickBooks Create Customer with DisplayName set to the Stripe customer name (fall back to the email local-part if the name is missing) and PrimaryEmailAddr.Address set to the Stripe email. Use the returned Id.

4. Call QuickBooks Create Sales Receipt with two SalesItemLineDetail lines:

- Line 1: the gross charge amount, mapped to a product or service item that points at your sales income account.

- Line 2: a negative-amount line equal to the Stripe fee, mapped to an item that points at a Stripe Processing Fees expense account.

Set DepositToAccountRef to a Stripe Clearing bank account, CustomerRef to the Id from step 2 or 3, TxnDate to the charge created date, and put the Stripe charge ID in PrivateNote (and in a custom field if one exists) so the receipt can be deduplicated on retries.

Important details: Stripe returns amounts in the smallest currency unit (cents for USD), but QuickBooks expects decimal dollars, so divide by 100 (or the correct exponent for the currency) before posting. Before creating the receipt, run a quick Query Entities lookup for an existing Sales Receipt whose PrivateNote contains the Stripe charge ID and skip the create if one already exists, to keep retries idempotent. If the QuickBooks Query Entities call returns more than one Customer for the same email, pick the first active one and log a warning.

The user should be able to configure the Stripe Clearing deposit account, the Stripe Processing Fees expense account, and the default revenue item without editing code.

Additional information

What does this prompt do?
  • Watches Stripe for successful payments and posts each one to QuickBooks as a sales receipt the moment it lands.
  • Splits every receipt into a gross revenue line and a separate Stripe processing fee line, so your books line up with your payout reports.
  • Finds the matching QuickBooks customer by email, or creates one automatically using the name on the Stripe charge if no match exists.
  • Deposits payments to a Stripe Clearing account and routes fees to a Stripe Processing Fees expense account, the layout finance teams use to reconcile batched Stripe payouts cleanly.
What do I need to use this?
  • A Stripe account with permission to set up an outgoing webhook on successful charges.
  • A QuickBooks Online login for the company file you want receipts posted into.
  • A Stripe Clearing bank account and a Stripe Processing Fees expense account in your QuickBooks chart of accounts, plus a product or service item pointing at your sales income account.
How can I customize it?
  • Change which QuickBooks bank account receives the deposit, or which expense account the fees roll into.
  • Decide whether unknown customer emails should auto-create a new QuickBooks customer or pause for review.
  • Map specific Stripe products, prices, or statement descriptors to dedicated QuickBooks income items so revenue breaks down by line of business.

Frequently asked questions

Will this work if Stripe pays me out in batches rather than per charge?
Yes. Posting each charge to a Stripe Clearing account with the fee as its own line is the standard pattern for reconciling batched payouts. When Stripe deposits the net payout to your real bank, you transfer the matching amount out of the clearing account and the books balance.
What happens if the customer email is not already in QuickBooks?
The workflow creates a new QuickBooks customer using the name and email on the Stripe charge, then posts the receipt against that new customer. You can change this to flag the charge for review instead.
Do I need a specific QuickBooks Online plan?
Any QuickBooks Online plan that supports sales receipts works. Most teams running this are on Essentials, Plus, or Advanced.
Does this handle refunds and disputes?
No. This workflow only records successful charges. Refunds and disputes are best handled by a separate workflow that posts a refund receipt or adjustment.
What if the same Stripe charge fires twice?
The workflow stamps the Stripe charge ID on every receipt, so a follow-up run can recognize the duplicate and skip creating a second receipt for the same payment.

Close the books without chasing Stripe fees.

Connect Stripe and QuickBooks once, and every successful charge becomes a reconciliation-ready sales receipt the moment it lands.