Income Reconciliation

Match Every Bank Deposit to Your Recorded Income — Automatically

One Stripe payout can appear three times: in your email, in your income tab, and in your bank account. ExpenseBot's 4-layer matcher deduplicates them so your Schedule C gross receipts are bank-verified, not inflated.

60-day free trial · No credit card required · Plaid-secured bank connection

Why Bank Deposits Double-Count Your Income

A single $1,200 client payment leaves a trail in three places. Your Stripe dashboard sends an email: "Your payout is on its way." You log it in your income tab. Three days later the deposit lands in your bank account. Without reconciliation, that's $3,600 of recorded income from one payment — and a Schedule C that's 3× too large.

This isn't a user error — it's structural. Email-detected income, manual entries, and bank deposits are three legitimate sources that happen to describe the same money. The solution isn't to pick one source and ignore the others. The solution is deduplication: match them, and keep only the canonical record.

ExpenseBot connects your bank via Plaid, then runs every deposit through a 4-layer matcher against your existing income tab. Exact matches deduplicate silently. Near-matches surface for a one-click review. Genuinely new deposits are flagged as income gaps. The result: a Schedule C Line 1 (US) or T2125 Line 7 (Canada) that matches what actually hit your account.

How the 4-Layer Matcher Works

Each bank deposit is matched against your income tab in order. A match at any layer stops the chain — the deposit is deduplicated and marked as verified. Only deposits that fail all four layers surface for manual review.

Layer 1
Entity ID match

Exact platform transaction IDs — Stripe ch_..., PayPal txn_..., Square sqp_... — are matched first. One-to-one, deterministic, never wrong.

Layer 2
Normalized merchant match

Merchant names are stripped of punctuation, capitalization, and noise tokens before comparison. 'STRIPE, INC.' and 'Stripe Inc' resolve to the same entity.

Layer 3
Token-subset match

Handles the common case where the email says 'Stripe' and the bank says 'STRIPE TRANSFER' — or 'PayPal *Etsy' in the bank against 'Etsy' in your income tab.

Layer 4
AI canonicalization

For edge cases that pattern-matching can't resolve, Gemini canonicalizes both the bank description and your income entry to the same merchant. Catches platform rebrands, regional names, and abbreviated payees.

The Reconcile Button — One Session Per Month

Open the Income tab and tap Reconcile with bank. ExpenseBot walks you through every unmatched deposit — one at a time, no scrolling — and gives you three options:

Accept

Add the deposit as new income. ExpenseBot pre-fills merchant, amount, and date — tap once to confirm.

Edit

Adjust the merchant name, category, or amount before adding. Useful when the bank description is cryptic.

Ignore

Mark as not income — account transfers, refunds, repayments. The ignore rule sticks for that source going forward.

Once you've cleared all gaps, the Income tab shows a green Reconciled badge for that month. The Bank Summary in your year-end report tracks reconciliation status across all months — ✓ Reconciled (≥83% of months), ⚠️ Partial, or ℹ️ Not enabled — so your accountant can see at a glance whether your gross receipts are bank-verified.

Works With Every Platform That Pays You

The matcher handles the common mismatch between how payment platforms label payouts and how they appear in your bank feed. Weekly Stripe payouts that aggregate 12 individual charges are matched at the payout level — not per-transaction — so you never see phantom gaps.

Stripech_... and po_... IDs
PayPaltxn_... IDs
Squaresqp_... IDs
Shopify PaymentsWeekly payout matching
EtsyToken-subset + AI
Amazon SellerBi-weekly deposits
Generic ACH/EFTNormalized merchant
Interac e-TransferCanada — normalized name

Bank connection is read-only via Plaid (CASA Tier 2 certified). ExpenseBot reads deposit descriptions and amounts — it never initiates transfers or stores your banking credentials.

Deposits Route to the Right Tax Form Automatically

Not all income is Schedule C income. Rent deposits go on Schedule E. Dividends go on Schedule B. ExpenseBot routes reconciled deposits to the correct form based on how you've tagged your income sources — no manual sorting required.

Deposit typeUS formCanada form
Business income (client payments, platform payouts)Schedule C Line 1T2125 Line 7
Rent deposits (matched to property tag)Schedule ET776
Interest / dividendsSchedule BT5 summary
Transfers between own accounts (ignored)Not reportedNot reported

Rent deposit routing uses the property tags you've already set up in your rental property tracker. No separate configuration needed.

Bank Reconciliation + Credit Card Reconciliation — Two Different Problems

Bank deposit reconciliation is about income: making sure every client payment, platform payout, and transfer that landed in your account is correctly recorded — not double-counted, not missing. It runs against your Income tab.

Credit card reconciliation is about expenses: making sure every charge on your statement matches an expense entry — no forgotten subscriptions, no missing receipts, no personal charges mis-filed as business. It runs against your Expense tab.

Both live in ExpenseBot. Most self-employed filers need both — income side verified by bank deposits, expense side verified by credit card statements — before their accountant can finalize Schedule C or T2125.

Who Needs Bank Deposit Reconciliation

Not everyone needs it. If you have one income source and no payment platform, your income tab is probably accurate without reconciliation. But if any of these apply, reconciliation is worth doing before you file:

  • You use Stripe, PayPal, Square, or any platform that sends payout emails and deposits
  • You have both Gmail-detected income (from email receipts) and bank deposits for the same payments
  • You manually log income and connect a bank account
  • Your accountant asked whether your gross receipts are "bank-verified"
  • You received a 1099-K or T4A and want to cross-check the platform's number against your bank
  • You have rental income that needs to stay separate from business income on your return

See also: income and expense tracker · credit card reconciliation · year-end tax workbook

Bank-verified income before you file

Connect your bank, let the 4-layer matcher run, then use the Reconcile button to clear any gaps. Your Schedule C gross receipts will match your actual deposits.

60-day free trial · No credit card required · Cancel anytime

Frequently Asked Questions

What is bank deposit reconciliation for self-employed?

Bank deposit reconciliation is the process of matching every deposit in your bank account against the income you've already recorded — invoices, Stripe payouts, PayPal transfers, client payments — to make sure nothing is double-counted, missing, or mis-categorized. For self-employed filers, this is how you verify that your Schedule C Line 1 gross receipts (US) or T2125 Line 7 (Canada) match what actually hit your account. ExpenseBot automates the matching using a 4-layer algorithm and surfaces unmatched deposits in a monthly Reconcile view.

Why do bank deposits show up twice in my income?

A single payment often creates multiple records: an email receipt or invoice (e.g. 'Your Stripe payout is on the way'), a manual entry you logged in your income tab, and the deposit landing in your bank account. Without reconciliation, that $1,200 client payment becomes $2,400 or $3,600 of phantom income. ExpenseBot's matcher deduplicates across all three sources automatically — matching by transaction ID, merchant name, and AI canonicalization for edge cases like 'STRIPE' in the bank matching 'Stripe Inc' in your email.

How does ExpenseBot match bank deposits to income?

ExpenseBot runs every bank deposit through 4 layers: (1) Entity ID match — exact platform transaction IDs like Stripe ch_... or PayPal txn_... are matched first. (2) Normalized merchant match — names are stripped of punctuation and noise before comparing. (3) Token-subset match — handles 'Stripe Inc' vs 'STRIPE'. (4) AI canonicalization — Gemini resolves edge cases like 'PayPal *Etsy' matching 'Etsy' in your income tab. Anything that doesn't match in any layer surfaces as a 'potential income gap' for manual review.

What does the Reconcile button do?

The Reconcile button (on the Income tab) walks you through every unmatched bank deposit one at a time. For each gap you can Accept (add it as new income), Edit (adjust the merchant, amount, or category before adding), or Ignore (for account transfers, refunds, or anything not income — the ignore rule sticks for that source going forward). Once you've worked through all gaps, your income is bank-verified.

Does ExpenseBot work with Stripe, PayPal, and other platforms?

Yes. The matcher handles payouts from Stripe (ch_... and po_... IDs), PayPal (txn_... IDs), Square, Shopify Payments, Etsy, Amazon seller deposits, and generic bank transfers. Platform-specific transaction IDs are matched first for exact deduplication. Payouts that aggregate multiple transactions (e.g. a weekly Stripe payout covering 12 individual charges) are matched at the payout level, not per-transaction.

What is the Bank Summary in the year-end report?

The Bank Summary is a reconciliation status section in ExpenseBot's year-end tax workbook. It shows ✓ Reconciled when 83% or more of your months are reconciled, ⚠️ Partial when below that, and ℹ️ Not enabled when no bank is connected. This tells your accountant whether the income totals on Schedule C / T2125 are bank-verified or based on email-detected income alone. Most accountants request this confirmation before filing.

Can I reconcile rent deposits separately from business income?

Yes. Rent deposits are automatically routed to Schedule E (US) / T776 (Canada) when the deposit description matches a property tag you've set up in ExpenseBot. Business income goes to Schedule C Line 1 / T2125 Line 7. Interest and dividends route to Schedule B / T5 summary. The reconciliation respects these routing rules — a rent deposit won't inflate your Schedule C gross receipts.

Do I need to reconcile every month?

No — but monthly is the easiest cadence. The Reconcile button processes all unmatched deposits since your last reconciliation in one session. If you reconcile quarterly or annually, you'll work through more gaps at once. The Bank Summary in the year-end report tracks reconciliation status by month so you can see which months still have gaps before filing.