earnly

How to Track Freelance Income Across Clients and Platforms

July 2026 · 9 min read · by the Earnly team

How to track freelance income in six steps: list every income source, record gross vs fees per payment (Stripe keeps 2.9% + $0.30, PayPal about 3.49% + $0.49), track invoice status, set aside 25-30% for taxes, review monthly take-home, and forecast next month conservatively. Here is each step in detail, plus the exact spreadsheet columns to use.

Step 1: List every income source

Start with a complete inventory, because forgotten sources are where tracking breaks down. Most freelancers have more than they think:

  • Direct client invoices (paid by Stripe, PayPal, bank transfer, or check)
  • Marketplace work (Upwork, Fiverr, and similar, each with its own service fee)
  • Productized income: templates on Gumroad, courses, digital downloads
  • Recurring extras: affiliate links, retainers, memberships

Write down for each one: how it pays (invoice vs automatic payout), what it charges in fees, and when the money actually lands. That last column is the one everyone skips and then regrets.

Step 2: Record gross vs fees for every payment

The single biggest tracking mistake is writing down what the client agreed to pay instead of what arrived. Those are different numbers, and the gap is fees. Real math with published US rates (as published, figures change):

  • Stripe (2.9% + $0.30): a $1,500 invoice paid by card arrives as $1,456.20. Fee: $43.80.
  • PayPal goods and services (~3.49% + $0.49): the same $1,500 arrives as $1,447.16. Fee: $52.84.
  • Small invoices hurt more: on a $50 payment, Stripe's effective rate is 3.5% and PayPal's is 4.5%, because of the flat cent components.

Across a $60,000 year paid mostly by card, that is roughly $1,800 to $2,100 in processing fees - a real line item, and (ask your accountant) commonly a deductible one. Record three numbers per payment, always: gross, fee, net. A platform fees calculator does the per-platform math for you, and the fuller fee walkthrough is in PayPal fees explained.

Step 3: Track invoice status - sent, paid, overdue

Income you have invoiced but not received is not income yet, and it goes missing quietly. Keep a live list where every invoice has exactly one status:

  1. Sent - with the date and the payment terms (net-15 or net-30; put terms on every invoice).
  2. Paid - with the date it landed and the net amount after fees.
  3. Overdue - anything past terms. Nudge politely at day 3 overdue, firmly at day 14.

Review this list weekly. Freelancers who chase at day 3 get paid weeks earlier than freelancers who notice at day 45. An invoice tracker keeps the statuses honest without you re-reading your sent folder.

Step 4: Set aside taxes from every payment

No one withholds tax from freelance income. The widely used rule of thumb is moving 25% to 30% of each net payment into a separate account the day it lands, so quarterly estimated tax dates never surprise you. This is general information, not tax advice - your rate depends on your situation, so confirm the percentage with a tax professional. The tracking habit is what matters: skim it per payment, not per panic.

Step 5: Review monthly take-home

Once a month, total three numbers across all sources: gross earned, fees paid, and net take-home. Then look at the trend, not the month in isolation. Questions worth asking each review:

  • Which source had the highest effective fee rate this month, and was it worth it?
  • What percentage of invoiced work is still unpaid?
  • Is net growing, or is gross growing while fees eat the difference?

Step 6: Forecast next month conservatively

A usable freelance forecast has two tiers: committed (signed retainers plus invoices already sent) and likely (recurring clients who have not confirmed yet, discounted to maybe 70%). Ignore hopeful pipeline entirely. Forecast net, not gross, and treat the number as an estimate for planning, never a promise. If committed net covers your fixed costs, everything else is margin; if it does not, you know three weeks early instead of three days late.

The spreadsheet template: columns that work

A spreadsheet genuinely works for this at small scale. These columns cover all six steps:

ColumnExampleWhy it matters
Date landed2026-06-12Cash flow reality, not invoice date
Source / clientAcme Co (Stripe)Per-source totals at review time
Gross$1,500.00What was billed or earned
Fees$43.80The number platforms hide in net deposits
Net$1,456.20What you actually keep
StatusPaidSent / paid / overdue pipeline
Tax set-aside$407.74 (28%)Skimmed the day it lands
Expected pay date2026-07-10For invoices still outstanding

One row per payment, one tab per year, a totals row per month. That is the whole system.

When a tool beats the spreadsheet

The spreadsheet fails in a predictable way: it depends on you typing every row, and the week you get busy is exactly the week you stop. Signals that you have outgrown it:

  • You have 3+ platforms with different fee structures and payout schedules, and reconciling them eats an evening a month.
  • You cannot answer "what lands next week?" without opening four dashboards.
  • Your fee column is guesswork because platforms only show you net deposits.

That is the point of an income tracker built for this. Earnly keeps the same gross-fees-net discipline as the spreadsheet, but per platform and automatic: every source on one board, a payout calendar for expected pay dates, invoice statuses, and a next-month forecast band that is always labeled as an estimate. The Earnly for freelancers page shows how the whole six-step loop looks when the spreadsheet retires.

Whichever you choose, start this week with steps 1 and 2. Gross, fees, net, every payment. Everything else builds on that habit.

Informational only. Fee figures are estimates from published platform schedules and change over time - confirm against your own platform statements, and talk to a tax professional about tax set-asides and deductions.

See your own gross, fees and take-home on one board

Earnly lines up every payout from every platform, itemizes the fee breakdown per platform, and puts every expected pay date on a payout calendar.