Data quality & internal tools
Numbers your team can close the month on.
When a tool’s numbers don’t match the files they came from, people stop trusting it and go back to the spreadsheet. I audit the tool against your own source files, fix what doesn’t match, and add controls so bad data can’t get back in.
All three from one engagement: a payroll allocation platform for an international human rights NGO, through Relief Applications. The client is not named.
Sound familiar?
When the tool and the spreadsheet disagree.
None of these needs a new platform. They need someone to find out exactly where the numbers part ways, and fix it there.
- The tool says one thing, the spreadsheet says another, and nobody knows which to believe.
- Month-end close stalls while someone reconciles by hand.
- An import ran twice, or ran over a month that was already closed.
- A control shows green, and nobody has checked what it actually tests.
- The internal app mostly works, and the person who built it has moved on.
What I do
Find the difference, then close it.
Audit against your files
I run the tool’s output against your own source files, line by line and cell by cell, and list every difference with its cause.
Fix and extend the app
I fix the defects in the app itself (Python, SQL, React) and ship the features the people using it are asking for.
Add controls and guards
Checks that fail on empty or partial data, closed months that can’t be overwritten, and imports that can’t quietly run twice.
Verify before release
Every change is checked against production data, read-only, before anyone relies on it.
How a check works
Your file is the reference, not the app.
Tests show the code does what it was written to do. Only your own files show whether that was the right thing.
- 1 · ReferenceYour source files
The workbook, export or payroll file the business already trusts.
- 2 · OutputWhat the tool says
The same numbers, as the app currently calculates them.
- 3 · CompareEvery difference, listed
Each one traced to a cause: a defect, a gap in the data, or a rule nobody wrote down.
- 4 · CloseFixed, or explained
Nothing is closed as “probably fine”. Each difference is fixed, or documented and agreed.
The engagement behind the numbers
A payroll allocation platform, audited end to end.
An international human rights NGO, through Relief Applications. The app (Python/Flask, PostgreSQL, React) was built by the consultancy’s team. My work was the audit, the fixes, the controls and the features that followed.
- 17defects found and fixed in an end-to-end audit against the client’s own files.
- to the centthe December 2025 allocation matrix, reproduced by the app after the fixes.
- 219 of 222cells of the client’s coverage workbook matched.
- 80 of 92employees’ 2025 payroll within one euro of the source file at the first reconciliation. The remaining gaps were documented, traced, and have since been fixed.
- about 7%inflation of a full year of one office’s payroll, prevented by stopping a recommended re-import that would have double-converted it.
- €27,830of payroll cost attached to no one: 8 people paid through payroll but missing from the personnel roster, flagged to the client.
- about 200false budget overruns avoided by catching a stale source file before deploy.
- 3,138 linesand 1,342 grid columns checked read-only in production after a rounding fix. No discrepancies.
- 6 layersof the app traced to find the contradictory instructions that had stalled the client’s month-close, and unblock it.
- controlsthat reported “compliant” on empty months now fail. Closed months and deposited payroll can’t be overwritten by later imports, and manual overrides survive a re-import.
- featuresrequested by client staff: split allocations, Excel paste into grids, multi-month uploads, part-time working patterns. Each checked against production data.
- handoveronce the client was running the tool on their own, with client updates written in French.
Stack
What I work in.
Data
Applications
Checks
How it runs
Scoped first, priced after a call.
Start with one file or one problem. The first look is free.
- First step
- A 30-minute call, or one file sent over. Free.
- Shape
- An audit first, then fixes and controls, each phase with a fixed scope.
- Length
- Typically 2 to 6 weeks.
- Price
- Fixed price, quoted after a call.
- Where
- Remote, in your environment, on the access you grant. Central European hours.
- With your team
- Pull requests, code review and tests, in your repository.
- Handover
- What was found, what was fixed, and what each control checks, written down. Support afterwards if you want it; nothing depends on it.
Send me one file.
The report nobody trusts, or the export behind it. I’ll tell you what I’d check first. Free, and no call needed.
Not comfortable sending data to someone you haven’t met? The column headers and two lines describing the problem are usually enough.