Automated Stripe Revenue & Fee Reconciliation (Make.com)
Eliminate manual bookkeeping by syncing Stripe charges and transaction fees directly to QuickBooks Online via Make.com.
Tools: Stripe → QuickBooks Online
Platform: Make.com
Short Answer
Every Stripe payment automatically creates a Sales Receipt in QuickBooks Online, correctly mapping gross amounts, subtracting Stripe fees, and ensuring the customer record is deduplicated using Make.com logic.
The Problem
Businesses often struggle to reconcile Stripe payments in QuickBooks because Stripe payouts are 'net' of fees. Manual entry leads to discrepancies between gross sales and the actual bank deposit, making tax season and audits a nightmare.
The Outcome
Every Stripe payment automatically creates a Sales Receipt in QuickBooks Online, correctly mapping gross amounts, subtracting Stripe fees, and ensuring the customer record is deduplicated using Make.com logic.
Step-by-Step Guide
1. **Create a New Scenario**: In Make.com, click 'Create a new scenario' and add the **Stripe** 'Watch Events' module.
2. **Configure Stripe Webhook**: Click 'Add' to create a new webhook. Log into Stripe when prompted. Select `charge.succeeded` as the event type. This ensures the scenario triggers instantly (Push) rather than Polling.
3. **Sanitize Stripe Data**: Add a **Tools** 'Set Variable' module. Use the formula `{{add(item.amount; 0) / 100}}` for the Gross Amount and `{{add(item.fee; 0) / 100}}` for the Fee, as Stripe sends data in cents (integer form).
4. **Search for QBO Customer**: Add the **QuickBooks Online** 'Search for Customers' module. Filter by 'Email' using the `Customer: Email` field from Stripe. Set the 'Limit' to 1.
5. **Add a Router**: Connect a **Router** module to handle new vs. existing customers.
6. **Create Missing Customer (Path A)**: On the first path, set a filter: `Total number of bundles` from the search module is equal to `0`. Add a QBO 'Create a Customer' module using Stripe's name and email fields.
7. **Map Sales Receipt (Path B)**: On the second path (or after customer creation), add the QBO 'Create a Sales Receipt' module. Set the 'Customer' field using a **Switch** or **if()** function to select either the Search ID or the New Customer ID.
8. **Handle Fees and Items**: Under 'Lines', add two items:
- Line 1: Service/Product for the sale (Gross Amount).
- Line 2: A 'Stripe Fee' service item with a negative value using `{{-1 * (fee_variable)}}` to ensure your bank balance matches exactly.
9. **Initialize Error Handling**: Right-click the QBO module and select 'Add error handler'. Use the 'Break' directive to store the execution and allow for manual retries if QBO is down or a token expires.
Data Mapping
| Stripe Source Field | Transformation / Logic | QBO Destination Field | Requirement |
| :--- | :--- | :--- | :--- |
| `Customer: Email` | `trim(lower(email))` | `Customer / Search Key` | **Required** |
| `Amount` | `{{amount / 100}}` | `Line Item: Amount (Gross)` | **Required** |
| `Fee` | `{{fee / 100 * -1}}` | `Line Item: Amount (Fee)` | **Required** |
| `Currency` | `upper(currency)` | `Currency` | Optional |
| `ID (ch_...)` | `Stripe ID: {{id}}` | `Private Note / Memo` | Optional |
| `Created` | `parseDate(created; X)` | `Transaction Date` | **Required** |
Gotchas & Failure Modes
• **Decimal Divisor**: Stripe provides currency in 'cents' (e.g., $10.00 is `1000`). Forgetting to divide by 100 in Make.com will record a $1,000 sale in QBO.
• **Connection Refresh**: QBO OAuth tokens in Make.com are notorious for expiring if the scenario is inactive. Always check 'Connections' if you see a 401 Unauthorized error.
• **Bundle limits**: If using the 'Search' module, ensure your filter logic is strict (Email or Metadata ID) to avoid matching multiple customers with the same name, which would cause the scenario to fail or map to the wrong person.
• **Operation Usage**: Use a Filter immediately after the Stripe webhook to only process `charge.succeeded`. This saves your Make.com 'Operations' quota from being wasted on `payment_intent.created` events.
Verification Checklist
- [ ] **Run Once**: Use the 'Run Once' button and trigger a test payment in Stripe (Test Mode).
- [ ] **Check Blue Bubbles**: Click the number bubble above the QBO module to verify the JSON output reflects the correct decimal amount (e.g., 10.50 not 1050).
- [ ] **Verify Fee Item**: Open QBO and ensure the Sales Receipt has a negative line item that reduces the total to the 'Net' amount.
- [ ] **History Tab**: Check the 'History' tab in Make.com for any 'Data Mapping' errors or 400 Bad Request responses from QBO.
Ready to Automate?
Build this automation with Make.com in minutes.