Photography Hourly Rate Calculator

Photography Hourly Rate Calculator

Calculate exactly what you need to charge to run a sustainable business.

What you want to take home personally.
Gear, insurance, software, marketing, studio.
Time spent shooting and editing (not admin).
Total weeks minus vacation/sick days.
Reinvestment for business growth.
Estimate for federal/state taxes.

Your Recommended Hourly Rate:

Total Revenue Required:

Total Billable Hours:

Estimated Annual Taxes:

How to Determine Your Photography Pricing

Setting your photography hourly rate is one of the most critical steps in building a sustainable business. Many freelance photographers make the mistake of only looking at what competitors charge, rather than calculating their own unique Cost of Doing Business (CODB).

Understanding the Formula

To find your rate, we use a "Bottom-Up" approach:

  1. Personal Salary: The actual cash you need to pay your bills and live your life.
  2. Business Expenses: These are "overhead" costs like Adobe Creative Cloud, camera upgrades, website hosting, and insurance.
  3. Billable vs. Non-Billable Hours: A full-time photographer doesn't shoot 40 hours a week. You spend time on marketing, client emails, and accounting. Billable hours are only the time you are actively producing work for a client.
  4. Taxes & Profit: As a business owner, you must account for self-employment tax and a profit margin for future equipment investments.

Real-World Example

Let's say a portrait photographer wants to earn $50,000 a year. Their gear and marketing costs are $10,000. They want to work 45 weeks a year and spend about 15 hours a week on client-related work (shooting and editing).

Using the calculator, they would need to charge approximately $125 – $150 per hour just to meet those goals after accounting for taxes and a healthy profit margin.

Pricing Strategies

  • Hourly Rate: Best for event coverage or corporate headshots.
  • Day Rate: Common for commercial and editorial work. Usually 8-10 hours.
  • Package Pricing: Bundling your hourly rate with prints or specific deliverables (common in wedding photography).
function calculatePhotographyRate() { var salary = parseFloat(document.getElementById("desiredSalary").value); var expenses = parseFloat(document.getElementById("annualExpenses").value); var billableHoursPerWeek = parseFloat(document.getElementById("billableHours").value); var weeksPerYear = parseFloat(document.getElementById("workingWeeks").value); var marginPercent = parseFloat(document.getElementById("profitMargin").value); var taxPercent = parseFloat(document.getElementById("taxRate").value); // Validate inputs if (isNaN(salary) || isNaN(expenses) || isNaN(billableHoursPerWeek) || isNaN(weeksPerYear) || billableHoursPerWeek <= 0 || weeksPerYear <= 0) { alert("Please enter valid numbers for salary, expenses, hours, and weeks."); return; } // Default 0 for margin and tax if empty if (isNaN(marginPercent)) marginPercent = 0; if (isNaN(taxPercent)) taxPercent = 0; // Calculation Logic // 1. Calculate Gross Revenue needed before taxes and margin var baseRequired = salary + expenses; // 2. Adjust for Profit Margin // Profit margin is (Revenue – Cost) / Revenue. // To find required revenue: Revenue = Cost / (1 – Margin) var revenueAfterMargin = baseRequired / (1 – (marginPercent / 100)); // 3. Adjust for Taxes // We need to ensure the "take home" part (Salary) is covered after tax // Simplification for standard CODB: Revenue = RevenueNeeded / (1 – TaxRate) var totalRevenueNeeded = revenueAfterMargin / (1 – (taxPercent / 100)); // 4. Calculate Total Annual Billable Hours var totalBillableHours = billableHoursPerWeek * weeksPerYear; // 5. Final Hourly Rate var hourlyRate = totalRevenueNeeded / totalBillableHours; var estTaxAmount = totalRevenueNeeded * (taxPercent / 100); // Display Results document.getElementById("resultArea").style.display = "block"; document.getElementById("hourlyRateDisplay").innerText = "$" + hourlyRate.toFixed(2); document.getElementById("totalRevenue").innerText = "$" + totalRevenueNeeded.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById("totalHours").innerText = totalBillableHours + " hours / year"; document.getElementById("totalTax").innerText = "$" + estTaxAmount.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); // Scroll to result smoothly document.getElementById("resultArea").scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment