FinDiff watches the database tables that quietly run your rates, fees and risk rules. Every insert, update and delete is caught, timestamped and explained, without FinDiff ever gaining the ability to write back.
Free to self-host · single Docker image · runs entirely on your own infrastructure
FinDiff was built around three real conversations: the DBA asked to grant access, the compliance officer asked "who changed this," and the engineer asked to explain it all after the fact.
No agents to install on the source database. No write access, ever. FinDiff sits next to your data and watches, the way an auditor would.
A statement guard rejects anything that isn't SELECT, read-only transactions where the driver allows it, and a generator for the dedicated database role to run it all under.
Map raw tables and columns to business labels in-app, or export an Excel template, hand it to a business owner, and re-import their answers with per-row validation.
Row-level SHA-256 diffing between snapshots, streamed to the UI over WebSocket the moment a change is detected. Filter by table, change type, date range or database.
Compare two environments side by side, staging against production, region against region, and see exactly which rows disagree.
Referential integrity across every foreign key, invalid compiled objects on Oracle, and a scan footprint report showing exactly what FinDiff's own jobs cost you.
Cluster related tables into a named module, loan origination, pricing, risk, with one-click suggestions built from real foreign keys.
Slack, Microsoft Teams, email or a generic webhook on every change, plus a configurable retention window that exports before it prunes.
Keyset pagination, in-database checksums, and watermark or native change-tracking incremental scans keep a billion-row table just as cheap to watch as a small one.
Ask questions in plain language over both the diff history and FinDiff's own health events. Works with OpenAI, Anthropic, Gemini, or a fully local Ollama or LM Studio model.
FinDiff never issues a single ALTER against a database it monitors. Everything below is additive, on your side.
Generate the exact GRANT SQL for your engine, run it yourself, and connect FinDiff with credentials that structurally cannot write.
Scan the database once, then label tables and columns in language your team already uses, in-app or through the Excel round trip.
FinDiff snapshots on a schedule you set and catches every insert, update and delete the moment it happens.
Live alerts, a full audit trail, and a signed-off PDF report the moment someone asks who changed what.
Real screenshots, running against a seeded lending-platform dataset.
rate_code and tier_id mean nothing to a compliance officer. Map them once to "Interest Rate Table" and "Risk Tier," group related tables into modules, and every future report speaks the business's language, not the schema's.
A quarterly rate reset and an unexplained Friday-afternoon edit used to look identical in the log. Pre-declare the ones you expect, and every matching change gets flagged, so what's left is what actually needs a look.
Every DBA has heard "don't worry, it's read-only" before. FinDiff generates the exact CREATE ROLE and GRANT SELECT statements for your engine, scoped to only the tables you've mapped, so you can verify the claim instead of trusting it.
Referential integrity checks catch orphaned rows across every foreign key. The scan footprint report goes further: real run counts, durations and rows read per table, so "it's lightweight" is a number, not a promise.
The copilot reasons over both the diff history and FinDiff's own operational events, so "why did this change" and "why did the connection start failing" are answered by the same feature. Every answer that matters comes with the query to verify it.
Pick a date range and get a PDF: every change, its business label, whether it was expected, and a summary count by type. No CSV to reformat, no manual pull from the audit log the night before a review.
Use the arrows, the dots, or the left and right arrow keys. Click a shot to enlarge it.
One container, one environment variable that matters, no database migrations to run by hand.
# pulls the official image and starts FinDiff on port 8080 docker run -d --name findiff \ -p 8080:8080 \ -e FINDIFF_MASTER_KEY="$(openssl rand -base64 32)" \ -e FINDIFF_ADMIN_USERNAME=admin \ -e FINDIFF_ADMIN_PASSWORD=change-this-immediately \ -v findiff_data:/data \ oubaidhl/findiff:latest
The community repository has the full README, deployment templates, and the place to file issues or ask questions. FinDiff ships as a versioned Docker image so every install is a tested build.