Share:

QuickBooks Import — Consolidated Report

Updated 18 March 2026  |  Both Sandboxes Verified & OFX Files Uploaded

What's New — 18 March 2026 (Fixing Maddy's Reconciliation Issue)

The Problem (16 March)

Maddy found the original OFX bank feed didn't reconcile against the Transfer Detail. The feed showed $3,198.51 gross for Mar 12, but the actual bank transfer was $1,738.51 net. The original feed had gross individual customer payments without refunds, chargebacks, or Square processing fees — so the numbers didn't match what the bank received.

The Fix

Rebuilt the OFX bank feeds to include refunds, chargebacks, and processing fees alongside payments. Created two options in separate sandboxes so Elena & Maddy can compare which reconciles better:

Two Sandboxes — Same Data, Different Layout

Both contain identical data: 133 Chicago recurring invoices + 133 payments ($25,297) from Mar 1-12 2026. Both OFX feeds include refunds ($5,148), chargebacks ($100), and processing fees ($2,198). The only difference is how the transactions are organised.

SandboxRealm IDOptionStatus
US ab919341456620900494Option 1: 3 Split Feeds
Recurring / Sales / Deposits — separate account per type
VERIFIED & UPLOADED
US dcf79341456620880515Option 2: 2 Combined Feeds
All payments in one account + bank deposit payouts separate
VERIFIED & UPLOADED

Option 1: 3 Split Feeds (Sandbox A — US ab91)

3 separate bank accounts — one per payment type. Each includes its proportional share of refunds, chargebacks, and fees.

FileTransactionsNet AmountQB AccountDownload
QB_Recurring137 txns$24,659.81Square Recurring↓ OFX
QB_Sales83 txns$48,805.35Square Sales↓ OFX
QB_Deposits220 txns$8,411.15Square Deposits↓ OFX
Combined$81,876.31

Option 2: 2 Combined Feeds (Sandbox B — US dcf7)

1 bank account with all payment types combined + 1 deposit feed matching actual bank transfers.

FileTransactionsNet AmountQB AccountDownload
QB_SquareFeed437 txns$81,876.30Square↓ OFX
QB_SquareDeposit11 payouts$8,652.30Square Deposit↓ OFX

Reference Files

FilePurposeDownload
QB_BalanceTransfer CSVFull detail for review — not uploaded to QB↓ CSV
QB_Refunds CSVRefunds detail for review↓ CSV
Next step: Elena & Maddy open each sandbox → Banking tab → For Review → try matching transactions to invoices. Whichever reconciles better = the approach we use for production.

What Was Verified (18 March)

CheckSandbox A (ab91)Sandbox B (dcf7)
Invoices133 — correct format, no dupes133 — correct format, no dupes
Payments linked to invoices128 → Square Recurring133 → Square
Bank accounts (created in QB UI)Square Recurring, Sales, DepositsSquare, Square Deposit
OFX files uploaded3 files uploaded2 files uploaded
Photo Package itemID: 24ID: 24
Deposits income accountYESYES
Refunds & Chargebacks expenseYESYES

7 IES template payments exist in each sandbox (Amy's Bird Sanctuary, etc.) — these came pre-loaded and cannot be deleted. They are harmless — ignore them.

Overview

The QuickBooks automation handles two sides of the ledger automatically, every day at 7 AM with zero manual downloads or data entry:

Architecture: Two Sides of QB

SideWhat It ContainsHow It Gets ThereStatus
A/R (Sales > Invoices)CRM invoices + Square payments linked to themAutomated via QB API — fully automaticDONE
Banking TabBank feed transactions matching actual bank depositsOFX file upload — Natalia uploads daily (~30 sec)READY TO TEST

QB Online has no API for uploading bank feed transactions. The OFX file generation is fully automated (Payouts API → OFX), but the upload step requires a human click in the Banking tab. This is a QB platform limitation.

How It Works — Fully Automated Pipeline

Zero Manual Downloads — Everything via API

The original plan required manual Transfer Detail CSV downloads from the Square Dashboard for refunds and chargebacks. This has been eliminated using the Square Payouts API, which provides the same data programmatically.

Step A: CRM → QB Invoices (Automated)

A
Script: qb_daily_pipeline.js runs daily at 7 AM.
Pulls Daily Accounting Sales from CRM, creates invoices in QB with confirmed format (Photo Package item, Customer Name, Finance Start Date as due date). Builds the A/R side — what customers owe.

Step B: Square Payouts API → Bank Feed Files (Automated)

B
Script: qb_balance_transfer.js runs daily at 7 AM.
Pulls from three Square API endpoints to get the complete picture:
API EndpointWhat It CapturesPreviously
/v2/payments All completed payments with customer IDs, amounts, card details Already automated
/v2/payouts Bank deposits — actual amounts deposited to the bank each day Was: manual CSV download
/v2/payouts/{id}/payout-entries Complete breakdown per deposit: payments (CHARGE), refunds (REFUND), chargebacks (OPEN_DISPUTE), fees, adjustments Was: manual Transfer Detail CSV

Step C: Natalia Matches in QB (Manual)

C
Upload OFX files to QB Banking tab, match payments to invoices. This is the only manual step — requires accounting judgment.

Payouts API — Verified Against Real Data

Tested against the same dates Elena provided Transfer Detail CSVs for. The API captures the same data automatically:

Mar 10 Payout (covers Mar 9 transactions)

Entry TypeCountAmountPreviously
CHARGE (payments)28+$1,287.66Already automated
REFUND7-$350.00NEW — was manual CSV only

Matches Elena's Mar 9 CSV: 7 deposit refunds at $50 each = -$350. ✓

Mar 12 Payout (covers Mar 11 transactions)

Entry TypeCountAmountPreviously
CHARGE (payments)17+$748.71Already automated
OPEN_DISPUTE (chargeback)1-$50.00NEW — was manual CSV only

Matches Elena's Mar 11 CSV: 1 open dispute for $50. ✓

Confirmed: The Payouts API captures refunds, chargebacks, and dispute adjustments automatically. No manual downloads from the Square Dashboard needed.

What Natalia Does Each Day

All files are generated by 7 AM. Natalia's daily process:

1
Open QB Online. Banking tab.
2
Upload OFX files: Assign each file to its bank account. Map: Date, Description, Amount. Format: MM/DD/YYYY.
3
Banking tab → For Review. Match each payment to its invoice:
  • QB suggests match → verify → click Match
  • No match suggested → search by CRM Reference ID
  • No invoice exists → categorize directly or create invoice first
4
Fees are in the feed as a lump sum deduction. Natalia categorizes to an expense account.

Time: Upload ~2 min. Matching ~15-20 min/day.

What Stays Manual vs What's Automated

TaskWhoStatus
CRM Daily Sales → QB InvoicesAutomated (7 AM)BUILT
Square Payments → OFX Bank FeedsAutomated (7 AM)BUILT
Refunds & Chargebacks in OFXAutomated (Payouts API)VERIFIED
Processing Fees in OFXAutomated (payout entries)BUILT
Transfer Detail CSV downloadELIMINATED — Payouts API replaces manual download
Upload OFX files to QBNatalia~2 min/day
Match payments to invoicesNatalia~15-20 min/day
Cash on Hand depositsNataliaUnless viewers create Square receipts

Non-Matched Transactions

ScenarioWhyHandling
Payment, no invoiceWalk-in/cash saleNatalia creates invoice or categorizes directly
Invoice, no paymentCustomer hasn't paidInvoice stays open in A/R
Amount mismatchPartial installment paymentQB handles partial payments natively
Name mismatchCard name vs CRM nameCRM Reference ID is the tiebreaker
RefundsCustomer refundedNegative entry in bank feed. Refund Receipt linked to original invoice.
ChargebacksCustomer disputeNegative entry in bank feed. Categorize to Refunds & Chargebacks expense.

Elena & Maddy's Confirmed Decisions

Original 12 Decisions (12 March 2026)

#DecisionStatus
1Square data pull — fully automated via API
2Deposits — separate bank feed, Income account
3Item name — "Photo Package"
4Invoices — only original package amount
5Recurring — 1 invoice per sale (not per payment)
6QB categories — Deposits + Cash on Hand
7Consolidated report — Balance Transfer with refunds/CB/fees
8Manual section — confirmed
9Final test — QB sandbox only (no IES trial)
10Invoice format — Customer Name, mm/dd/yyyy, Ref + payments + Booker, Finance Start Date as due date
11Pending deposits — excluded (only cleared)
12Non-matched — confirmed handling

Invoice Format (Confirmed)

QB Invoice FieldSourceExample
Customer NameCRM (Customer Name, NOT Model Name)John Smith
Invoice DateSale Date (mm/dd/yyyy)03/09/2026
Line ItemReference + payments + bookerC2807460, 12 monthly payments of $291.67, Booker: Michael
AmountPackage Price$3,500.00
Reference / POCRM Reference IDC2807460
MemoStudio + Booker (NO City)Chicago Studio, Booker: Michael
Due DateFinance Start Date (NOT Sale Date)03/15/2026

Follow-Up Decisions (13-14 March 2026)

QuestionAnswer
Q1: Booking depositsDeposits income account (no invoice)
Q2: Studio sales without CRM matchNatalia handles manually
Q3: Historical pullSkip — focus on refunds/fees/chargebacks first
Q3a: Duplicate customersMerge under one QB customer, separate invoices per sale
Q4: Historical invoicesOpen Ledger from Debt Ledger (Dec 31, 2025 balances)
Q5: Non-recurringDeposits → income, walk-ins/office → Photo Package (Natalia manual)
Q6: Cancelled/defaultedPENDING — Elena checking with Oscar & Mike
Q7: Multiple sales per customerPIF = nothing, new sale = new invoice
Q8: RefundsRefund Receipt linked to original invoice
Q9: ChargebacksCustom "Refunds & Chargebacks" expense category
Q10: Processing feesIn bank feed — Natalia categorizes manually
Q11: Open ledgerPull from Debt Ledger (Dec 31 2025)
Q12: CitiesChicago first

What's Next

#StepWhoStatus
1Compare both sandboxes — Banking tab → For Review → try matchingElena / MaddyNOW
2Pick winning option (3 split or 2 combined)Elena / MaddyAfter testing
3Confirm Q6 (cancelled accounts — bad debt vs sales)Elena + Oscar/MikeBefore go-live
4Open Ledger — Dec 31 2025 balances from Debt LedgerAutomatedAfter option chosen
5Natalia tests full daily workflow in sandboxNataliaAfter open ledger
6GO LIVEEveryoneApril 1, 2026

Full History

Week 1 (9-14 Mar)

Week 2 (16-18 Mar)

Updated: 18 March 2026  |  All decisions confirmed (Q1-Q12, Q6 pending Oscar/Mike)  |  Chicago first
BOTH SANDBOXES READY: US ab91 (3 split feeds) + US dcf7 (2 combined feeds)
GO-LIVE TARGET: April 1, 2026