48/96 Schedule Pay Calculator

48/96 Firefighter Pay & Schedule Calculator

Calculation Summary

Scheduled Hours per Year: 2,920

Average Hours per Week: 56.15


Annual Base Pay: $0.00

Estimated FLSA OT (Annual): $0.00

Total Monthly Gross: $0.00

Estimated Annual Total
$0.00

Understanding the 48/96 Schedule and Your Pay

The 48/96 shift schedule is one of the most popular staffing patterns for modern fire departments. In this rotation, firefighters work two consecutive 24-hour shifts (48 hours total) followed by four days off (96 hours total). While this provides significant blocks of time for rest and family, calculating your actual take-home pay can be complex due to the Fair Labor Standards Act (FLSA) and the high number of annual hours.

How the 48/96 Pay Calculation Works

Unlike a standard 40-hour work week, a 48/96 schedule averages out to more hours per year. Here is the math behind the machine:

  • Annual Hours: A 48/96 cycle repeats every 6 days. In a year (365 days), there are 60.83 cycles. Each cycle contains 48 hours of work, totaling approximately 2,920 hours per year.
  • Average Weekly Hours: 2,920 hours divided by 52 weeks equals 56.15 hours per week.
  • The FLSA Threshold: Most firefighters are subject to the 7(k) exemption, where overtime is often calculated on a 28-day cycle. For a 7-day period, the threshold is typically 53 hours. This means on a 48/96 schedule, the average firefighter earns 3.15 hours of overtime every single week.

Calculation Components

To get an accurate picture of your earnings, you must consider three primary factors:

  1. Base Hourly Rate: Your straight-time pay for your scheduled 2,920 hours.
  2. FLSA Overtime: The premium pay for the hours worked above the 53-hour weekly threshold (or your specific department's threshold).
  3. Incentives/Stipends: Monthly additions for Paramedic certification, Hazmat technician status, bilingual skills, or education.

Example: 48/96 Pay Breakdown

Let's look at a typical scenario for a Firefighter/EMT:

  • Hourly Rate: $25.00
  • Annual Base Pay: $25.00 × 2,920 = $73,000
  • FLSA Overtime: With a 53-hour threshold, there are roughly 164.5 OT hours per year. ($25.00 × 0.5 × 164.5) = $2,056.25 (Assuming the base 2,920 already covers straight time).
  • Monthly Stipend: $300 (Paramedic) = $3,600/year.
  • Total Estimated Annual Pay: $78,656.25

Why Use This Calculator?

Fire department pay scales are often quoted as "Annual Salary," but this number may or may not include the built-in FLSA overtime or stipends. Using this 48/96 schedule pay calculator allows you to reverse-engineer your hourly rate or project your earnings when moving to a new department or promotion.

function calculate4896Pay() { var hourlyRate = parseFloat(document.getElementById("hourlyRate").value); var otMultiplier = parseFloat(document.getElementById("otMultiplier").value); var monthlyStipends = parseFloat(document.getElementById("monthlyStipends").value) || 0; var flsaThreshold = parseFloat(document.getElementById("flsaThreshold").value); if (isNaN(hourlyRate) || hourlyRate flsaThreshold) { weeklyOTHours = weeklyAvgHours – flsaThreshold; } // Annual OT Hours = Weekly OT * 52 var annualOTHours = weeklyOTHours * 52; // OT Pay is usually (Rate * Multiplier) – but if the base hours already cover straight time, // FLSA is often paid at 0.5x. Most FD calculators use the premium (Rate * Multiplier * hours) // if the OT is outside the 2920. However, in 48/96, the hours ARE the 2920. // Standard approach: Annual Pay = (Hourly * 2920) + (AnnualOTHours * (Hourly * (otMultiplier – 1))) // This assumes the 2920 already includes the "1.0" portion of the OT hours. var annualOTPay = annualOTHours * (hourlyRate * (otMultiplier – 1)); // Stipends var annualStipends = monthlyStipends * 12; // Totals var annualTotal = annualBase + annualOTPay + annualStipends; var monthlyTotal = annualTotal / 12; // Display Results document.getElementById("resAnnualBase").innerText = "$" + annualBase.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById("resAnnualOT").innerText = "$" + annualOTPay.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById("resMonthlyTotal").innerText = "$" + monthlyTotal.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById("resAnnualTotal").innerText = "$" + annualTotal.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById("results").style.display = "block"; // Smooth scroll to result document.getElementById("results").scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Reply

Your email address will not be published. Required fields are marked *