Automated Wells Fargo Transaction Reconciliation to QuickBooks Online (n8n)
Streamline financial bookkeeping by syncing bank transactions to QBO using n8n and Plaid.
Tools: Wells Fargo → QuickBooks Online
Platform: n8n
Short Answer
A fully automated workflow that fetches Wells Fargo transactions via the Plaid node, sanitizes the data using n8n expressions, and intelligently creates expenses or sales receipts in QuickBooks Online while handling duplicate prevention and logging.
The Problem
Manual entry of bank transactions into QuickBooks is error-prone and time-consuming. Because Wells Fargo lacks a direct public API for n8n, businesses often struggle to automate the high-security bridge between banking data and accounting records.
The Outcome
A fully automated workflow that fetches Wells Fargo transactions via the Plaid node, sanitizes the data using n8n expressions, and intelligently creates expenses or sales receipts in QuickBooks Online while handling duplicate prevention and logging.
Step-by-Step Guide
1. **Establish Credentials**: In n8n, create 'Plaid API' credentials (using Client ID and Secret) and 'QuickBooks Online OAuth2' credentials via the Credentials menu.
2. **Configure Plaid Node**: Add the Plaid node to your workflow. Set the Resource to 'Transaction' and Operation to 'Get'. Ensure you use the 'Link' flow to authorize your Wells Fargo account.
3. **Set Up a Cron Trigger**: Add a 'Schedule' node to trigger the workflow daily or hourly, as bank APIs rarely support real-time webhooks for retail accounts.
4. **Filter Posted Transactions**: Add an 'IF' node after Plaid to check `{{ $json.pending }}`. Set the condition to 'Boolean is False' to ensure you only sync cleared transactions.
5. **Format Currency & Dates**: Use a 'Set' node or Expressions to ensure the amount is a float and the date is in `YYYY-MM-DD` format. Format: `{{ $json.date.split('T')[0] }}`.
6. **Duplicate Prevention Check**: Add a QuickBooks Online node with the 'Get Many' operation. Search for Expenses where the 'Private Note' or 'Reference Number' contains the unique Plaid Transaction ID to prevent double-posting.
7. **Conditional Logic**: Add an 'IF' node. If the Search result length is 0, proceed to 'Create'.
8. **Map Merchant to Vendor**: Use a 'MySQL' or 'Static Code' node (or a simple 'Switch' node) to map Wells Fargo merchant strings (e.g., 'WFM.COM') to your specific QBO Vendor IDs.
9. **Execute QBO Create**: Add the 'QuickBooks Online' node. Set Resource to 'Expense' and Operation to 'Create'. Map the Account, Total Amount, and Payment Type.
10. **Implement Error Handling**: Create a separate workflow or use the 'Error Trigger' node to catch failures (e.g., expired OAuth tokens) and send a notification to your IT channel.
Data Mapping
| Wells Fargo (via Plaid) | QBO Field | n8n Expression / Transformation | Required |
| :--- | :--- | :--- | :--- |
| `amount` | `Total Amount` | `{{ $json.amount }}` (May need `Math.abs()` for debits) | Yes |
| `date` | `Payment Date` | `{{ $json.date }}` | Yes |
| `name` | `Private Note` | `{{ $json.name }} (Plaid ID: {{ $json.transaction_id }})` | No |
| `transaction_id` | `DocNumber` | `{{ $json.transaction_id.substring(0, 20) }}` | No |
| `category[0]` | `Account ID` | Use a lookup table or `Switch` node to map to QBO Chart of Accounts | Yes |
Gotchas & Failure Modes
* **OAuth Expiration**: QuickBooks Online OAuth tokens refresh frequently. If n8n is self-hosted, ensure your `WEBHOOK_URL` environment variable is correctly set, otherwise the OAuth redirect will fail.
* **Rate Limits**: Plaid and QBO have rate limits. If processing years of data, use the 'Split In Batches' node (set to 50 items) to avoid hitting 429 errors.
* **Transaction Signing**: Wells Fargo often lists transactions as 'Pending' for 48 hours. Always filter for `pending: false` in n8n or you will end up with duplicate entries when the transaction ID changes from pending to posted.
* **Memory Usage**: For high-volume accounts, n8n's visual execution data can consume RAM. Set `EXECUTIONS_DATA_SAVE_ON_ERROR_ONLY=true` in your environment if running on a small VPS.
Verification Checklist
- [ ] **Test Mode**: Manually trigger the Plaid node and inspect the JSON output for correct field names.
- [ ] **Dry Run**: Set the QBO node to 'Disabled' and use a 'Wait' or 'No-Op' node to ensure the logic path reaches the end without errors.
- [ ] **Duplicate Test**: Run the workflow twice for the same transaction. The second run should be caught by your 'If Transaction Exists' node.
- [ ] **Credential Check**: Ensure the QBO connection shows 'Connection tested successfully' in the n8n Credentials UI.
- [ ] **Log Verification**: Check the 'Executions' tab in n8n to ensure data is passing through the 'Set' nodes with the correct data types (Numbers vs Strings).
Ready to Automate?
Build this automation with n8n in minutes.