If your company pays or collects money across multiple LATAM countries, you’ve probably lived this: the money “did arrive”… but no one knows when, through which channel, with what reference, or where the proof is. And when month-end hits, everything turns into detective work.
This guide is meant to prevent that. No unnecessary jargon. Just practical steps.
Reconciliation is very simple:
Making sure what you intended to pay matches what actually happened and what finally shows up.
In practice, for every payment you should be able to answer these 3 questions:
If you can’t answer that in 30–60 seconds per transaction, your reconciliation relies on “searching, guessing, and chasing emails.”
Because in Latin America there isn’t “one payment system.” There are several, and every country has its own rules and receipts.
Examples (keeping it simple):
Now add:
Every payment must have one unique internal “reference” from day one.
Call it whatever you want:
But it must exist before the money moves.
Because if you don’t have it, you end up reconciling like this:
That’s exactly what makes reconciliation slow.
Think of this as your survival kit. For every payment, store:
Here’s the useful part. You don’t need to memorize fancy names—just know which data lets you look up the payment.
For SPEI*, what usually saves you is the “clave de rastreo” (think: “tracking number”).
Store:
Simple example:
“Supplier payment in Mexico. If someone asks ‘did it land?’, you search by clave de rastreo and pull the proof in 10 seconds.”
Pix also has a transaction identifier (your Pix “tracking number”).
Store:
Simple example:
“It was paid via Pix. You don’t reconcile by ‘amount’… you reconcile by the Pix ID.”
In PSE flows, you typically get a transaction code/identifier (often shown as CUS or similar depending on the flow/provider).
Store:
Key idea: across countries it’s the same concept: one channel tracking ID + your internal reference.
You can start in Excel/Sheets, but build it like a table.
One row = one payment.
|
Section |
Field (column name) |
What it means (in plain English) |
Example value |
|
Identification |
internal_reference |
Your unique internal ID for the payment (the “folio”) |
PAY-2026-000184 |
|
Identification |
provider_id |
The ID your provider/bank/PSP assigns |
prov_8f2a19 |
|
Identification |
channel |
The payment channel used |
SPEI* / Pix / PSE |
|
Identification |
channel_tracking_id |
The channel’s tracking/reference ID |
clave de rastreo / Pix ID / CUS |
|
Money |
amount_sent |
Amount you initiated |
10000 |
|
Money |
currency_sent |
Currency you initiated |
USD |
|
Money |
fee |
Fees charged (if any) |
12.50 |
|
Money |
exchange_rate |
FX rate applied (if any) |
17.23 |
|
Money |
amount_received |
Amount the beneficiary received |
171,900 |
|
Money |
currency_received |
Currency received |
MXN |
|
Time & status |
created_at |
When you created the payment order |
2026-03-02 10:15 |
|
Time & status |
executed_at |
When it was actually sent/executed |
2026-03-02 10:18 |
|
Time & status |
confirmed_at |
When it was confirmed/settled |
2026-03-02 10:21 |
|
Time & status |
status |
Your simplified status |
pending / confirmed / failed / returned / review |
|
Time & status |
reason |
Optional reason for status |
insufficient funds / invalid account |
|
Proof |
proof_link |
Where the receipt/proof lives (central storage) |
drive://proofs/PAY-2026-000184.pdf |
|
Control |
reconciled_by |
Who reconciled it |
maria.g |
|
Control |
reconciled_at |
When it was reconciled |
2026-03-02 18:05 |
|
Control |
exception_notes |
Notes if something didn’t match |
Provider status delayed; confirmed next day |
Missing one of these columns might feel harmless… until you have 500 payments and month-end makes you pay for it.
Another common issue: every provider has 20 different statuses and the team gets confused.
To solve it: keep a small set of internal statuses and map everything into it.
A simple set:
With that, everyone understands the flow—and you can measure where things get stuck.
If you run payroll, user payouts, vendor payments at scale, refunds, etc., you need a different approach.
For mass payouts latin america, manual one-by-one reconciliation will always leave you behind.
Layer 1: “Does the batch match?”
Layer 2: “Touch only what failed”
Layer 3: “Exceptions need an owner”
Each exception has:
This is the difference between “endless investigation” and “exception management.”
If your flow includes stablecoins for business payments, think of it like this:
A stablecoin is like a “digital dollar” that can move quickly across borders. It can help with settlement and conversion, but it doesn’t remove reconciliation. It adds an extra leg you must track.
What do you store additionally?
One operational phrase that matters in Mexico is usdc to mxn liquidity.
In plain terms: “how easy and fast it is to go from USDC to Mexican pesos without friction.” If liquidity is low, execution can be slower or costlier.
Excel helps you organize. But once volume grows, you’ll want automation.
If you’re evaluating an api for cross-border payments latam, don’t choose only on “price and coverage.” Ask operational questions:
The goal is to stop reconciliation from being “a painful month-end” and turn it into a quick daily process.
If you (or your team) spend hours hunting receipts, comparing amounts, and chasing references, your operation isn’t ready to scale.
The solution is not complicated:
If you want, share how you reconcile today (even in bullets) and your rough monthly volume. With that, we can map the ideal “single sheet” and exception workflow for your real setup (channels, countries, and whether you use stablecoins).
*NVIO México enables direct access to SPEI and delivers payment services fully compliant with Mexican regulation. NVIO Pagos México, S.A.P.I. de C.V., IFPE (“NVIO México”) is authorised and regulated by the Mexican National Banking and Securities Commission (CNBV). Learn more at nvio.mx/terms.