Calculate exactly what you need to charge to meet your income goals while covering taxes and overhead.
The take-home pay you want after expenses and taxes.
Software, hardware, insurance, coworking space, etc.
Be realistic. Exclude admin, marketing, and sales tasks.
Vacation, holidays, and sick days.
Include income tax and self-employment tax.
Extra margin for business growth or rainy days.
Minimum Hourly Rate:$0.00
Gross Annual Revenue Needed:$0.00
Total Billable Hours (Yearly):0
Estimated Tax Liability:$0.00
Why Your Freelance Rate is Higher Than You Think
Many new freelancers make the mistake of taking their previous full-time hourly wage and adding a few dollars on top. This is a recipe for burnout. When you are employed, your employer covers payroll taxes, health insurance, paid time off, and equipment costs. As a freelancer, these costs fall entirely on you.
The "Billable Hours" Trap
It is physically impossible to bill 40 hours a week consistently as a freelancer. You must account for unbillable time, which includes:
Client acquisition and proposal writing
Invoicing and bookkeeping
Skill development and training
Email management and administrative tasks
Most successful freelancers aim for 20 to 30 billable hours per week. This calculator adjusts for this reality, ensuring you earn your target annual income based on actual working hours.
Understanding the Formula
This calculator determines your rate using a reverse-engineering approach:
Total Revenue Need: We calculate your target net income plus business expenses.
Tax Adjustment: We gross up the revenue requirement so that after taxes are removed, you are left with your target net income.
Capacity Calculation: We determine exactly how many hours you can bill in a year by subtracting vacation weeks and weekends.
Final Rate: The Total Gross Revenue is divided by Total Billable Hours to give you your minimum hourly rate.
function calculateFreelanceRate() {
// 1. Get Input Values
var targetIncome = parseFloat(document.getElementById('targetIncome').value);
var annualExpenses = parseFloat(document.getElementById('annualExpenses').value);
var billableHoursWeek = parseFloat(document.getElementById('billableHours').value);
var weeksOff = parseFloat(document.getElementById('weeksOff').value);
var taxRate = parseFloat(document.getElementById('taxRate').value);
var profitMargin = parseFloat(document.getElementById('profitMargin').value);
// 2. Validate Inputs
if (isNaN(targetIncome)) targetIncome = 0;
if (isNaN(annualExpenses)) annualExpenses = 0;
if (isNaN(billableHoursWeek)) billableHoursWeek = 0;
if (isNaN(weeksOff)) weeksOff = 0;
if (isNaN(taxRate)) taxRate = 0;
if (isNaN(profitMargin)) profitMargin = 0;
// Validation for critical division factors
if (billableHoursWeek === 0) {
alert("Please enter valid billable hours per week.");
return;
}
// 3. Perform Calculations
// Calculate total working weeks
var workingWeeks = 52 – weeksOff;
if (workingWeeks Gross = Net / (1 – TaxRate)
var taxDecimal = taxRate / 100;
// Avoid division by zero or negative if tax is 100% (edge case)
if (taxDecimal >= 1) {
taxDecimal = 0.99;
}
var grossRevenue = needWithProfit / (1 – taxDecimal);
// Calculate Tax Amount
var taxAmount = grossRevenue * taxDecimal;
// Calculate Hourly Rate
var hourlyRate = 0;
if (totalBillableHours > 0) {
hourlyRate = grossRevenue / totalBillableHours;
}
// 4. Update the DOM with Results
// Formatter for currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
document.getElementById('displayRate').innerText = formatter.format(hourlyRate);
document.getElementById('displayGross').innerText = formatter.format(grossRevenue);
document.getElementById('displayTotalHours').innerText = Math.round(totalBillableHours).toLocaleString();
document.getElementById('displayTax').innerText = formatter.format(taxAmount);
// Show results area
document.getElementById('results-area').style.display = 'block';
}