1. Scope
The Freelance Rate + Capacity Planner converts a target annual take-home income into hourly, day, and project rates that clear cost-of-doing-business, taxes, and realistic utilisation, with an optional safety buffer. It is a pure cost-plus planning model. It does not pull wage data or estimate market-clearing rates for your specific client segment; published wage tables are offered only as an external sanity-check you look up yourself.
2. Inputs and outputs
Inputs: target annual net income, annual overhead (software, insurance, workspace), effective tax rate, a safety buffer (%), working weeks per year, working hours per week, billable utilisation (%), and a project size in hours. You net out PTO, holidays, and admin from working weeks yourself; there is no BLS occupation-code input.
Outputs: required gross revenue (with and without the buffer), billable hours per year, minimum-viable / target / stretch hourly rates, an 8-hour day rate, a project rate, and a utilisation-sensitivity table (required rate at 50 / 60 / 70 / 80 / 90% utilisation). It does not surface a BLS wage percentile.
Engine source: src/lib/freelance-rate/engine.ts.
3. Formula / scoring logic
tax_factor = 1 - tax_rate_percent / 100
revenue_no_buffer = (target_net_income + annual_overhead) / tax_factor
revenue_with_buffer = revenue_no_buffer * (1 + buffer_percent / 100)
# working_weeks_per_year is a direct input (you net out PTO/holidays/admin)
available_hours = working_weeks_per_year * working_hours_per_week
billable_hours = available_hours * (billable_utilization_percent / 100)
minimum_hourly = revenue_no_buffer / billable_hours
target_hourly = revenue_with_buffer / billable_hours
stretch_hourly = target_hourly * 1.15
day_rate = target_hourly * 8 # standard 8-hour day
project_rate = target_hourly * project_hours
4. Assumptions
- Utilisation is the biggest lever. Published freelance benchmarks (Upwork, MBO Partners, academic labour-economics studies) cluster at 60–70% for established independents; new freelancers often sit 30–50%. Overestimating utilisation is the single biggest driver of rate under-pricing.
- Overhead is comprehensive. Software licences, liability insurance, professional-services (accountant, legal), workspace, subscriptions, equipment depreciation. Excluding any of these guarantees a rate that doesn't cover true cost.
- Tax rate is effective, not marginal. US freelancers should include self-employment tax (see Freelance Tax Estimator) on top of federal/state income tax. EU freelancers need to account for VAT registration thresholds and social-insurance contributions.
- Day rate uses an 8-hour day. The day rate is target hourly × 8, not a billable-hours-per-day figure. If you bill fewer productive hours per day, treat the day rate as a ceiling and quote from the hourly instead.
- Single currency / jurisdiction. Cross-border freelancing (working from low-COL jurisdiction for high-COL clients) is out of scope — enter the rate-earning-jurisdiction's cost structure.
5. Data sources
The planner ingests no external data — every figure is user-entered. These public BLS OEWS wage tables are offered only as a self-serve sanity-check: they show where an equivalent employee salary sits, and freelancers typically charge well above it. The tool does not read them or compute a percentile.
- BLS OEWS 15-1252 — Software Developers
- BLS OEWS 15-1254 — Web Developers
- BLS OEWS 27-1024 — Graphic Designers
- BLS OEWS 13-1111 — Management Analysts / Consultants
- BLS OEWS 27-3043 — Writers and Authors
- Eurostat Labour Cost Index — EU fallback
Each link points to the "current" BLS page, which always redirects to the latest published year.
6. Known limitations
- BLS OEWS reports employee wages, not freelance rates. Freelancers typically charge 1.5–2.5× the equivalent employee hourly wage to cover taxes, benefits, and capacity risk. Use the BLS anchor as a floor, not a target.
- Utilisation is a forecast. A rate set at 65% utilisation that actually realises 45% misses the income target by ≈ 30%. Track actuals and re-run quarterly.
- No geographic cost-of-living adjustment. A $100/hr rate means different things in Manhattan and rural Tennessee. The tool does not adjust.
- Emerging-market data is thin. Outside the US/EU, published wage medians are patchy, so even the external sanity-check anchor may be unavailable. The rate-floor math still works from your own income, overhead, tax, and utilisation figures.
- No client-segment differentiation. Agency rates, direct-to-startup rates, and direct-to-enterprise rates often differ 2–3×. Segment explicitly and run the tool once per segment.
7. Reproducibility
Input
target_net = $120,000, overhead = $20,000, effective_tax = 30%, buffer = 0%, working_weeks = 46 (52 less 4 PTO and 2 holiday), hours_per_week = 40, utilisation = 65%.
Expected output
revenue_no_buffer ≈ $200,000 (= $140,000 / 0.70). available_hours = 1,840, billable_hours ≈ 1,196. With buffer 0%, minimum and target rates coincide: hourly ≈ $167.22, day rate ≈ $1,337.76 (× 8 hours), stretch ≈ $192.30/hr (× 1.15).
8. Change log
- 2026-04-24methodology page first published.
Worked example
Run live against the same engine this site ships
(/engines/freelance-rate-capacity-planner.js).
The inputs and outputs below are recomputed on every build and
independently re-verified in CI — they are never hand-authored.
Input
- tool
- freelance_rate_capacity
- target_annual_income
- 140000
- annual_business_overhead
- 22000
- tax_rate_percent
- 28
- buffer_percent
- 15
- working_weeks_per_year
- 46
- working_hours_per_week
- 40
- billable_utilization_percent
- 65
- project_hours
- 35
Output
- minimumViableHourlyRate
- 188.13
- targetHourlyRate
- 216.35
- stretchHourlyRate
- 248.8
- requiredHourlyRate
- 216.35
- requiredDayRate
- 1730.8
- requiredProjectRate
- 7572.25
- billableHoursPerYear
- 1196
- utilizationSensitivity[0].utilizationPercent
- 50
- utilizationSensitivity[0].requiredHourlyRate
- 281.25
- utilizationSensitivity[1].utilizationPercent
- 60
- utilizationSensitivity[1].requiredHourlyRate
- 234.37
- utilizationSensitivity[2].utilizationPercent
- 70
- utilizationSensitivity[2].requiredHourlyRate
- 200.89
- utilizationSensitivity[3].utilizationPercent
- 80
- utilizationSensitivity[3].requiredHourlyRate
- 175.78
- utilizationSensitivity[4].utilizationPercent
- 90
- utilizationSensitivity[4].requiredHourlyRate
- 156.25
- warnings[0]
- Required hourly rate is high. Re-check scope, utilization, and target assumptions.
- assumptionsEcho.annualRevenueNeededNoBuffer
- 225000
- assumptionsEcho.annualRevenueNeededWithBuffer
- 258750
- assumptionsEcho.availableHoursPerYear
- 1840
- assumptionsEcho.billableUtilizationPercent
- 65
- assumptionsEcho.taxRatePercent
- 28
Frequently asked questions
- What does the Freelance Rate + Capacity Planner do?
- It converts a target annual take-home income into an hourly or daily rate that clears cost-of-doing-business, taxes, and realistic utilisation, anchoring rates to US BLS OEWS wage data where available with an EU fallback via Eurostat LCI.
- Does it predict market rates?
- No. It is a cost-plus planning model — it does not estimate market-clearing rates for your specific client segment.
- Can I verify it with a worked example?
- Yes. With target_net = $120,000, overhead = $20,000, effective_tax = 30%, pto_weeks = 4, holidays = 2, hours_per_week = 40, utilisation = 65%: working_weeks = 46, billable_hours ≈ 1,196, hourly_rate ≈ $167.22/hr, day_rate ≈ $1,337.76/day (hourly × 8).