Determine exactly what you need to charge per hour to meet your financial goals.
Your Recommended Hourly Rate:
How to Set Your Freelance Hourly Rate: A Comprehensive Guide
Setting the right hourly rate is the most critical decision a freelancer can make. If you charge too little, you risk burnout and financial instability. If you charge too much without justification, you may struggle to close deals. This calculator helps you bridge the gap between your personal needs and your professional pricing.
The Formula for Freelance Success
Most beginners make the mistake of taking their previous corporate salary and dividing it by 2,000 hours. This is a recipe for failure. As a freelancer, you are a business. You must cover your own health insurance, software licenses, equipment, and self-employment taxes. Furthermore, you cannot bill 40 hours a week because a significant portion of your time is spent on "non-billable" tasks like marketing, invoicing, and lead generation.
1. Target Annual Income
This is your "take-home" goal. Think about your lifestyle requirements, mortgage, savings goals, and retirement contributions. If you want to live like you earn $75,000, that is your starting point.
2. Factoring in Business Expenses
Include everything: your high-speed internet, MacBook Pro upgrades, Adobe Creative Cloud subscriptions, coworking space fees, and professional indemnity insurance. For most digital freelancers, this ranges from $3,000 to $10,000 per year.
3. The Tax Trap
When you are employed, your employer pays half of your social security and medicare taxes. When you are a freelancer, you pay the "Self-Employment Tax" (both halves). Depending on your location, you should set aside 20% to 35% of every dollar for the taxman.
Example Calculation Scenarios
Scenario
Target Income
Billable Hours/Week
Calculated Rate
The Growth Freelancer
$60,000
20 hours
$85 – $100/hr
The Senior Consultant
$120,000
15 hours
$210 – $240/hr
The Entry Level Creative
$40,000
30 hours
$45 – $55/hr
4. Billable vs. Non-Billable Time
A standard work year has 52 weeks. However, you need time for vacation (2 weeks), sick days (1 week), and public holidays (1 week). This leaves 48 working weeks. Within those weeks, you will likely spend 20-30% of your time on administration. Our calculator assumes you only earn money during "Billable Hours."
function calculateFreelanceRate() {
var targetIncome = parseFloat(document.getElementById('targetIncome').value);
var expenses = parseFloat(document.getElementById('annualExpenses').value);
var taxRate = parseFloat(document.getElementById('taxRate').value) / 100;
var weeks = parseFloat(document.getElementById('weeksWork').value);
var hours = parseFloat(document.getElementById('billableHours').value);
if (isNaN(targetIncome) || isNaN(expenses) || isNaN(taxRate) || isNaN(weeks) || isNaN(hours) || weeks <= 0 || hours <= 0) {
alert("Please enter valid positive numbers in all fields.");
return;
}
// Calculation Logic
// Total gross needed before taxes to reach targetIncome: Gross = targetIncome / (1 – taxRate)
var grossIncomeNeeded = targetIncome / (1 – taxRate);
// Add expenses on top of gross income needed
var totalRevenueNeeded = grossIncomeNeeded + expenses;
// Total billable hours per year
var totalAnnualHours = weeks * hours;
// Result
var hourlyRate = totalRevenueNeeded / totalAnnualHours;
// Display
document.getElementById('resultArea').style.display = 'block';
document.getElementById('hourlyResult').innerText = '$' + hourlyRate.toFixed(2) + ' / hr';
var breakdownHtml = "To reach your net goal of $" + targetIncome.toLocaleString() + ":";
breakdownHtml += "• You need a total gross revenue of $" + Math.round(totalRevenueNeeded).toLocaleString() + " per year.";
breakdownHtml += "• You will pay approx $" + Math.round(grossIncomeNeeded – targetIncome).toLocaleString() + " in taxes.";
breakdownHtml += "• You will cover $" + expenses.toLocaleString() + " in business expenses.";
breakdownHtml += "• Based on " + totalAnnualHours + " billable hours per year.";
document.getElementById('breakdownText').innerHTML = breakdownHtml;
// Smooth scroll to result
document.getElementById('resultArea').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}