Recon
Generic reconciliation for any two data sources: CSV, XLSX, or live HTTP APIs.
Pair any two data sources, run reconciliation over a date window, and bucket every row as matched, mismatched, or missing. Vendor-neutral, config-driven, and persisted to your own database.
Every joined row lands in exactly one bucket
Recon hash-joins both sources on your chosen key and decides where each row belongs. No row is silently dropped, no row is double-counted.
Matched
Both sides agree on amount and status within tolerance.
Amount mismatch
Join key matches, but the amounts differ beyond your tolerance.
Status mismatch
Amounts agree, but the reported statuses disagree after equivalence.
Missing in Source A
Only Source B has the row. Source A is silent.
Missing in Source B
Only Source A has the row. Source B never reported it.
What Recon does
CSV, XLSX, or live HTTP API sources
Define each feed once with a name, type, and column mappings. CSV / XLSX sources accept per-run uploads; HTTP_API sources are fetched live with templated URLs, headers, query params, and POST bodies (`{fromIso}`, `{toIso}`, `{fromDate}`, `{toDate}` placeholders).
Column mappings, not vendor code
Tell Recon which columns are the join key, amount, status, and timestamp, across any number of header variants (case, underscores, whitespace are normalised). The same engine handles every PSP, gateway, or ledger without forking.
Comparisons with match rules
Pair two sources, set an absolute amount tolerance, choose case-sensitive or case-insensitive joining, and optionally provide a JSON status equivalence map (e.g. SUCCESS / ISSUANCE_SUCCESS / COMPLETED) for cross-vendor state alignment.
Bucketed runs with hash join
Each run normalises both sides, hash-joins on the join key, and buckets every row as Matched, Amount mismatch, Status mismatch, Missing in Source A, or Missing in Source B, with totals, amounts, and full row snapshots persisted to your own database.
HTTP pagination + bearer auth
HTTP_API sources support page-number or cursor-based pagination with safety caps. Bearer tokens and other secrets are encrypted at rest with AES-256-GCM and redacted from the API surface.
Date-window scoping
Every run carries a fromTs / toTs window. Rows whose timestamp falls outside are dropped before matching; sources without a timestamp column include every row regardless. Quick presets cover today, yesterday, and the last 14 days.
Inspect every row
Drill into any run, filter by bucket, and see the full left + right row snapshot side by side, including the join key, mapped fields, and the extra columns you flagged. No exports needed to investigate a single mismatch.
Your data, your retention
Sources, comparisons, runs, and row snapshots live in your own database. Recon never holds a copy of your transactional data, only the configuration that tells the engine how to reconcile it.