Setting the right hourly rate is one of the biggest challenges for freelancers, consultants, and independent contractors. Unlike a salaried employee, your rate must cover not just your take-home pay, but also your taxes, business expenses, insurance, retirement savings, and unbillable time.
This Freelance Hourly Rate Calculator uses a reverse-engineering method to determine exactly what you need to charge to meet your financial goals.
The Logic Behind the Calculation
Most beginners make the mistake of taking their desired annual salary and dividing it by 2,080 (the standard 40-hour work week over 52 weeks). This inevitably leads to undercharging because it ignores three critical factors:
Non-Billable Time: You cannot bill clients for administrative tasks, marketing, invoicing, or finding new work. A realistic freelancer often only bills 20-30 hours a week, not 40.
Overhead Expenses: Software subscriptions, hardware, internet, coworking space fees, and professional insurance come directly out of your revenue.
Self-Employment Taxes: As a freelancer, you are responsible for both the employer and employee portion of taxes in many jurisdictions.
Step-by-Step Formula
Our calculator follows this workflow to ensure your rate covers everything:
Calculate Total Working Weeks: We subtract your planned vacation and sick weeks from 52.
Determine Total Billable Hours: We multiply your working weeks by your realistic daily billable hours.
Aggregate Costs: We add your target net salary, annual business overhead, and a profit margin buffer.
Adjust for Taxes: We calculate the gross revenue required to net your target income after taxes.
Final Division: The Gross Revenue Goal is divided by Total Billable Hours to find your minimum rate.
Why Include a Profit Margin?
In the input fields, you will see an option for "Desired Profit Margin." This is crucial for business growth. If you only charge enough to cover your salary and expenses, you break even. A profit margin allows you to reinvest in your business, upgrade equipment, or weather slow periods without dipping into your personal salary.
function calculateFreelanceRate() {
// Get inputs
var targetNet = parseFloat(document.getElementById('fr_target_salary').value);
var monthlyExp = parseFloat(document.getElementById('fr_monthly_expenses').value);
var billableHoursWeekly = parseFloat(document.getElementById('fr_billable_hours').value);
var weeksOff = parseFloat(document.getElementById('fr_weeks_off').value);
var taxRate = parseFloat(document.getElementById('fr_tax_rate').value);
var profitMargin = parseFloat(document.getElementById('fr_profit_margin').value);
// Validation
if (isNaN(targetNet) || isNaN(monthlyExp) || isNaN(billableHoursWeekly) || isNaN(weeksOff) || isNaN(taxRate) || isNaN(profitMargin)) {
document.getElementById('fr_error').style.display = 'block';
document.getElementById('fr_result').style.display = 'none';
return;
}
// Logic Check: Cannot take more than 52 weeks off
if (weeksOff >= 52) {
alert("Weeks off cannot be 52 or more.");
return;
}
document.getElementById('fr_error').style.display = 'none';
// 1. Calculate Working Time
var totalWeeks = 52 – weeksOff;
var totalBillableHours = billableHoursWeekly * totalWeeks;
// 2. Calculate Costs
var annualOverhead = monthlyExp * 12;
// 3. Calculate Gross Revenue Needed
// Formula: (Target Net + Expenses) / (1 – TaxRate) … simplified, but let's do it stepwise for clarity
// Actually, Profit Margin should be added to costs or treated as a multiplier on the rate.
// Let's treat Profit Margin as extra markup on the base cost.
// Base amount needed to cover salary + expenses
var baseNeed = targetNet + annualOverhead;
// Account for Taxes: We need Gross such that Gross – (Gross * Tax) = BaseNeed
// Gross * (1 – Tax) = BaseNeed -> Gross = BaseNeed / (1 – Tax)
var taxDecimal = taxRate / 100;
var grossBeforeProfit = baseNeed / (1 – taxDecimal);
// Add Profit Margin (Markup on gross)
var profitMultiplier = 1 + (profitMargin / 100);
var totalRevenueGoal = grossBeforeProfit * profitMultiplier;
// 4. Calculate Hourly Rate
var hourlyRate = totalRevenueGoal / totalBillableHours;
// 5. Calculate derived values for display
var taxAmount = totalRevenueGoal – (totalRevenueGoal / (1 + (taxDecimal / (1-taxDecimal)))); // Approximation for display or simple calc:
// Let's use simple logic for display: Total Revenue * Tax Rate? No, tax is usually on profit.
// Let's stick to the reverse engineering logic:
// Tax is roughly Total Revenue – (Target Net + Expenses + Profit).
var totalExpensesAndNet = targetNet + annualOverhead;
var estimatedTax = totalRevenueGoal * taxDecimal; // Simple estimation based on gross
// Re-adjust logic for strictness:
// If I bill $100k and tax is 25%, I pay $25k tax. I have $75k left.
// If I need $75k (Net + Exp), then $75k / 0.75 = $100k. Correct.
var grossRevenue = (targetNet + annualOverhead) / (1 – (taxRate/100));
// Apply profit margin on top of the calculated gross
grossRevenue = grossRevenue * (1 + (profitMargin/100));
var finalHourlyRate = grossRevenue / totalBillableHours;
var taxPayable = grossRevenue * (taxRate/100);
// Output Formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById('fr_hourly_res').innerHTML = formatter.format(finalHourlyRate);
document.getElementById('fr_gross_res').innerHTML = formatter.format(grossRevenue);
document.getElementById('fr_hours_res').innerHTML = Math.round(totalBillableHours);
document.getElementById('fr_tax_res').innerHTML = formatter.format(taxPayable);
document.getElementById('fr_overhead_res').innerHTML = formatter.format(annualOverhead);
document.getElementById('fr_result').style.display = 'block';
}