A Stablecoin Payment Split into Multiple Deposits: How to Auto-Match Invoices

 / 
1

The invoice says 1,000 U, but the chain shows three deposits: 200, 300, and 500. They arrived two days apart. The finance team has three records to reconcile, but no idea which deposit belongs to which invoice. This is not a bookkeeping problem. The money arrived, but its identity marker did not arrive with it.

Why multiple deposits do not match invoices

Traditional bank transfers let you put an invoice number in the memo field. On-chain stablecoin transfers, however, only carry basic data by default: who sent it, who received it, how much, and in which block. The invoice number is not part of the transaction data. Finance teams see what looks like anonymous money.

If three payments come from different addresses at different times, it is even harder to tell: did one supplier split one invoice into several payments, or did three different invoices get paid on the same day? Without manually digging through on-chain records, finance teams get stuck during closing.

Three ways to auto-match invoices and deposits

Method 1: Give each invoice a unique deterministic nonce (lowest technical cost)

Stable's approach is clean: invoice metadata such as invoice number, buyer, seller, amount, and due date is hashed into a deterministic nonce. When the buyer pays, they sign with this nonce. The on-chain settlement event then includes the nonce. During reconciliation, finance only needs to check the nonce to know which invoice the payment belongs to. No guessing.

[What to do] Generate a unique identifier tied to the invoice in your invoice system. Require it to be included when payment is made. [How to do it] If you build in-house, generate it with nonce = keccak256(invoiceNumber, vendor, buyer, amount, dueDate). The buyer uses this nonce when initiating the transfer. If you use an existing platform, Ramp's corporate treasury feature can automatically match each stablecoin transfer to invoices in NetSuite or QuickBooks. [Definition of done] In your finance system, you can open an on-chain incoming payment record and directly see which invoice number it belongs to.

Method 2: Use an orchestration platform to collect on-chain data automatically

Stripe's stablecoin orchestration automatically records transaction-level details and pushes them directly into the company's financial reporting system. Finance teams do not need to manually check transaction hashes in a block explorer.

[What to do] Pull on-chain transaction data into your finance tools automatically, instead of having staff check manually. [How to do it] Use tools such as Stripe Orchestration or Fireblocks Flow. They organize transaction IDs, amounts, dates, and wallet addresses into a format accounting systems can read. Meow already provides one-click integration with QuickBooks and Xero, cutting hours of closing work down to minutes. Entendre, acquired by MoonPay, goes further: it uses AI agents for reconciliation, and clients have automated 93% of journal entries. [Definition of done] During weekly close, finance staff do not need to manually copy and paste any on-chain transaction data.

Method 3: Use "total matching + invoice lock" for split deposits

If the first two methods are not ready yet, here is a reliable manual process for a payment split into three deposits:

[What to do] Do not try to match each transfer alone. Instead, match by receiving address + total amount + time window. [How to do it]

  • First, confirm that the three deposits went to the same receiving address (the same supplier address).

  • Add the three amounts and check whether the total equals the invoice amount.

  • If they match, mark all three together in the system as "this invoice has been paid in full," and attach the three transaction hashes as audit evidence.

  • If one amount does not fit, pull it out and investigate separately — it may be a prepayment for another invoice.

[Definition of done] The three deposits are grouped under one record in the finance system, clearly labeled as "matches invoice #INV-2026-0801, paid in full."

High-risk warning

The same nonce cannot be used for two transactions. Once an invoice's nonce is consumed on-chain, submitting the same invoice data again will revert. This means: if a payment is split into multiple parts, you must generate a separate sub-nonce for each part. For example, add -part1, -part2 after the invoice number before hashing. Otherwise, the second transaction will fail.

Closing check

During next week's reconciliation, pick the invoice with the largest amount and the most incoming transfers:

  1. Check whether your finance system directly links the payment to an invoice number.

  2. If not, ask which payment platform is being used — Ramp, Stripe, or an in-house solution — and whether the auto-reconciliation feature is enabled.

  3. If it cannot be enabled, manually add the transaction hash as a note to the invoice so auditors can trace back to the original on-chain record.

Verification channel: The finance team should be able to answer within 5 minutes: "Which supplier, which invoice, and when was this 300 USDC paid?" If they cannot, your reconciliation process still has a gap.