Automated Chase Bank Reconciliation to QuickBooks Online (n8n)

Streamline business accounting by syncing Chase transactions to QuickBooks using n8n's self-hosted privacy and advanced logic.

Tools: ChaseQuickBooks Online

Platform: n8n

Short Answer

A fully automated n8n workflow that polls Chase via Plaid (or an email parser), cleans the messy bank descriptions using n8n Expressions, and creates categorized Expenses in QuickBooks Online in real-time, complete with duplicate prevention.

The Problem

Chase does not provide a direct webhook for transaction events, forcing manual CSV imports or expensive third-party aggregators. This delay creates a gap in real-time cash flow visibility and increases the risk of manual data entry errors during month-end reconciliation.

The Outcome

A fully automated n8n workflow that polls Chase via Plaid (or an email parser), cleans the messy bank descriptions using n8n Expressions, and creates categorized Expenses in QuickBooks Online in real-time, complete with duplicate prevention.

Step-by-Step Guide

1. **Establish Credentials**: In n8n, go to 'Credentials' and create a 'Plaid API' account (for Chase access) and a 'QuickBooks Online OAuth2' account. 2. **Set Trigger**: Add a 'Schedule' node. Configure it to run every 6 hours to stay within API rate limits while maintaining near real-time data. 3. **Connect Chase (Plaid)**: Add a 'Plaid' node. Set the Resource to `Transactions` and the Operation to `Get`. Link your Chase account via the Plaid Link portal. 4. **Filter Cleared Transactions**: Use a 'Filter' node to check if `pending` is `false`. Only synced 'cleared' transactions to prevent double-counting when status changes. 5. **Data Transformation**: Add a 'Code' node. Use JavaScript to clean the `name` field (e.g., stripping out transaction IDs like 'SQ *' using `.replace()`). Map the `amount` to a positive value as QBO Expenses expect positive numbers for debits. 6. **Duplicate Check**: Add a 'QuickBooks Online' node. Use the `Find` operation to search for an Expense with the same `Transaction ID` (stored in the QBO 'Memo' or 'Reference' field). 7. **Conditional Logic (If)**: Add an 'If' node. If the 'Find' node returns no results, proceed to create the record. 8. **Create QuickBooks Expense**: Add another 'QuickBooks Online' node. Set the Resource to `Expense`. Map the cleaned name to the 'Account' or 'Entity' and the amount to the 'Total Amount' field. 9. **Category Mapping**: Use a 'Switch' node before the QBO node to map Chase categories (from Plaid) to your QuickBooks Chart of Accounts IDs. 10. **Error Handling**: Create a separate 'Error Trigger' workflow. Use the 'Execute Workflow' node to alert you via Slack if the Chase API token expires or QBO returns a 401 error.