Invoices

How to Bill Clients as a Developer

Developer Billing Retainers Time Tracking

A recurring invoice set up for a monthly developer retainer in Fee-Lion

Dev work rarely bills one way. A retainer client wants a predictable monthly number, a startup wants you on the clock, and a fixed-bid build wants a deposit before you write a line. Fee-Lion lets you run all three at once, so the way you invoice matches the way you actually agreed to work.

Match the billing model to the contract

Before you send anything, decide which rhythm fits each engagement. You can mix and match across clients — and even within one.

  • Sprint or monthly retainer — a fixed block of capacity billed on a schedule. Best for ongoing maintenance, “X hours a month,” or a standing seat on a team.
  • Pure hourly — you track time and bill what you worked. Best for open-ended discovery, bug-hunting, or “we’ll see where it goes” projects.
  • Fixed-scope build — a quoted price for a defined deliverable, usually with a deposit up front. Best for a clearly specced feature, integration, or MVP.

Set up a sprint or monthly retainer

A retainer should land in the client’s inbox without you lifting a finger each cycle. Use a recurring invoice so the schedule does the work.

  1. In the left sidebar, open Invoices and choose to create a recurring invoice.
  2. Add a line item for the retainer block — a fee for the flat monthly amount, or a task (hours × rate) if you bill a set number of capacity hours.
  3. Set the cadence (monthly, every two weeks for a sprint) and a start date.
  4. Turn on auto-pay so an enrolled client is charged automatically each cycle and you skip the chasing.

Tip: Set your default payment terms, tax, and deposit defaults once at Settings → Preferences. Every new invoice and estimate inherits them, so a Net 15 retainer doesn’t quietly go out as Net 30.

Bill hourly overage on top of a retainer

The honest middle ground: a retainer covers the baseline, and anything beyond it bills at your rate. Fee-Lion’s time tracking flows straight onto an invoice, so overage isn’t a spreadsheet exercise.

  1. As you work, log hours with the timer or a manual entry under Time in the sidebar, tagging each entry to the client or project.
  2. At the end of the cycle, open the client’s invoice and bill tracked time to it — your unbilled hours become line items at their rate.
  3. Keep the retainer as its own line, and let the tracked hours sit beneath it as the overage. The client sees exactly what the baseline bought and what ran over.

This is also the cleanest way to run a pure-hourly client: track everything, bill the tracked time to a fresh invoice, send.

Quote a fixed-scope build with a deposit

For a defined build, lead with an estimate so the price and scope are agreed before anyone codes. Deposits protect your runway.

  1. From Estimates in the sidebar, build the quote with tasks (hours × rate) for the work and fees for fixed deliverables or licenses.
  2. Add a deposit % so the client pays a slice up front — set a sensible default at Settings → Preferences so you don’t forget it.
  3. Send it. The client approves in their portal with a magic link — no login, no friction.
  4. Once approved, convert the estimate to an invoice (or a project) in one click. The deposit invoice goes out first; the balance follows on delivery.

However the client pays, the card payment lands in your own Stripe via the Pay button — money goes to you, minus a small platform fee, not into a holding account.

What’s next

Join the discussion

Members join the discussion

Comments are for Fee-Lion users. Enter your email and we'll send a one-time link to sign in — no password.

Not a customer yet? Start free — then join the conversation.