Match payments to invoices

View as Markdown

This guide walks through reconciling bank transactions to open invoices using Tabs cash application. Tabs reads incoming transactions from your connected bank account, uses AI to suggest matches between invoices and transactions, and writes journal entries to your ERP when a match is confirmed.

By the end of this guide, your AR team can clear open invoices from bank transactions without leaving Tabs or touching the ERP directly.

Before you begin

You need:

  • A connected Plaid bank account. If you haven’t set this up yet, see Set up Plaid or upload a CSV of recent bank transactions
  • At least one Invoice in the SENT or PENDING status with a remaining balance
  • ERP accounts mapped to your bank accounts in Settings → Integrations → Plaid

Step 1: Open the bank transactions view

In the Tabs app, go to Data → Transactions. This view shows all transactions synced from your connected bank accounts that haven’t been matched or excluded yet.

Each transaction displays:

FieldDescription
DescriptionThe bank transaction description as provided by Plaid
AmountThe transaction amount
DateThe date the transaction posted to the bank account
Detected customerCustomer name detected by AI from the transaction description, if any
Detected invoiceInvoice number detected by AI from the transaction description, if any
Suggested matchThe highest-confidence invoice recommendation

Transactions appear in this view within minutes of Plaid delivering a webhook. If a recent transaction is missing, check the Last synced timestamp in Settings → Integrations → Plaid.

Step 2: Confirm a suggested match

When Tabs detects a customer name or invoice number in the transaction description, it surfaces a suggested invoice match ranked by confidence score.

To confirm a match:

  1. Locate the transaction in the Transactions view.
  2. Review the suggested invoice. Verify the customer name, invoice number, and amount are correct.
  3. Click Confirm match.

Tabs creates a completed Payment record linked to the Invoice and sends a journal entry to your ERP. Tabs updates Invoice status automatically:

Transaction amount vs. invoice balanceInvoice status after match
Equal to or greater than balancePAID
Less than balancePARTIALLY_PAID—remaining balance stays open

If the transaction amount exceeds the invoice balance, Tabs applies only the amount needed to clear the Invoice. You can apply the remainder to another invoice separately.

To confirm the invoice has closed, retrieve it with the API:

$curl "https://integrators.prod.api.tabsplatform.com/v3/customers/{customerId}/invoices/{invoiceId}" \
> -H "Authorization: YOUR_API_KEY"

Tabs returns the invoice with status: "PAID" and balanceRemaining: 0.

Step 3: Apply a match manually

If Tabs doesn’t suggest a match—or the suggestion is wrong—select the Invoice manually.

  1. Click into the transaction to expand it.
  2. Click Match to invoice.
  3. Search for the customer or invoice number.
  4. Select the Invoice and confirm.

The same Payment creation and ERP journal entry flow applies as in Step 2.

Use the search bar at the top of the Transactions view to filter transactions by description, amount, or date range. This is useful when processing a large batch at month-end.

Step 4: Handle Stripe batch payouts

When a transaction description contains the word “Stripe”, Tabs identifies it as a Stripe batch payout, splits it automatically across the individual invoices covered by that payout, and accounts for per-invoice Stripe fees separately.

No manual action is required. Review the auto-split result in the Transactions view to confirm the allocation looks correct before proceeding.

If your Stripe payout statement descriptor doesn’t contain the word “Stripe”, Tabs can’t detect the payout automatically. The transaction appears in the open transactions view without a suggested match and must be handled manually. To fix this, update your Stripe payout statement descriptor to include “Stripe”—see Stripe’s statement descriptor docs.

Step 5: Handle partial payments and write-offs

If a bank transaction represents only a partial payment—for example, a customer paid less than the invoice total—match the transaction to the invoice as normal. Tabs applies the transaction amount to the invoice balance and marks it PARTIALLY_PAID.

To write off the remaining balance as bad debt or a bank fee:

  1. Open the invoice in the Tabs app.
  2. In the Reconcile section, click Reconcile remaining balance.
  3. Select the ERP account for the write-off (for example, Bad debt expense or Bank fees) and confirm.

Tabs records the write-off as a separate line in the payment activity and includes it in the ERP journal entry.

Step 6: Exclude irrelevant transactions

Not all bank transactions correspond to Invoice payments. Exclude internal transfers, interest income, payroll debits, and similar credits to keep the open transactions view clean.

To exclude a transaction:

  1. Select the transaction in the Bank transactions view.
  2. Click Exclude.

Tabs marks the transaction as excluded and removes it from the open view. Excluded transactions are visible in the Closed tab if you need to review them later.

To exclude multiple transactions at once, select them with the checkbox and use the bulk Exclude action.

Excluding a transaction doesn’t delete it—it changes the transaction type to EXCLUDED. If you exclude something by mistake, reopen it from the Excluded tab.

Reverse a match

If you confirmed a match in error, you can reverse it from the invoice’s payment activity.

  1. Open the invoice in the Tabs app.
  2. Go to Payment activity.
  3. Locate the payment and click Remove.

Tabs reverses the journal entry in your ERP, reopens the invoice, and returns the bank transaction to the open transactions view.

Payments can’t be removed in closed periods.

Understand ERP sync behavior

When a match is confirmed, Tabs creates a COMPLETED payment record and immediately enqueues a SEND_PAYMENT_TO_ERP workflow. This workflow writes the journal entry to your connected ERP with the following details:

  • Date: the date the transaction posted to the bank account—not the date the customer paid
  • ERP account: the account mapped to the bank account in Plaid settings
  • Amount: the payment amount applied to the Invoice

If reconciliation is also enabled (the Reconcile option is checked at match time), Tabs additionally fires a SEND_RECONCILIATION_TO_ERP workflow to mark the transaction as reconciled in the ERP.

Journal entries are dated at bank-hit date, not at the customer’s payment date. This can cause timing differences for month-end close if customers pay shortly before a period boundary.

You can check whether a payment has been pushed to the ERP by retrieving it with the API:

$curl "https://integrators.prod.api.tabsplatform.com/v3/customers/{customerId}/invoices/{invoiceId}/payments/{paymentId}" \
> -H "Authorization: YOUR_API_KEY"

Next steps