Calculate your ideal freelance or contractor rate in Rands (ZAR)
What you want in your pocket after tax and expenses.
Internet, software, rent, equipment, etc.
Average SARS tax bracket percentage.
Exclude admin, marketing, and breaks.
Allow for holidays and sick leave (usually 46-48).
Your Target Hourly Rate
How to Set Your Hourly Rate in South Africa
Determining your hourly rate as a freelancer or independent contractor in South Africa is one of the most critical steps in building a sustainable business. Unlike being an employee, your hourly rate must cover your personal needs, your business overheads, and the tax man (SARS).
Why Your "Take-Home" Pay Isn't Your Hourly Rate
If you want to earn R30,000 per month "clear" (after tax), you cannot simply divide R30,000 by 160 hours. This is because:
Non-Billable Time: You spend hours on invoicing, emails, and finding new clients. Most South African freelancers only average 20–30 billable hours per week.
Business Overhead: You are responsible for your own fibre, laptop, office space, and coffee.
SARS: You must factor in Income Tax and potentially VAT if your turnover exceeds R1 million per year.
Benefits: You need to fund your own medical aid, retirement annuity (RA), and UIF.
The South African Context: Reality Check
In South Africa, professional service rates vary wildly. A junior graphic designer might charge R350 – R500 per hour, while an experienced software developer or specialist consultant might charge R900 – R1,500+ per hour. Use this calculator to ensure you aren't undercutting yourself while remaining competitive in the local market.
Calculation Example
Suppose you want a R25,000 net salary. Your expenses (internet, phone, software) are R4,000. You estimate your tax rate at 18%. You plan to work 48 weeks a year and can bill 25 hours a week.
Target Hourly Rate: (R35,365 x 12) / 1,200 = R353.65 per hour
function calculateHourlyRate() {
var netSalary = parseFloat(document.getElementById('desiredNet').value);
var expenses = parseFloat(document.getElementById('businessExpenses').value);
var taxRate = parseFloat(document.getElementById('taxRate').value);
var billableHoursPerWeek = parseFloat(document.getElementById('billableHours').value);
var weeksPerYear = parseFloat(document.getElementById('weeksYear').value);
var resultArea = document.getElementById('resultArea');
var finalRateDisplay = document.getElementById('finalRate');
var breakdownDisplay = document.getElementById('breakdownText');
if (isNaN(netSalary) || isNaN(expenses) || isNaN(taxRate) || isNaN(billableHoursPerWeek) || isNaN(weeksPerYear) || billableHoursPerWeek <= 0 || weeksPerYear Gross = Net / (1 – TaxRate)
// We add expenses to the Net requirement because they must be paid out of Gross income.
var taxDecimal = taxRate / 100;
if (taxDecimal >= 1) {
alert("Tax rate cannot be 100% or more.");
return;
}
var requiredMonthlyGross = (netSalary + expenses) / (1 – taxDecimal);
var requiredAnnualGross = requiredMonthlyGross * 12;
var totalAnnualBillableHours = billableHoursPerWeek * weeksPerYear;
var hourlyRate = requiredAnnualGross / totalAnnualBillableHours;
finalRateDisplay.innerHTML = "R " + hourlyRate.toLocaleString('en-ZA', {minimumFractionDigits: 2, maximumFractionDigits: 2});
breakdownDisplay.innerHTML = "To cover your monthly net salary of R" + netSalary.toLocaleString('en-ZA') +
" and expenses of R" + expenses.toLocaleString('en-ZA') + ", you need a gross annual income of approximately R" +
Math.round(requiredAnnualGross).toLocaleString('en-ZA') + ". Based on " +
totalAnnualBillableHours + " billable hours per year, this is your minimum sustainable rate.";
resultArea.style.display = "block";
resultArea.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}