Synchronoid is in private beta. New workspaces open in small batches every few weeks. Join the waitlist →
Customer story Private beta customer

Northwind Ledger reconciles daily and can prove every number

A fintech team replaced a chain of scheduled scripts with replay-safe reconciliation pipelines, and gave reviewers evidence instead of screenshots.

The challenge

Northwind Ledger reconciles payments across bank statements, payment provider events and its internal ledger. Each source arrives at a different time and in a different shape, and some deliver corrections days later.

The old setup was a chain of scheduled scripts. A restart in the middle of a load could write some rows twice. When finance questioned a total, engineers searched through logs to rebuild how it was calculated.

The solution

The team rebuilt reconciliation as Synchronoid pipelines. Each load step is idempotent, so a retry never double-counts a transaction. Quality checks compare totals between sources and stop the run before a mismatch reaches the published ledger view.

Raw bank files and API payloads are kept, so any past run can be replayed to reproduce a closing figure. Reviewers can open a value in the control room and see which records and runs produced it. Failures alert the on-call engineer in PagerDuty and Slack.

How it was built

From first source to production

Weeks 1 to 3

Bank files over SFTP and payment events over HTTP connected. First daily reconciliation running next to the old scripts.

Weeks 4 to 8

Totals and referential checks added. Old scripts switched off for the first two sources.

Weeks 9 onward

Replay and provenance used in month-end review. Alerts routed to on-call.

A closer look

What the pipelines look like

A simplified example of the pattern the team uses. Names and values are illustrative.

pipelines/reconcile.py
@sy.asset(layer="published", deps=[bank_lines, payment_events])
def ledger_view(ctx, bank_lines, payment_events):
    diff = bank_lines.total() - payment_events.total()
    if abs(diff) > 0.01:
        raise sy.CheckFailed(f"totals differ by {diff}")
    return bank_lines.match(payment_events, on="reference")
Results

What changed

Early results from the beta period, as reported by the Northwind Ledger team.

8
sources connected
-60%
time spent on month-end data preparation
0
duplicate transactions since cutover
20 min
typical time to reproduce a past figure, down from about half a day

“Month-end used to mean rebuilding last week's numbers from memory and log files. Now we replay the run against stored data and point to the source records. The biggest change is idempotency. A worker restart used to be a small incident and now nobody notices. We are cautious, because the platform is still in beta and our auditors will want to see how we use it, but the evidence trail is exactly what we needed.”

JJonas, Head of Engineering, Northwind Ledger
Beta customer
What’s next

Plans for the coming months

Northwind plans to move its remaining reporting feeds and to use change feeds to notify finance operations when a late correction arrives. The team is also working with Synchronoid on how to document the setup for its own audits.

Synchronoid’s SOC 2 Type II audit is in progress. The audit window opened in Q3 2026.

Build a pipeline like Northwind Ledger's

Synchronoid is in private beta. Tell us about your data and we will get you a workspace.