Calculate your ideal hourly rate based on income goals and expenses.
Minimum Hourly Rate:$0.00
Annual Gross Revenue Needed:$0.00
Total Billable Hours / Year:0
Estimated Annual Taxes:$0.00
How to Calculate Your Freelance Hourly Rate
Determine exactly what you need to charge to sustain your lifestyle and business growth. Unlike a traditional salary, your freelance rate must account for taxes, overhead, unbillable time, and profit margins. This Freelance Hourly Rate Calculator does the heavy lifting for you.
Why You Can't Just Divide Your Salary by 2080
A common mistake new freelancers make is taking their previous annual salary and dividing it by 2,080 (the standard number of work hours in a year: 40 hours x 52 weeks). This approach often leads to burnout and financial struggle because it ignores critical factors:
Unbillable Work: Marketing, invoicing, emails, and professional development do not generate direct revenue. Most freelancers only bill 50-75% of their working time.
Self-Employment Taxes: You are now responsible for both the employer and employee portion of taxes, which can significantly reduce your net income.
Overhead Costs: Software subscriptions, health insurance, hardware, and office space are now your responsibility.
No Paid Time Off: If you don't work, you don't get paid. You must factor vacation and sick days into your hourly rate.
Understanding the Formula
To find a sustainable rate, our calculator uses a top-down approach:
Calculate Total Costs: We sum your desired net income with your annual business expenses.
Account for Taxes: We adjust this total to ensure you have enough left over after the government takes its share.
Add Profit Margin: A business should do more than break even. We add a percentage for savings and business reinvestment.
Determine Capacity: We calculate your actual billable hours by subtracting weeks off and accounting for non-billable time.
Tips for Increasing Your Rate
If the result from the calculator seems higher than the market average, consider specializing in a niche, improving your portfolio, or switching from hourly billing to value-based pricing. Remember, clients pay for the solution you provide, not just the hours you sit in a chair.
function calculateRate() {
// 1. Get input values
var targetSalary = parseFloat(document.getElementById('targetSalary').value);
var monthlyExpenses = parseFloat(document.getElementById('monthlyExpenses').value);
var billableHours = 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(targetSalary) || targetSalary < 0) targetSalary = 0;
if (isNaN(monthlyExpenses) || monthlyExpenses < 0) monthlyExpenses = 0;
if (isNaN(billableHours) || billableHours <= 0) billableHours = 1; // Prevent divide by zero
if (isNaN(weeksOff) || weeksOff < 0) weeksOff = 0;
if (isNaN(taxRate) || taxRate < 0) taxRate = 0;
if (isNaN(profitMargin) || profitMargin = 1) taxDecimal = 0.99; // Safety cap
var grossRevenueNeeded = totalNetNeeded / (1 – taxDecimal);
// D. Add Profit Margin
// We add margin on top of the Gross Revenue Needed
var totalRevenueGoal = grossRevenueNeeded * (1 + (profitMargin / 100));
// E. Calculate Taxes Amount for display
var estimatedTaxes = totalRevenueGoal – totalNetNeeded – (totalRevenueGoal – grossRevenueNeeded);
// Simplified: Taxes are roughly (Gross – Net).
// More accurately based on logic above: Taxes = GrossRevenueNeeded * TaxDecimal.
estimatedTaxes = grossRevenueNeeded * taxDecimal;
// F. Calculate Total Billable Hours
// Total weeks working = 52 – weeksOff
var workingWeeks = 52 – weeksOff;
if (workingWeeks < 1) workingWeeks = 1; // Safety
var totalAnnualHours = workingWeeks * billableHours;
// G. Hourly Rate
var hourlyRate = totalRevenueGoal / totalAnnualHours;
// 4. Update UI
document.getElementById('hourlyRateDisplay').innerText = '$' + hourlyRate.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('grossRevenueDisplay').innerText = '$' + totalRevenueGoal.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('totalHoursDisplay').innerText = totalAnnualHours.toLocaleString('en-US');
document.getElementById('taxAmountDisplay').innerText = '$' + estimatedTaxes.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Show results
document.getElementById('resultsArea').style.display = 'block';
}