Skip to content

Fulfillment invoice reconciliation · Windows desktop · Early access

Stop trusting your3PL invoice.Verify it.

BillDelta recomputes a fulfillment invoice from your contracted rates and your own operational exports, then shows you the invoice line, the activity records, the contract rule and the arithmetic behind every difference it reports.

Runs on your Windows machine. Your invoice, contract and activity files stay there.

STO-DAYDaily pallet storage
30 Jun 2026Sample audit
Billed by the provider
3,931 pallet_day × USD 0.55
USD 2,162.05
Supported by contract and activity
3,651 pallet_day × USD 0.55
USD 2,008.05
Difference
154.00
USD · Recoverable, not yet reviewed
atlas-invoice-2026-06.csv · row 7572storage-2026-06.csv · 30 daily snapshotsDaily pallet storage · MSA Exhibit A §4.1
The BillDelta findings workbench on a sample June 2026 audit: a totals band reading 62,135.10 billed, 440.70 potential overcharge and 43,500.00 needing detail, a 7,578-row findings ledger, and a three-column evidence pane showing the billed invoice row, the operational storage records and the contract rule with its arithmetic.
Sample auditBillDelta 0.9.0. The findings workbench on the synthetic sample audit that ships with the application — the STO-DAY line, selected, with its evidence open. On a narrow screen this plate is cropped to the contract rule and its arithmetic, because a screen this dense is not worth showing at a size nobody can read.
01The invoice

A fulfillment invoice is a claim, not a receipt.

A 3PL invoice arrives as thousands of lines: per-order fees, pick and pack, receiving, storage, returns, markups, project hours, tier adjustments, minimums. It tells you what the provider decided to charge.

It does not tell you what the contract entitles them to charge, and it does not tell you whether the quantities behind those charges actually happened. Those two questions live in two other places — the rate card you signed, and the exports your own systems produce.

Answering them by hand means rebuilding a month of warehouse activity in a spreadsheet, against a rate card with effective dates, and doing it again next month.

What a line has to be checked against

On the invoiceContract questionActivity question
Per-order fulfillmentThe contracted rate in force on the service dateYour order or shipment export
Pick and packFirst-unit and additional-unit rates, and any capOrder line quantities
StoragePallet, bin, shelf or cubic-foot rate and its basisA periodic inventory snapshot
Inbound receivingUnit, carton, pallet or container rateA receipt or ASN export
Return handlingPer-return rate plus any per-restocked-unit rateA return or RMA export
Percentage markupThe percentage and the declared base categoryThe provider's own billed base
Volume tierGraduated or flat-cliff brackets over the periodThe whole period, not a single order
Period minimumThe threshold over its declared eligible rulesEvery other charge in the period

Carrier postage sits on the same invoice and is deliberately never recomputed — it is shown for balance and excluded from anything claimed.

02The method

Three inputs. One deterministic answer.

BillDelta does not score an invoice or flag anomalies. It recomputes what each charge should have been, and subtracts.

  1. I

    The provider invoice

    A CSV or XLSX export of the invoice. You map its columns once; the mapping is saved as a reusable profile.

    What you were billed

  2. II

    The contracted rates

    Your rate card as structured rules — eight priced primitives, volume tiers and period minimums, each with the dates it is in force.

    What was agreed

  3. III

    Your operational exports

    Orders, receipts, inventory snapshots, returns — from your own systems, not the provider’s. This is what turns a rate check into a quantity check.

    What actually happened

Every line lands in one of three states

The state is decided by how the expected quantity was obtained — never by how confident a match looks.

  • L1 Rate checked

    The rate and the arithmetic are checked against the contract. The quantity is still the provider’s own figure.

    Enough to dispute a rate that does not match the contract, or a multiplication that does not hold. Not enough to dispute the quantity.

    CONTRACT_VALIDATED

  • L2 Activity substantiated

    The quantity was rebuilt from your own exports, with row-level links back to the records that produced it.

    The strongest claim the product makes, because the number came from your systems rather than from the invoice being audited.

    ACTIVITY_SUBSTANTIATED

  • L3 Supporting detail required

    The available evidence cannot settle it either way. BillDelta says so, and excludes it from the claim.

    A legitimate final answer, not a failure. Ask the provider for backup rather than claiming it.

    UNVERIFIABLE

The potential-overcharge total may contain Level 1 and Level 2 differences and nothing else. That is not a policy someone can relax in a settings pane — the totals refuse to be computed if an unverifiable finding is flagged as recoverable.

03The evidence

One finding, traced all the way down.

This is a storage line from the sample audit that ships with the product. Nothing about it is a mock-up: the figures below are the figures the engine produced, and the screenshot is the pane the application shows.

STO-DAYDaily pallet storageL2 Activity substantiated
Sample audit
Charge code
STO-DAY
Description
Daily pallet storage
Service date
2026-06-30
Quantity
3931 pallet_day
Unit rate
USD 0.55
Amount
USD 2162.05
Why this number exists
  1. Provider invoicerow 7572
  2. Activity records30 snapshots
  3. Contract ruleUSD 0.55 / pallet-day
  4. Arithmetic3651 × 0.55
  5. Explained deltaUSD 154.00
Billed
USD2,162.05
Supported
USD2,008.05
Difference
USD154.00
The evidence pane for one finding, in three columns: billed by the provider (STO-DAY, 3,931 pallet_day at USD 0.55, USD 2,162.05), your operational records (daily storage snapshots), and the contract rule and arithmetic (USD 0.55 per pallet-day, sum of 30 daily snapshots = 3,651, 3,651 × 0.55 = USD 2,008.05).
Sample auditThe same finding in the application: billed row, operational rows, and the contract rule with its arithmetic — the pane BillDelta opens for any line you select.

No black-box scoring. Every finding has a traceable calculation.

A finding identifies its billed source rows, its activity source rows, the rule and version applied, and the operands of the calculation. A result you cannot trace is treated as a defect in the product, not as an insight.

04The workflow

What a month looks like.

Set the contract up once. After that, a period is three steps and a report.

  1. 01

    Map the exports

    Choose the provider invoice and your own activity exports. You pick the header row, the delimiter and which column means what. Date and number conventions are declared, not guessed — 1.234 is a different number in Rotterdam and in Denver.

    Columns that look like personal data — a customer name, an address, an e-mail — are dropped before the preview is even built, and cannot be mapped at all.

    The Sources step: a source-type selector, header row and delimiter controls, a column-mapping table, parsing assumptions for dates and numbers, saved import profiles and a staging control. The panel explains that columns which look like personal data are dropped before the preview is built.
    Sample audit
  2. 02

    State the rates

    Your rate card becomes structured rules: eight priced primitives, volume tiers and period minimums, each with a contract reference and the dates it is in force. A rate change is an amendment — a new revision, with the previous one kept.

    Rate rules are structured data. No formulas, no scripts, no inferred terms.

    The contract workbench: a published 2026 rate plan revision with ten structured rules — per-order, pick and pack, return handling, inbound receiving, daily pallet storage, a monthly account fee and a percentage markup — beside a charge-code mapping table.
    Sample audit
  3. 03

    Run the preflight

    Before it computes anything, BillDelta checks that a staged invoice exists, that exactly one contract revision covers the period, and that your rules actually price every day and every charge code on the invoice. Anything missing is named.

    Charges billed on a day no rule covers are reported as needing supporting detail and are never claimed. An incomplete rate card is the product’s problem, not evidence against your provider.

    The audit setup preflight: readiness tiles for sources, contract, period and charge coverage, a rate-plan and contract-revision selector, and a list of blocking issues that must be resolved before a run can start.
    Sample audit
  4. 04

    Work the findings

    Filter, sort and search a full period of findings, then open the evidence for any one of them. Mark a line disputed, accepted or excluded; the review decision is stored separately and can never change a billed, expected or recoverable amount.

    The sample run holds 7,578 findings. Filtering to the 126 in the claim, sorted by largest difference, is answered by the database rather than by loading them all.

    The same audit filtered to the 126 findings that are in the claim, with the outcome facets on the left showing no unverifiable rows remaining in the view.
    Sample audit
  5. 05

    Send something defensible

    Export the ledger as CSV or XLSX, or produce the dispute pack — a printable HTML document, or a PDF printed locally — that opens with what is being claimed and closes with the manifest the recipient needs to reproduce it.

    The pack separates dispute candidates from differences that merely need detail, so the conversation with your provider starts where it can actually be defended.

    The export chooser: an artefact selector set to CSV ledger and a scope selector set to the current filter, described as exactly the findings the current filters and sort produce, in that order.
    Sample audit
05The rate domain

What BillDelta recomputes — and what it will not.

The rate domain is deliberately frozen at eight priced primitives and two period modifiers. If your contract contains a term that is not on this list the product does not approximate it: the charge stays unmapped and is reported as needing supporting detail.

The eight rate primitives BillDelta can recompute, with the strongest evidence level each can reach and the export it requires.
Contract termPriced onStrongest evidenceNeeds
Flat recurring feeA fixed amount per period — a monthly account feeL1 Rate checkedNothing but the contract
Per orderEach qualifying order or shipment, optionally by channelL2 Activity substantiatedAn order or shipment export
Pick and packFirst unit, additional units, optionally lines, optional capL2 Activity substantiatedOrder line quantities
Inbound receivingReceipts by unit, carton, pallet or containerL2 Activity substantiatedA receipt or ASN export
StoragePallet, bin, shelf or cubic foot — daily, monthly average or end of monthL2 Activity substantiatedA periodic inventory snapshot
Return handlingPer return, plus optionally per restocked unitL2 Activity substantiatedA return or RMA export
Percentage markupA percentage of a declared billed base categoryL1 Rate checkedThe provider’s billed base
Hourly or projectProvider-reported hours or units at a contracted rateL1 Rate checkedThe provider’s billed quantity

Percentage markup and hourly or project work can never reach Level 2 by definition: the quantity comes from the provider’s own invoice, so the multiplier can be checked and the underlying claim cannot.

Two period modifiers

Volume tier
Attaches to per-order or pick-and-pack pricing. Graduated prices each bracket’s own slice; a flat cliff reprices the whole volume at the bracket the total lands in. The two differ by real money at every boundary, so the mode is a required field — under a flat cliff the 1,001st order can make the total cheaper than 1,000 orders.
Period minimum
A threshold over a declared set of eligible rules, evaluated in a second pass after everything else and applied once. When spend clears the threshold it expects zero — so a provider who bills the minimum fee anyway is caught.

Deliberately out of scope

Carrier transportation
Postage, parcel zones, dimensional weight, fuel surcharges and service guarantees are shown on the invoice for balance and are never recomputed. Parcel audit is a different, well-served product; this one covers the warehouse’s own services.
Arbitrary formulas
No expression language, no user-supplied code, no formula strings, no regex pricing. Adding a primitive is a product decision, not something a spreadsheet cell can do.
Proration of a recurring fee
If a monthly fee’s rule covers only part of the billing period, the product reports it as unverifiable rather than inventing a fraction.
Two currencies in one run
A workspace has one base currency. A line billed in another blocks the run rather than being converted at a rate nobody agreed.
06The claim boundary

Not every difference is an overcharge.

The most damaging thing invoice-audit software can do is turn “we could not check this” into “you billed for nothing”. BillDelta is built so that cannot happen quietly.

The run totals band: billed 62,135.10 USD, recomputed 18,134.40 from the contract, potential overcharge 440.70 covering Level 1 and 2 differences only, 43,500.00 needing detail and excluded from the claim, and 60.00 of timing differences also excluded from the claim.

Sample auditThe totals band of the sample run. 440.70 is claimable; 43,500.00 needs supporting detail and is excluded from it; 60.00 is a timing difference and is excluded too.

  • Missing data is never zero

    If a rule cannot be evaluated — no storage snapshots, a receipt recorded in cartons against a pallet rate, a project line billed without hours — the affected scope becomes unverifiable and says why. It never becomes an expected charge of $0.00.

  • Only Level 1 and Level 2 can be claimed

    The potential-overcharge total may contain nothing else. In the sample run, 43,500.00 of billed value needs supporting detail and sits outside the claim, next to 440.70 that does not.

  • Timing differences are separated out

    Activity falling just outside the billing period but inside the grace window is legitimately billed. It is reported, and it is excluded from the recoverable total.

  • Differences in your provider’s favour are reported too

    A charge you expected that does not appear on the invoice is shown as expected but not billed. It is never claimed, and it is never quietly netted off.

BillDelta shows what can be demonstrated, what needs clarification, and the evidence behind each finding.

07Where it runs

Your billing data does not leave the machine.

BillDelta is a desktop application. The reconciliation path contains no network call, no telemetry, no analytics and no remote asset — not as a setting you switch on, but as a property of how it is built.

Your machine
  1. Your files

    The provider invoice and your own operational exports, wherever they already sit on disk.

  2. BillDelta on your Windows PC

    Parsing, mapping, the rate engine and the audit all run in local processes. The original workbook is hashed and read; it is never copied into application storage.

  3. A local workspace

    Canonical records and completed runs are held in a SQLite file on your machine. One workspace, one user, no accounts, no sync.

  4. Local exports

    CSV, XLSX, a printable HTML dispute pack and a locally printed PDF — written where you choose to write them.

Nothing in that diagram leaves the box. There is no account to create, no workspace to sync and no reconciliation service to upload to — the product would not work any differently with the network cable pulled out.

Personal data has nowhere to live

A column reaches storage only by being mapped to one of a fixed list of canonical operational fields. That list holds identifiers, dates, quantities and money. It holds no customer name, e-mail, telephone, street address, city or postcode — so the schema gives that information nowhere to go. A mapping that would pull personal data into a canonical field is refused, and dropped columns are named in the import report so you can see they were discarded rather than merely ignored.

How the boundary is built and proved

What we do not claim

  • That your data is encrypted. Your operating system may encrypt the disk; that is a different statement, and it is not ours to make.
  • That the early-access build is code-signed. It is not yet — the Windows portable build ships unsigned, and signing is a documented, outstanding release task.
  • That local-first defends against someone who already has your Windows account.
08Run identity

The same inputs produce the same numbers. Every time.

  1. 01

    A run has a checksum

    The same normalised inputs, rate-plan version, mappings, settings and engine version produce the same findings, the same totals and the same run checksum — regardless of the order rows appear in any input file.

  2. 02

    A completed run is frozen

    Inputs, rate-plan version, mappings, settings and findings are fixed when a run completes. Editing a rate afterwards creates a derived run; the original keeps its numbers, so a dispute you already sent stays reproducible.

  3. 03

    A rate change is an amendment

    A published contract revision cannot change. Altering a rate creates a new version with every rule restamped to it, and each completed audit stays attached to the exact rules it used.

  4. 04

    No model decides financial correctness

    There is no language model anywhere in the reconciliation path. Every number the product shows is arithmetic a person can reproduce from the evidence pane.

09Alternatives

Against the two things brands do today.

Finance teams already reconcile invoices, and audit firms already recover money. Both work. Both have a shape BillDelta deliberately does not have.

How BillDelta differs structurally from a spreadsheet reconciliation and from a contingency audit engagement.
A spreadsheet reconciliationA contingency audit engagementBillDelta
Who runs itYour teamA third partyYour team
Repeating it next monthRebuild itRe-engageRun the period
Contract versionsKept by conventionHeld by the firmImmutable published revisions
Line-level evidenceWhatever you keptIn their reportAttached to every finding
Where the data goesWherever the file goesOut to a third partyStays on your machine
Cost of a findingYour team’s timeA share of what is foundNothing beyond the licence

None of this makes spreadsheets wrong. A spreadsheet is where most of this work starts and it is very good at it — until effective-dated rate versions, charge-code mappings, row-level provenance and a repeatable monthly run all have to live in the same workbook.

10Who it is for

Built for the company paying the invoice.

BillDelta is for e-commerce and DTC brands with enough outsourced fulfillment spend that a month of billing is worth checking properly.

Head of Operations · VP Ops · COO
Owns the provider relationship and the monthly invoice approval, and needs the conversation with the 3PL to start from something defensible.
Finance Manager · Controller · Head of Finance
Signs off the accrual and the payment, and needs to know which part of a variance is a real difference and which part is missing detail.
Supply Chain & Fulfillment Operations
Holds the activity exports the whole check depends on, and is the one who can tell whether a quantity is plausible.

A good fit when

  • You outsource fulfillment to a 3PL and receive a line-level invoice.
  • You can export orders, receipts, returns or inventory snapshots from your own systems.
  • Your rate card is a rate card — priced terms with effective dates, not a handshake.
  • You work on Windows.

Not the right product when

  • Your provider bills one blended figure with no line detail.
  • An hour a month in a spreadsheet already settles it.
  • What you need is parcel and postage re-rating — that is a different product.
  • You need macOS or Linux today.
11Early access

One product. One price. No share of what you find.

BillDelta is in early access: the engineering milestones are independently reviewed and closed, and the build is going to a small number of design partners before general release.

BillDelta Early Access

$299/ month

$2,990/ year

Two months against the monthly rate.

Windows desktop licence. Windows 10/11, 64-bit.

What the licence covers

  • One 3PL provider
  • Unlimited local audits
  • Reconciliation across all eight rate primitives
  • Activity-substantiated findings wherever your exports support them
  • Evidence and provenance on every finding
  • CSV, XLSX, printable HTML and locally printed PDF dispute packs
  • Immutable contract revisions and reproducible run checksums
  • Direct access to the people building it

No gain-share. Keep what you find.

BillDelta does not take a percentage of what an audit turns up. The software costs what it costs, and a difference you identify is yours.

What early access means here

  • The Windows build is a portable ZIP and is currently unsigned, so Windows will warn you on first launch.
  • It is version 0.9.0 — engine 1.2.0-m1, persistence schema 7 — and the release candidate is technically closed.
  • Pricing beyond a single provider is not published, because it is not decided.
  • You will be talking to the people writing the code.

Pricing for additional providers is not published here because it is not settled. If you run more than one 3PL, say so in the request and it will be part of the conversation rather than a number invented for a web page.

12Questions

Before you ask.

What files do I need to start?

At minimum a line-level invoice from your 3PL as CSV or XLSX, and your contracted rates. To check quantities as well as rates you also need exports from your own systems — orders or shipments, receipts, returns, and inventory snapshots for storage.

What if I only have the invoice and the contract?

The audit still runs. Every charge is checked against the contracted rate for its service date and the arithmetic is recomputed. Those findings reach Level 1 — the rate and the multiplication are checked, the quantity is still your provider’s figure. Quantities become checkable when you add the matching activity export.

Does BillDelta upload my billing data anywhere?

No. The reconciliation path contains no network call, no telemetry and no analytics. Files are read where they already are, canonical records are held in a local SQLite workspace, and exports are written where you choose to write them.

Is BillDelta a cloud service?

No. It is a desktop application for Windows. There are no accounts, no sync and no multi-user access — by design, not as a limitation waiting to be lifted.

Does it read Excel files?

It reads .xlsx and CSV. Legacy .xls, macro-enabled .xlsm, .xlsb, ODS, Google Sheets, PDF and scanned documents are not supported. Cached formula results are deliberately not trusted for mapped fields, so export a values-only workbook when your provider sends a calculated sheet.

Does BillDelta decide that every difference is an overcharge?

No, and it is built so it cannot. A difference only enters the potential-overcharge total if the rate was checked against the contract or the quantity was rebuilt from your own exports. Everything else is reported as needing supporting detail and excluded from the claim. Timing differences and charges in your favour are separated out as well.

Can I export the findings?

Yes — the full ledger or exactly the filtered view, as CSV or XLSX; a printable HTML dispute pack; and a PDF printed locally. The pack separates dispute candidates from rows that merely need detail, and carries the manifest a recipient needs to reproduce the run.

Does it read my contract PDF?

No. There is no PDF parsing and no OCR anywhere in the product, and no model reads your contract. Rate cards are configured as structured rules with contract references and effective dates, which is what makes a finding citable back to a clause.

Does it audit the whole invoice?

No, and it says so on screen. Carrier transportation — postage, parcel zones, dimensional weight, fuel surcharges — is displayed for invoice balance and never recomputed. Parcel audit is a different, well-served product. BillDelta covers the warehouse’s own services.

What operating system is supported?

Windows 10 and 11, 64-bit. The current early-access build is a portable ZIP: unzip it and run it, with no installer. It is not code-signed yet, so Windows SmartScreen will warn on first launch. macOS and Linux are not supported today.

Why do the screenshots say “Fulfillment Bill Verifier”?

That is the product’s working title, and the v0.9.0 build still carries it in the window. BillDelta is the public name. Same application, same version — we would rather show you the build that exists than a mock-up with the new name painted on.

Will it work with my 3PL?

It depends on your contract more than on your provider. If the terms are expressible as the eight priced primitives — flat recurring, per order, pick and pack, inbound receiving, storage, return handling, percentage markup, hourly or project — with volume tiers and period minimums, the engine can price them. Anything else is left unmapped and reported honestly rather than approximated.

Bring one month’s invoice.

The most useful first conversation is a real billing period: your invoice, your rate card, and whichever operational exports you already have. Half an hour is usually enough to see whether the check is worth running every month.

BillDelta 0.9.0 · engine 1.2.0-m1 · persistence schema 7 · portable Windows x64, unsigned early-access build