.seo-calculator-wrapper {
max-width: 800px;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
color: #333;
line-height: 1.6;
}
.calc-box {
background: #f9f9f9;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 30px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
margin-bottom: 40px;
}
.calc-title {
text-align: center;
margin-bottom: 25px;
color: #2c3e50;
font-size: 24px;
font-weight: 700;
}
.calc-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
@media (max-width: 600px) {
.calc-grid {
grid-template-columns: 1fr;
}
}
.input-group {
margin-bottom: 15px;
}
.input-group label {
display: block;
margin-bottom: 5px;
font-weight: 600;
font-size: 14px;
color: #555;
}
.input-group input {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
}
.input-group input:focus {
border-color: #3498db;
outline: none;
}
.input-hint {
font-size: 12px;
color: #888;
margin-top: 3px;
}
.calc-btn {
width: 100%;
padding: 15px;
background-color: #27ae60;
color: white;
border: none;
border-radius: 4px;
font-size: 18px;
font-weight: 700;
cursor: pointer;
margin-top: 20px;
transition: background 0.3s;
}
.calc-btn:hover {
background-color: #219150;
}
.results-section {
margin-top: 30px;
padding-top: 20px;
border-top: 2px dashed #ddd;
display: none;
}
.result-card {
background: #fff;
padding: 20px;
border-radius: 6px;
text-align: center;
border: 1px solid #eee;
margin-bottom: 15px;
}
.result-label {
font-size: 14px;
color: #7f8c8d;
text-transform: uppercase;
letter-spacing: 1px;
}
.result-value {
font-size: 32px;
font-weight: 800;
color: #2c3e50;
margin: 10px 0;
}
.result-value.highlight {
color: #27ae60;
}
.content-section {
margin-top: 50px;
}
.content-section h2 {
font-size: 22px;
color: #2c3e50;
margin-top: 30px;
border-bottom: 2px solid #eee;
padding-bottom: 10px;
}
.content-section h3 {
font-size: 18px;
color: #34495e;
margin-top: 20px;
}
.content-section p {
margin-bottom: 15px;
}
.content-section ul {
margin-bottom: 20px;
padding-left: 20px;
}
.content-section li {
margin-bottom: 8px;
}
.error-msg {
color: #e74c3c;
text-align: center;
display: none;
margin-top: 10px;
}
How to Calculate Your Freelance Hourly Rate
Setting the right hourly rate is one of the most difficult challenges for freelancers, consultants, and contractors. If you price yourself too low, you risk burnout and financial instability. Price yourself too high without justification, and you may lose clients. This Freelance Hourly Rate Calculator uses a "bottom-up" approach to determine exactly what you need to charge based on your financial goals.
Why You Can't Just "Pick a Number"
Many new freelancers simply look at what they earned at their corporate job and divide it by 2,080 (the standard number of working hours in a year). This is a critical mistake. As a freelancer, you are responsible for:
- Self-Employment Taxes: You pay both the employer and employee portion of Social Security and Medicare.
- Overhead Costs: Software subscriptions, hardware, health insurance, and office space come out of your pocket.
- Unbillable Time: You cannot bill clients for time spent marketing, doing accounting, or answering emails.
The Math Behind the Calculation
To determine your true hourly rate, we use the following specific formula:
1. Calculate Gross Revenue Requirement
First, we determine how much money needs to enter your bank account before taxes and expenses to leave you with your desired net income.
Formula: (Desired Net Income + Annual Expenses) / (1 – Tax Rate %)
Example: If you want $80,000 net, have $6,000 in expenses, and a 25% tax rate:
($80,000 + $6,000) / (1 – 0.25) = $86,000 / 0.75 = $114,666 Gross Revenue Needed.
2. Determine Billable Capacity
Next, we calculate how many hours you can actually sell to clients.
Formula: (52 Weeks – Vacation Weeks) × Billable Hours per Week
Example: If you take 4 weeks off and bill 25 hours a week:
48 weeks × 25 hours = 1,200 Billable Hours per Year.
3. The Final Rate
Finally, we divide the revenue needed by the billable hours.
$114,666 / 1,200 = $95.55 per hour.
What is a Good Billable Hours Ratio?
It is unrealistic to expect to bill 40 hours a week. Most successful freelancers maintain a utilization rate of 50% to 60%. This means if you work a standard 40-hour week, only 20-25 of those hours are actually billed to clients. The rest is spent on business development, administration, and skill-building.
function calculateFreelanceRate() {
// 1. Get Input Values
var annualGoal = parseFloat(document.getElementById('annualGoal').value);
var monthlyExpenses = parseFloat(document.getElementById('monthlyExpenses').value);
var taxRate = parseFloat(document.getElementById('taxRate').value);
var vacationWeeks = parseFloat(document.getElementById('vacationWeeks').value);
var billableHours = parseFloat(document.getElementById('billableHours').value);
var profitMargin = parseFloat(document.getElementById('profitMargin').value);
var errorMsg = document.getElementById('errorMsg');
var resultsDiv = document.getElementById('results');
// 2. Validate Inputs
if (isNaN(annualGoal) || isNaN(monthlyExpenses) || isNaN(taxRate) ||
isNaN(vacationWeeks) || isNaN(billableHours) || isNaN(profitMargin)) {
errorMsg.style.display = 'block';
resultsDiv.style.display = 'none';
return;
} else {
errorMsg.style.display = 'none';
resultsDiv.style.display = 'block';
}
// 3. Perform Calculations
// Annualize Expenses
var totalAnnualExpenses = monthlyExpenses * 12;
// Calculate Base Revenue Needed (Net Income + Expenses)
var baseNeeded = annualGoal + totalAnnualExpenses;
// Adjust for Taxes
// Formula: Revenue * (1 – TaxRate) = BaseNeeded
// Therefore: Revenue = BaseNeeded / (1 – TaxRate)
// Safety check: Tax rate shouldn't be 100% or more
if (taxRate >= 100) taxRate = 99;
var revenueWithTax = baseNeeded / (1 – (taxRate / 100));
// Add Profit Margin
// Usually profit margin is added on top of costs
var grossRevenueTarget = revenueWithTax * (1 + (profitMargin / 100));
// Calculate Working Time
var workingWeeks = 52 – vacationWeeks;
var totalAnnualBillableHours = workingWeeks * billableHours;
// Safety check for zero hours
if (totalAnnualBillableHours <= 0) totalAnnualBillableHours = 1;
// Calculate Hourly Rate
var hourlyRate = grossRevenueTarget / totalAnnualBillableHours;
// Calculate Breakdown amounts for display
var taxAmount = grossRevenueTarget – (baseNeeded * (1 + (profitMargin/100)));
// Simplified tax display estimation
// 4. Update UI
document.getElementById('hourlyRateResult').innerHTML = '$' + hourlyRate.toFixed(2);
document.getElementById('grossRevenueResult').innerHTML = '$' + grossRevenueTarget.toLocaleString('en-US', {maximumFractionDigits: 0});
document.getElementById('totalHoursResult').innerHTML = totalAnnualBillableHours.toLocaleString('en-US');
document.getElementById('breakdownNet').innerHTML = '$' + annualGoal.toLocaleString('en-US');
document.getElementById('breakdownExp').innerHTML = '$' + totalAnnualExpenses.toLocaleString('en-US');
// Re-calculating tax strictly based on gross revenue for the summary text
var estimatedTax = grossRevenueTarget – (grossRevenueTarget * (1 – (taxRate/100)));
// Or simpler: Gross – (Net + Expenses + ProfitBuffer)
// Let's stick to the visual difference
var nonTaxParts = annualGoal + totalAnnualExpenses;
var taxPart = grossRevenueTarget – nonTaxParts;
document.getElementById('breakdownTax').innerHTML = '$' + taxPart.toLocaleString('en-US', {maximumFractionDigits: 0});
}