Web development finance · Invoicing

Track retainer and project invoices as a web developer

You bill a build in milestones, charge a monthly maintenance retainer, and pass through a hosting plan or a license — and when a client asks 'what's this invoice for?' the answer is buried in a Slack thread and an old SOW. Recording each invoice per client with its status, fiscal year, and the SOW attached keeps billing legible. Cash Workspace gives developers one place to keep labor, pass-through costs, and approvals straight.

The problem

Why developer invoices get tangled

Project milestones, monthly retainers, and pass-through hosting all hit the same clients, and the approvals that justify each one live across email and chat. Without one record, reconciling what's paid is guesswork.

  • A pass-through hosting charge gets mixed in with labor and the markup math is unclear later.
  • A change-order was approved in chat but the matching invoice was never recorded.
  • You can't tell which maintenance months a retainer client has actually paid.
  • A milestone invoice for a sprint is overdue but lost among newer invoices.
  • The signed SOW that justifies the invoice isn't where the invoice lives.

The workflow

Record labor, retainers, and pass-through separately

Keep each invoice tied to its client and its kind — sprint, retainer month, or pass-through — so reconciling is straightforward.

  1. 1

    Set up the client

    One client record per company so project, retainer, and pass-through invoices all roll up together.

  2. 2

    Record milestone invoices

    For each sprint or build milestone, record an invoice with amount, dates, and the milestone name.

  3. 3

    Track retainer months

    Record each monthly maintenance invoice as its own line so paid and unpaid months are obvious.

  4. 4

    Keep pass-through distinct

    Record hosting or license pass-through as its own line with a note, kept separate from labor.

  5. 5

    Attach approvals

    Attach the signed SOW and any change-order approval to the client so each invoice has its paper trail.

  6. 6

    Filter overdue

    Filter for sent and overdue invoices to see which sprints and maintenance months remain unpaid.

Record structure

What to record for each developer invoice

These fields keep labor, retainers, and pass-through costs legible and reconcilable.

Client
The company, kept as one record so all invoice types stay grouped.
Invoice type
Sprint/milestone, retainer month, or pass-through, used as a consistent tag.
Description
The sprint, maintenance month, or service the invoice covers.
Amount
The total and currency; for pass-through, note the underlying cost so the line is clear.
Issue & due dates
When sent and when due, so overdue invoices are easy to find.
Status
Draft, sent, paid, or overdue, updated as payment lands.
Fiscal year
The year folder the invoice belongs to for clean annual totals.
SOW / change order
The signed scope and any approved change order attached to the client record.

Example setup

An example developer invoice setup

One way to keep project, retainer, and pass-through invoices straight.

Project sprints

Milestone invoices per build with amounts, dates, and status.

Retainer months

One invoice line per maintenance month per client so paid months are obvious.

Pass-through costs

Hosting and license pass-through invoices with notes, kept distinct from labor.

Signed SOWs

The signed statement of work and change-order approvals attached to each client.

Common mistakes

Mistakes developers make

  • Folding pass-through hosting into a labor invoice so the line is unclear at year-end.
  • Acting on a change order from chat without recording the matching invoice.
  • Tracking retainer months loosely so you can't tell which are paid.
  • Letting an overdue sprint invoice disappear under newer ones.
  • Keeping the SOW in email instead of attached to the client record.

How it helps

How Cash Workspace helps

Typed invoice lines

Tag each invoice as a sprint, a retainer month, or a pass-through so labor and pass-through costs stay distinct in review.

Retainer month view

Record each maintenance month as its own line so paid and unpaid months are clear at a glance.

Attach the SOW

Keep the signed SOW and change-order approvals attached to the client so every invoice has its paper trail.

Overdue filter

Filter by status to see exactly which sprints and months remain unpaid without searching email.

FAQ

Web developer invoice tracking FAQ

How do I keep pass-through hosting separate from my labor?
Record the pass-through as its own invoice line tagged accordingly, with a note on the underlying cost. Keeping it distinct from labor lines means the markup and the service stay clear when you review later.
Can I see which retainer months a client has paid?
Yes. Record each maintenance month as its own invoice line with a status, so paid and unpaid months are obvious instead of buried in a running total.
Where do change orders go?
Attach the signed change-order approval to the client record next to the SOW, then record the matching invoice, so the scope change and the bill stay linked.
Does Cash Workspace calculate my project profit?
No. You can keep invoice and cost records side by side for your own review, but Cash Workspace organizes records rather than computing profit or margin.

Organizing help — not tax, accounting, or legal guidance

Cash Workspace is a free workspace for organizing invoices, expenses, receipts, clients, and documents. This page is organizing guidance only — not tax, accounting, legal, or bookkeeping guidance. Cash Workspace does not connect to your bank, does not scan or read your receipts for you, and does not move or collect payments. Whether an expense is deductible depends on your situation, so confirm it with a qualified accountant or tax professional.

Keep labor, retainers, and pass-through straight

Start a free workspace and record each invoice with its type, status, and SOW so no unpaid sprint or maintenance month hides in your inbox.