Self-employment tax plus income tax (typically 25-35%).
Hours actually spent on client work (exclude admin tasks).
Vacation, holidays, and sick days.
Gross Revenue Needed:–
Total Billable Hours/Year:–
Your Minimum Hourly Rate:–
How to Calculate Your Freelance Hourly Rate
Determining the right hourly rate is one of the most critical challenges for freelancers, consultants, and independent contractors. Unlike a salaried employee, your rate must cover not just your salary, but also your overhead costs, taxes, and unbillable time.
Many new freelancers make the mistake of simply dividing their previous salary by 2,080 (the standard number of working hours in a year). This approach often leads to burnout and financial struggle because it fails to account for the unique economics of running a solo business.
The 3 Pillars of a Sustainable Rate
To calculate a rate that ensures your business thrives, you must consider three specific factors:
Overhead & Business Expenses: Software subscriptions, health insurance, equipment, and marketing costs are no longer covered by an employer. These must be factored into your gross revenue target.
The "Unbillable" Gap: You cannot bill for 40 hours a week. You need time for invoicing, finding new clients, and administrative tasks. A realistic billable week is often 20-30 hours, not 40.
Self-Employment Taxes: Without an employer paying half of your Social Security and Medicare taxes, your tax burden effectively doubles. You must markup your rate to preserve your net income.
Example Calculation
Let's say you want to take home $60,000 a year.
Expenses: You estimate $5,000/year in costs.
Taxes: You anticipate a 30% tax rate. To net $60k + cover $5k expenses, you actually need to gross approximately $92,857.
Hours: You plan to work 25 billable hours a week and take 4 weeks off (vacation/sick). That results in 1,200 billable hours per year (48 weeks × 25 hours).
Result: $92,857 divided by 1,200 hours equals an hourly rate of roughly $77.38.
Using the calculator above ensures you don't underestimate these hidden costs, helping you quote clients with confidence and financial security.
function calculateFreelanceRate() {
// 1. Get input values
var salaryInput = document.getElementById("annualSalary").value;
var expensesInput = document.getElementById("annualExpenses").value;
var taxRateInput = document.getElementById("taxRate").value;
var hoursWeekInput = document.getElementById("billableHoursPerWeek").value;
var weeksOffInput = document.getElementById("weeksOff").value;
// 2. Validate inputs
if (salaryInput === "" || hoursWeekInput === "" || weeksOffInput === "") {
alert("Please fill in all required fields to calculate your rate.");
return;
}
var netIncome = parseFloat(salaryInput);
var expenses = expensesInput === "" ? 0 : parseFloat(expensesInput);
var taxPercent = taxRateInput === "" ? 0 : parseFloat(taxRateInput);
var hoursPerWeek = parseFloat(hoursWeekInput);
var weeksOff = parseFloat(weeksOffInput);
// Edge case: prevent negative numbers or invalid logic
if (netIncome < 0 || expenses < 0 || hoursPerWeek <= 0 || weeksOff 52) {
alert("Please enter valid positive numbers. Weeks off cannot exceed 52.");
return;
}
// 3. Perform Calculations
// Step A: Calculate Gross Revenue Needed
// Formula: Gross = (Net Income + Expenses) / (1 – TaxRateDecimal)
// If tax is 30%, you keep 70%. (Net + Exp) must be 70% of Gross.
var taxDecimal = taxPercent / 100;
// Prevent division by zero if tax is 100% (unlikely but possible error)
if (taxDecimal >= 1) {
alert("Tax rate must be less than 100%.");
return;
}
var grossRevenue = (netIncome + expenses) / (1 – taxDecimal);
// Step B: Calculate Total Billable Hours
var workingWeeks = 52 – weeksOff;
var totalBillableHours = workingWeeks * hoursPerWeek;
if (totalBillableHours <= 0) {
alert("Total billable hours must be greater than zero.");
return;
}
// Step C: Calculate Hourly Rate
var hourlyRate = grossRevenue / totalBillableHours;
// 4. Update the UI
document.getElementById("grossRevenueDisplay").innerHTML = "$" + grossRevenue.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("totalHoursDisplay").innerHTML = totalBillableHours.toLocaleString('en-US') + " hrs";
document.getElementById("hourlyRateDisplay").innerHTML = "$" + hourlyRate.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Show result div
document.getElementById("rateResult").style.display = "block";
}