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
PromptCreate

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.

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.

FAQs

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.

Related templates

Post yesterday's Square sales into QuickBooks every night

Every day at 2am, yesterday's Square takings are booked in QuickBooks with processing fees split out, so your books match what actually lands in the bank.

Square
QuickBooks Online
Slack Bot
Deterministic Code
Log every Shippo shipping label in QuickBooks and Sheets

Each time you buy a shipping label, the cost is booked as an expense against the carrier and added to a running ledger for month end reconciliation.

Shippo
QuickBooks Online
Google Sheets
Deterministic Code
Raise QuickBooks invoices from Podio projects marked ready

When a project in Podio is marked ready to invoice, the bill goes out in QuickBooks and the project record updates itself.

Podio
QuickBooks Online
Slack Bot
Deterministic Code
Consolidate weekly Stripe revenue and separate growth from FX

Every Monday, turn last week's Stripe payments in every currency into one home currency total and show what was real growth versus exchange rates.

Open Exchange Rates
Stripe
Google Sheets
+1
Agentic Task
Reconcile Stripe payouts against your Mercury deposits

Every weekday morning, check that every Stripe payout actually landed in your Mercury account, and hear about it only when one did not.

Stripe
Mercury
Slack Bot
Agentic Task
Book each night's Brex card spend into QuickBooks Online

Every night at 11pm, the day's Brex card charges get matched to vendors, booked as expenses in QuickBooks Online, and recapped in Slack.

Brex
QuickBooks Online
Slack Bot
Agentic Task

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.