Finance Data: APIs, Exports and Reconciliation
Level data-layer architecture
Retain original bytes, parsed rows, normalized identities, same-period comparisons and reviewed exceptions
Sam Yang, Level
Retain the chain from bytes to decision
The original file answers what arrived. The extracted rows answer what a parser read. A normalized table answers how identifiers and amounts were transformed. A population comparison answers what is present or missing. A financial review answers what the difference means. Keep those layers separately inspectable.
Native source replay is valuable because another person can reproduce the extraction from retained bytes. It does not independently validate provider allocations, customer identity or recognition rules. Keep transformation versions and hashes in the manifest, then derive a short operating exception with a responsible owner and next action. Avoid an architecture that produces endless dashboards but no decision.
What each source type can and cannot show
| Source type | What it can evidence | Typical failure to test | Population check that catches it |
|---|---|---|---|
| API | Records the account and endpoint returned at the time of the call | Pagination or rate limits that drop records, permission scopes that hide entities, voided or deleted records omitted, fields that differ from the on-screen report | Compare counts and totals with the native report for the same closed period and filters, then match row identities, entity, currency, date basis, voids and credits; totals alone can hide offsetting omissions |
| Native export (CSV, XLSX) | What the user-facing report showed with the chosen filters and date basis | Saved filters, wrong date basis (created vs posted vs completed), period-end cutoff, row limits, truncated columns | Re-run the export with the filters documented, then tie the export total to the general ledger or platform summary for the same period |
| Emailed report | That a scheduled report arrived with a particular attachment | Changed report definition, a newer attachment version replacing an older one, missing sends, forwarded copies edited by hand | Keep the original message and attachment hash, and retain every revision, check expected send dates for gaps, and explicitly select one canonical version for each reporting period |
| PDF statement or report | The figures printed on the document the system or counterparty issued | OCR misreads of digits or signs, page breaks splitting rows, subtotals parsed as line items, scans missing pages | Tie parsed totals and page counts to the original, then verify row identity, signs and classifications against the image; arithmetic agreement alone does not establish meaning |
None of these checks proves the accounting meaning of a row. A complete, reproducible extraction still needs a financial review of allocations, customer identity and recognition rules.
Financial evidence in practice
What belongs between a source file and a financial answer?
Retain original bytes, parsed rows, normalized identities, same-period comparisons and reviewed exceptions. Each layer answers a different question. Replaying a source extraction proves reproduction of that input, not independent accounting correctness.
Run the check
- Retain originals separately from transformed tables.
- Bind extraction and normalization to source identities.
- Foot totals and compare complete populations.
- Record the interpretation, reviewer and next operating action.
Fictional example: Linked records with missing costs
All three fictional IDs link, giving 100% linkage. One has no cost evidence. Perfect linkage does not establish profit completeness.
Invented teaching inputs; downloadable files store these dollar amounts in USD cents.
Inspect the expected output
{
"fictional": true,
"unit": "USD cents",
"id": "report-population",
"linkagePct": 100,
"missingCostIds": [
"C"
],
"profitAvailable": false,
"limitation": "This is teaching arithmetic from supplied invented inputs, not source authenticity, financial assurance or authority to post."
}Reproduce this calculation
Download the code and input into one folder, then run:
node reproduce.mjs report-population.input.jsonThe code checks declared units and identities and refuses unsupported inputs. No browser or customer account is used. Source authenticity and accounting approval require separate evidence.
Reviewed 2026-10-06. Level financial-control guidance, with visibly fictional teaching examples. The example shows a control boundary, not a measured customer outcome or industry benchmark.
Read this content revision history
Continue with the related financial decision →Free benchmark review
See whether your books are benchmark-ready.
Start with a free conversation about your priorities. With agreed access to the relevant records, we compare your numbers with applicable benchmarks and identify what to review first.
Choose the next source
Decide when an API is not enough and exports, PDFs, emailed reports or browser steps are needed when the next question is which source to collect. The Financial Systems Field Guide holds the named-system collection notes, pitfalls and bounded prompts.
Sources and method
Field Guide. This guide shows how to check whether the numbers are ready to use. The examples use made-up numbers, clearly labeled and available to download. They do not include private customer documents or measured customer results. Before using the method, check that your account has the required access and that your reports count the same things.
Get the next one
Want next week's benchmark in your inbox?
One email a week. Real numbers from 2,200+ contractors in the research universe. No fluff. Unsubscribe anytime.
Related reads
Operations
Why Your Field Software Numbers Don't Match Your Accounting
Reconcile field hours, invoices, recognized revenue, and job costs. Billing capture: 97.1% median, 66.9% bottom decile (963 companies).
Operations
The AI Inbox: Emailed Reports as Finance Pipelines
Asking for a report by email does not mean you have received and saved it. Track delivery, original attachment, parsing and review separately, preserving changed versions.
Operations
The API Is Not Enough for Finance Automation
Use APIs for supported records. Add native reports or permitted browser collection for verified gaps, then compare identities, dates and costs.

About the author
Sam Yang
Founder & CEO
Founder of Level, the always-on finance team for contractors, service businesses, and ecommerce brands. Ex-CFO across trades, SaaS, and service businesses. 4 years as Director of Growth Product at BuildOps, building financial tooling used by 1,000+ commercial contractors. Four years in PE and investment banking rolling up and acquiring service businesses, $2.5B in total transactions including M&A and IPOs. Stanford MBA, Brown undergrad. The Level founding team's analysis of 2,200+ contractors ($13.25B in job revenue) across operating, private-equity, and CFO roles anchors the Level Index benchmark research.
LinkedIn