Setting your freelance rate is one of the most critical decisions you will make for your business. Many new freelancers make the mistake of simply matching their previous "employer" hourly pay, forgetting that they now must cover their own taxes, insurance, software, and non-billable time.
The Formula for Freelance Success
To calculate a sustainable rate, we use the "Bottom-Up" approach. This ensures that every hour you work contributes to your personal salary, your business overhead, and your future savings. The basic formula is:
Billable vs. Non-Billable Hours: You cannot bill 40 hours a week if you spend 15 hours on marketing, invoicing, and admin. Most full-time freelancers average 20–30 billable hours.
The Tax Gap: As a freelancer, you are responsible for both the employer and employee portions of social security and Medicare. We recommend setting aside at least 25-30% of your gross income.
Business Overhead: Include your Adobe subscriptions, hosting fees, health insurance premiums, home office utilities, and equipment depreciation.
Profit Margin: This isn't your salary. Profit is the money the business keeps to reinvest in growth, new equipment, or as a safety net for "dry spells."
Example Calculation
If you want to take home $70,000 net, have $6,000 in annual expenses, take 4 weeks off, and work 25 billable hours per week, your rate would need to be roughly $95 – $110 per hour depending on your local tax bracket. This ensures you aren't just surviving, but thriving as a business owner.
function calculateFreelanceRate() {
// Get values from inputs
var desiredSalary = parseFloat(document.getElementById('desiredSalary').value);
var monthlyExpenses = parseFloat(document.getElementById('monthlyExpenses').value);
var billableHoursPerWeek = parseFloat(document.getElementById('billableHours').value);
var vacationWeeks = parseFloat(document.getElementById('vacationWeeks').value);
var taxRate = parseFloat(document.getElementById('taxRate').value) / 100;
var profitMargin = parseFloat(document.getElementById('profitMargin').value) / 100;
// Validate inputs
if (isNaN(desiredSalary) || isNaN(monthlyExpenses) || isNaN(billableHoursPerWeek) || isNaN(vacationWeeks)) {
alert("Please enter valid numbers in all fields.");
return;
}
// 1. Calculate Total Annual Expenses
var annualExpenses = monthlyExpenses * 12;
// 2. Gross up the Salary for Taxes
// Formula: Net / (1 – TaxRate)
var grossSalaryNeeded = desiredSalary / (1 – taxRate);
// 3. Add Profit Margin
// We add this to the total required revenue
var baseRevenueRequired = grossSalaryNeeded + annualExpenses;
var totalRevenueGoal = baseRevenueRequired * (1 + profitMargin);
// 4. Calculate Total Billable Hours
var totalWeeksInYear = 52;
var workingWeeks = totalWeeksInYear – vacationWeeks;
var totalAnnualBillableHours = workingWeeks * billableHoursPerWeek;
// 5. Calculate Hourly Rate
if (totalAnnualBillableHours <= 0) {
alert("Billable hours and working weeks must result in a positive number of annual hours.");
return;
}
var hourlyRate = totalRevenueGoal / totalAnnualBillableHours;
// Display Results
var resultDiv = document.getElementById('rateResult');
var rateDisplay = document.getElementById('finalRate');
var breakdownDisplay = document.getElementById('breakdownText');
rateDisplay.innerHTML = "$" + hourlyRate.toFixed(2);
breakdownDisplay.innerHTML = "To reach your goal, you need a total annual gross revenue of $" + totalRevenueGoal.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ". This covers your salary, " + (taxRate * 100) + "% in taxes, $" + annualExpenses.toLocaleString() + " in overhead, and a " + (profitMargin * 100) + "% profit buffer over " + totalAnnualBillableHours + " billable hours per year.";
resultDiv.style.display = 'block';
resultDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}