Milestone Payment Tracker

Track deposits, milestones, due dates, paid dates, and outstanding balances.

Auto saved
Milestones0
Total value$0.00
Paid$0.00
Outstanding$0.00
No milestone payments yetAdd deposit and milestone payments to track due dates, paid dates, and outstanding balance.

Milestone Payment Tracker - Deposits, Due Dates, Paid Dates, and Outstanding Balances

Local milestone payment log. Deposits, stage payments, and outstanding balances.

Updated May 17, 2026
Share & Support

What's included

Features

Milestone payment tracker for freelance deposits, stage payments, and final balances
Fields for milestone, project, client, status, amount, paid amount, currency, due date, paid date, and notes
Outstanding balance metric calculated from amount minus paid amount
Status options for Due, Invoiced, Paid, Overdue, and Waived payments
CSV export for payment review and JSON backup for local IndexedDB records
Sample milestone payments for deposit, approval, and launch balance testing
Project billing and stage payment tracker — track deposits, milestone invoices, and final payments across multiple projects without spreadsheets or accounting software
Search across project, client, milestone, and payment notes
Auto saved indicator confirms payment records are saved locally
No login, no upload, and no external payment processor connection
GitHub Gist Backup
Sync data across devices via a private GitHub Gist. Paste your token, click Sync - edits auto-backup every 10 seconds. Restore instantly on any device with the Gist ID.

About this tool

Track Project Payments by Milestone Instead of Chasing Memory

Most freelance projects are paid in stages. A deposit to start, a payment at design approval, another at development completion, and the final balance at launch or handoff. When those stages live across email threads, PDF invoices in different folders, and a bank statement that does not label transactions by project, it becomes easy to lose track of what has been paid, what is still owed, and which milestone is late.

This milestone payment tracker gives each payment stage its own record: milestone name, project, client, amount, paid amount, currency, due date, paid date, status, and notes. The summary totals all milestone value, paid amount, and outstanding balance - the three numbers that matter for project cash-flow visibility. Everything is stored in IndexedDB on your device and is not uploaded to a server.

One record per payment stage creates clarity. Add the deposit as its own record. Add the design-approval payment as another. Add the launch balance as a third. This granularity means you can see exactly which stage is outstanding, whether a partial payment has been made, and when each payment was due versus when it actually arrived. A single invoice record for the full project amount does not give you this view.

Partial payment tracking handles real-world project billing. Clients sometimes pay a portion of a stage payment before the rest follows. Enter the amount received in the paid amount field without changing the status to Paid. The outstanding balance metric subtracts paid amounts from the full milestone value, so the number reflects reality rather than treating a half-paid stage as fully outstanding or fully settled.

Status tracking keeps overdue payments visible. Use Due when a payment date is approaching, Invoiced when the invoice has been sent, Paid when fully settled, Overdue when the due date has passed without full payment, and Waived for amounts you are not pursuing. The overdue status pairs with notes - use them for client promises, payment plan agreements, and follow-up history. When it is time to write a follow-up, the context is already there.

The decision log in notes is the audit trail. Record invoice numbers, payment method, client response dates, and partial payment acknowledgements. This is what you reference when a client says "I thought that was already paid" or when you need to reconcile your records with a bank statement.

Use alongside Proposal Builder to define the payment schedule before the project starts, Contract Template Manager for payment clause language, Local Invoice Tracker for invoice records, and Scope Creep Tracker for extra-billable changes that affect milestone amounts. Export JSON backup before clearing browser data.

If you are a developer or designer freelancer looking to build skills and command higher rates, the React Playground, CSS Playground, and HTML Playground offer structured, interactive learning - no install, no setup required.

Step by step

How to Use

  1. 1
    Add each payment milestoneCreate one record for the deposit, design approval payment, development payment, launch balance, or any other payment stage.
  2. 2
    Enter amounts and datesAdd amount, paid amount, currency, due date, paid date, project, client, and status. Use paid amount for partial payments.
  3. 3
    Update statusMark milestones as Due, Invoiced, Paid, Overdue, or Waived. Keep notes for invoice numbers, payment method, or client promises.
  4. 4
    Review balancesUse total value, paid, and outstanding metrics to understand what remains unpaid across active project milestones.
  5. 5
    Export recordsExport CSV for payment review or JSON for backup and restore before clearing browser data or changing devices.
  6. 6
    Back up to GitHub Gist (optional)Click the GitHub icon in the toolbar and paste a personal access token with gist scope. Your milestone payment records sync automatically every 10 seconds after edits and are stored as a private Gist - restore on any device by entering the same token and Gist ID.
  7. 7
    Keep your Gist private — never store sensitive data in itGitHub private Gists are not truly encrypted — they are unlisted links. Anyone who has your Gist URL or Gist ID can read the full contents without logging in. Never share your Gist URL, Gist ID, or Personal Access Token with anyone. Avoid storing passwords, API keys, or highly sensitive credentials. For maximum privacy with no data leaving your device, skip Gist sync and use the Export and Import buttons to transfer files manually instead.

Real-world uses

Common Use Cases

?
Freelance project payment tracker
Track each payment stage from deposit through final handoff so project cash flow is visible before work continues.
?
Payment due date tracker
Record due dates and paid dates for each milestone. Use status to mark due, invoiced, paid, overdue, or waived payments.
?
Outstanding balance tracker
Compare total milestone value against paid amount. The summary shows remaining outstanding balance across recorded payments.
?
Deposit and launch balance log
Keep deposits, approval payments, and launch balances separate instead of treating the whole project as one invoice event.
=
Proposal-to-payment schedule
Use Proposal Builder to define payment terms, then track actual due and paid dates here as the project moves forward.
?
Private local payment notes
Payment amounts and client names stay in IndexedDB unless you export them. Back up JSON before clearing site data.

Got questions?

Frequently Asked Questions

Create one record per payment stage. Add the project, client, milestone name, due date, amount, paid amount, paid date, and status. Review the outstanding balance metric to see what remains unpaid.

Yes. Add the deposit as its own milestone, then add design approval, development completion, launch balance, or other stages as separate records.

Outstanding balance is calculated from each milestone amount minus paid amount, excluding waived records from the outstanding total. Use paid amount for partial payments.

Yes. CSV export downloads the milestone payment records for spreadsheet review, bookkeeping, or manual comparison with invoices.

No. This tool tracks payment stages and balances. Use Local Invoice Tracker for invoice records and browser print-to-PDF output.

Yes. Set the status to Overdue when the due date has passed and payment has not arrived. Add notes for follow-up history or client responses.

Records are saved locally in IndexedDB in your browser. Export JSON before clearing site data, resetting your browser profile, or moving to another device.

Yes. When the tool is empty, Load sample data adds example deposit, approval, and launch balance records you can edit or delete.

Yes - use the GitHub Gist backup. Click the GitHub icon in the header, paste a personal access token (gist scope only), and click Sync Now. Your data is saved as a private Gist and auto-syncs every 10 seconds after edits. On another device, paste the same token and Gist ID to restore.

GitHub "private" Gists are not encrypted — they are unlisted links. Anyone who has your Gist URL or Gist ID can read the full contents without needing a GitHub login. Never share your Gist URL, Gist ID, or Personal Access Token with anyone. Avoid storing passwords, API keys, or highly sensitive credentials. Use Gist sync for regular workflow data only. For maximum privacy with no data leaving your device at all, skip Gist sync and use the Export and Import buttons to move files manually via USB or your own encrypted storage.