GratisAIcareer · field guide · local-first · no account
holdback-release ledger

Reconcile Milestone Holdbacks with Later Releases, Not Just Gross Earnings — Free

Earned gross is not always immediately receivable cash. Track what each milestone withholds and what later rows release, with a balance that cannot release money before it was retained.

The proof surface

An earnings-rate floor does not reconcile withheld milestone cash and later releases against a running retention balance.

InputMilestone code | earned gross dollars | released prior retention dollars; retention withheld from each milestone (%)
Rare deviceAn earnings-rate floor does not reconcile withheld milestone cash and later releases against a running retention balance.
Output artifactEnding modeled retention balance plus complete labeled working
Cost$0 local core · no account, card, paid key or subscription · filing proposal has no checkout
Sample, not your facts: Invented records: Cedar delivery | 900 | 0; Willow delivery | 1200 | 40; Pine delivery | 500 | 100. Retention withheld from each milestone (%) = 10; expected Ending modeled retention balance: 120 $ still retained. These are not quotations, verified observations or personal evidence.

Before using the holdback-release ledger

This ledger rehearses a supplied retention convention for freelance milestones; it does not interpret a contract or decide whether withholding is lawful. Both gross earned and released prior retention are already-agreed inputs, expressed in dollars with at most two decimals. The setting applies the same retention percentage to every milestone, rounded half-up once to cents on that milestone. Releases can only draw from the balance entering the row; new withholding becomes available for a future row. The model starts at zero, excludes tax, disputes, deductions, deposits and payment timing, and reports modeled receivable amounts rather than cash actually received.

Why the flat version breaks

Releases are counted as new earnings

Released retention was already included in earlier gross. Treating it as fresh gross inflates revenue and may cause a second retention deduction. The ledger keeps it in a dedicated column and adds it only to modeled receivable. A running balance makes this distinction visible even when multiple milestones and partial releases occur.

A same-row release borrows from new withholding

This model intentionally allows only prior retained money to be released. Without that timing convention, a first-row release could appear valid merely because the row also withholds something. The input guard checks the incoming balance before adding the current holdback. If the real contract allows same-row netting, document that different convention rather than disguising it as this ledger’s rule.

Intermediate balances are added like transactions

A running balance carries earlier money forward. Summing row balances double-counts that carried amount. The headline is the last balance, and separate totals describe gross, withholding, release and receivable movements. Payment certainty and contract legality are still unverified; an arithmetically reconciled record is not evidence that a client paid or owes the figure shown.

How to work the holdback-release ledger

Separate new work from previously earned money

Enter milestones in the intended recognition order with non-sensitive unique codes. Gross earned is the current milestone amount, not the bank deposit and not earlier retention being released. The third cell is a release from earlier rows only. Keep evidence of actual approval and payment outside this illustration. If the contract has different retention rates for different milestones, this constant-rate ledger is not a faithful model until the source convention is clarified.

State the withholding percentage explicitly

Enter a plain percentage from zero to 100, with at most six decimal places. Zero means no new withholding; 100 means all new gross is retained under the model. Neither is a recommendation. Gross and release fields must be nonnegative two-decimal dollar amounts. The app converts those amounts into integer cents so a one-cent balance and a one-cent release cannot drift into an apparently negative amount through floating-point rounding.

Apply release, withholding and balance movement

First verify that the release does not exceed the retained balance entering the row. Calculate new withholding as gross cents times the exact entered percentage, rounded half-up to cents. Modeled receivable equals gross minus new withholding plus the prior release. Ending retention equals prior balance minus release plus new withholding. The row working shows each component; the headline is the final balance, not the sum of all intermediate balances.

Reconcile before raising a contract question

Check that total gross minus total modeled receivable equals ending retention for this zero-start, no-reversal set. Compare the original contract, approvals and receipts separately. A balance here does not prove an overdue debt or tell you when a release must occur. If a statement differs, ask the client’s finance contact or a qualified accountant to reconcile the exact milestone and release rule; seek legal advice for an enforceability question rather than sending this arithmetic as a demand.

What the holdback-release ledger keeps distinct

QuestionBeforeCheck this working
Releases are counted as new earningsReleased retention was already included in earlier gross. Treating it as fresh gross inflates revenue and may cause a second retention deduction. The ledger keeps it in a dedicated column and adds it only to modeled receivable. A running balance makes this distinction visible even when multiple milestones and partial releases occur.State the withholding percentage explicitly
A same-row release borrows from new withholdingThis model intentionally allows only prior retained money to be released. Without that timing convention, a first-row release could appear valid merely because the row also withholds something. The input guard checks the incoming balance before adding the current holdback. If the real contract allows same-row netting, document that different convention rather than disguising it as this ledger’s rule.Apply release, withholding and balance movement
Intermediate balances are added like transactionsA running balance carries earlier money forward. Summing row balances double-counts that carried amount. The headline is the last balance, and separate totals describe gross, withholding, release and receivable movements. Payment certainty and contract legality are still unverified; an arithmetically reconciled record is not evidence that a client paid or owes the figure shown.Reconcile before raising a contract question

The holdback-release ledger replaces this named manual reconciliation, not source verification or the responsible human's decision.

Run it on the samples, right here

FIRST-LOAD

HYPOTHESIS / PROTOTYPE — checkout unavailable. Calculation is local. A draft is saved automatically in this browser profile when storage is available; Reset to sample clears it. Optional Pro history stores only five summaries and has its own deletion control. State links encode your inputs and can remain in browser history, clipboard or recipients’ records; share only non-sensitive rows. Optional external AI formatting leaves this device. The required site analytics beacon reports page activity; shared URLs contain encoded inputs. Do not treat an encoded URL as private. The calculator has no input-collection endpoint.

Bookkeeping scenario only, not contract interpretation, legal advice, tax advice or a payment guarantee. Verify approvals and actual receipts with the client’s finance contact and a qualified accountant; take enforceability disputes to an appropriate legal adviser.

Data note: This holdback-release ledger calculates in the tab from Milestone code | earned gross dollars | released prior retention dollars. No input-collection endpoint, AI request or file upload is built into it. Drafts may be saved locally; explicit input-state links and optional external formatting can disclose the records. Use non-sensitive codes and clear the draft when finished.

Go deeper: the companion app files the same reading as a bound register page

The article demo above runs without limits. The companion app keeps a local history, exports the rows as CSV, prints the holdback-release ledger reading, and holds your drafts on this device — one complete free app run; the proposed $4 one-time filing layer is not for sale.

Keep the complete holdback-release ledger answer free; optional filing proposes its boundary-preserving print, row-and-summary CSV and five local reading summaries. The $4 one-time prototype is not for sale; another calculation remains free in the article demo.

Open the holdback-release ledger companion

Boundary

Bookkeeping scenario only, not contract interpretation, legal advice, tax advice or a payment guarantee. Verify approvals and actual receipts with the client’s finance contact and a qualified accountant; take enforceability disputes to an appropriate legal adviser.

What this is built on

Before: gross milestone earnings looked like available cash. After: new withholding, prior releases and the remaining retained balance have separate roles in one reconcilable ledger.

Three worked readings, with different inputs

Sample A — typical inputs

Cedar delivery | 900 | 0
Willow delivery | 1200 | 40
Pine delivery | 500 | 100

Setting: Retention withheld from each milestone (%) = 10. Expected summary: 120 $ still retained.

The first milestone withholds 90 and leaves 810 newly receivable. The second adds 120 of retention and releases 40 from the prior 90, making 1,120 receivable and 170 still retained. The third adds 50 and releases 100 from that prior 170, making 550 receivable and leaving 120. Gross earned totals 2,600; modeled receivable totals 2,480. Their 120 difference reconciles to the running retained balance, not a fee or a proven late payment.

Sample B — changed plan

Orchard delivery | 250 | 0
Harbor release only | 0 | 25

Setting: Retention withheld from each milestone (%) = 10. Expected summary: 0 $ still retained.

The 250 milestone withholds 25 at ten percent. A separate release-only row pays out that prior retained amount and returns the balance to zero. The release is not earned gross again; counting it as new revenue would double-count the same work. This ledger starts with no retained balance, so a release on the first row without earlier withholding is refused.

Sample C — boundary convention

Birch zero-activity boundary | 0 | 0

Setting: Retention withheld from each milestone (%) = 10. Expected summary: 0 $ still retained.

A row with no gross earned and no prior release has no movement and leaves zero retained. It remains visible as an explicit bookkeeping boundary, not a claim that a contract waives payment. Negative amounts are rejected because reversals and credit notes need their own specified accounting convention. The tool cannot infer those terms from a zero row.

Optional AI formatting, never the calculation

Manual entry completes this holdback-release ledger for free without signup. If available to you, the free AI Studio interface linked in the sources may format fictional or non-sensitive notes; external access may require an account. No API key or AI call is built into this tool. Free-tier content may be used to improve products. Review each cell and transcribe it to the labeled row schema; do not paste the JSON object into the row box.

Format only these fictional or non-sensitive notes for a holdback-release ledger. Return strict JSON shaped as {"rows": [{"label": "string", "cells": ["string", "string"]}], "setting": "string"}. The columns are Milestone code | earned gross dollars | released prior retention dollars; the setting is Retention withheld from each milestone (%). Keep all supplied strings and quantities exactly; do not calculate, infer missing entries, invent dates or add advice. If any required value is missing, return an empty rows array and ask me for it separately. I will verify every cell against my source and manually transcribe rows using vertical bars before running the local calculator.

An AI response is not executed, fetched or trusted as a result. Missing values remain questions; the strict local parser checks the rows you actually enter.