How to use the app to track your shifts, verify your pay, and stay on top of your balances.
Firefighter Pay Tracker keeps a record of your work so you can stay on top of your pay and leave balances. Log your shifts, and the app calculates your expected pay, tracks all your leave balances, flags your upcoming holidays, and gives you the tools to catch and resolve payroll errors.
The core workflow is: log shifts → calculate pay → compare to paystub → track discrepancies. But even between paychecks, the app keeps your leave balances current so you always know where you stand.
After creating an account, a three-step setup wizard gets you going. Have a recent paystub handy — you'll need it for your hourly rate and leave balances.
Everything can be updated later from the Profile page. Setup just gives the app a starting point.
There are two ways to add shifts, depending on how much detail you need.
A day that already has a shift: as soon as you pick a date, the form shows what's already recorded there, with a link to edit it. If you save anyway, you're asked whether to replace it, and told what that gives back (for example, your vacation balance going back up). Templates list the taken days first and let you skip or replace them. One side of a trade is never replaced this way — edit the trade instead.
Tap Add Shift from the dashboard or navigation bar. You'll see a list of templates — common shift configurations you can apply in two taps:
Quick Add is great for catching up on multiple days at once. Select all the dates for the same type of shift and create them in one batch.
Choose Full Shift Form from the template list, or edit any existing shift. The full form gives you access to every field:
Changing a day from the Calendar: tap a regular day ahead with nothing recorded and choose Add Shift. The full form opens already filled in as a Regular Shift, 24hr, so you only change what's different — vacation for part of the day, a trade, sick. Nothing is saved until you save it.
If you're on the RA most shifts, set Regular shifts default to include the RA bonus to Yes in your profile's Preferences. When it's Yes:
These three are optional and mostly look after themselves. They matter if you subscribe to the calendar feed, because they're what turns a shift into a proper calendar entry.
Use the full form any time you used leave, earned a bonus, or banked time on a shift.
If you have a shift configuration you use often (e.g., SOD with rescue ambulance hours), fill out the full form once, then tap Save as Template. Give it a name, and it shows up in your Quick Add list going forward. Templates save you from re-entering the same details every time.
You can enter shifts for future dates. The app treats them as scheduled — they show up in your shift history with a Scheduled badge but don't affect your current balances or pay totals.
Vacation: 144hr (120 projected) means you have 144 now and will have 120 after your scheduled vacation in June.When a scheduled shift's date passes, its badge changes to Scheduled · Unconfirmed and a reminder card on your dashboard prompts you to Review shifts. Open the list and either tap Confirm on each row (or use Select + Approve N in bulk) to attest the shift happened as planned. Editing and saving also counts as confirmation; the badge clears automatically.
Instead of entering every shift by hand, you can upload your NSS roster PDF and the app will pull your shifts out automatically. This works alongside manual entries — NSS becomes a second source of truth that confirms what you entered, surfaces disagreements, and creates drafts for shifts you didn't enter yet.
Your Roster Name is the way your name appears on the NSS roster (typically LASTNAME, FIRSTNAME in uppercase). It's auto-filled during profile setup based on your first and last name. You can edit it on the Profile page if NSS uses a different format for you. If your first upload finds no matches, the app will offer a "did you mean?" suggestion based on similar names in the roster.
On Android Chrome, the equivalent is Share → Print → Save as PDF. The Print view (multi-page) and the Markup view (single-page) both work — we parse them the same.
If the roster was read wrong, use Roster read wrong? Report it on the card. It sends the roster lines, what we read, and your entry to the developer so the reader can be fixed. Leave the note blank if your entry is what it should have read. Reporting doesn't change your shift — you still pick Edit, Use NSS, or Keep mine.
N is the open flag countA badge only appears when something needs your attention. A shift that matches your roster upload shows no badge — open it and you'll see a quiet note saying which upload it matches. A match isn't a verification: rosters can be incomplete, and our reading of them can be wrong.
Trades don't need a badge — the shift is titled Working Trade or Off Trade, and the line underneath names who you traded with.
The roster tells us about work events (apparatus, seat, hours, leave reasons). It does not tell us about your accounting decisions like banking, court time, paramedic maintenance bonus, or holiday-date bonuses — those stay manual-only. So a shift can match your roster upload even if it has banking attached; the roster covers the work, you handle the banking.
If you leave the import page without approving, the imported drafts still live in your shift history with an Awaiting approval badge. You can clear them up two ways:
The filters panel has Doesn't Match NSS Only and Awaiting Approval Only toggles for fast triage.
Upload the same roster twice and nothing duplicates. The app matches existing shifts and updates their status rather than creating new rows. If a previously-imported draft hasn't been approved yet, re-uploading refreshes its fields to the latest NSS interpretation (no "you vs NSS" conflict against your earlier import). You can upload mid-pay-period and again at the end — each pass just refreshes what NSS knows.
NSS rosters often cover days that haven't happened yet. Those shifts still get imported and carry the Scheduled badge until their date passes.
Future shifts are compared the same way as past ones. If your entry for a future date doesn't match what we read from the roster, it shows Doesn't match NSS now, so you can sort it out before the day rather than after.
Here's how to log different situations you'll encounter.
Quick Add → Regular template → select the date. That's it. If you worked all 24 hours with no leave or bonuses, the default template handles everything.
Use the Full Shift Form. Set the shift type to Regular, enter your hours worked, then expand the Leave section and enter the leave hours. Your worked hours plus leave hours should total 24. When you save, the app automatically updates your leave balances.
For sick leave, the app handles the tier allocation (100% → 75% → 50%) automatically based on your current balances.
Quick Add → SOD or Assign Hire template → select the date. If you worked a non-standard number of hours, edit the shift afterward to adjust.
Use the Full Shift Form. Set shift type to Late Relief and enter the extra hours worked (just the late relief portion, not the full 24).
Use the Full Shift Form. Set shift type to Recall and enter the hours. Log it on the date you were recalled.
If your Holiday letter is set in your profile, the app auto-detects your Holidays and checks the box for you when you add a shift on that date. You can also check it manually in the full form.
Worked or off: on the Calendar, tap a Holiday with nothing recorded and choose Working Holiday or Off Holiday. Working Holiday opens the full form as a Regular Shift with the Holiday checked and 24hr filled in — change the hours if you worked part of it. Off Holiday opens it with the Holiday checked and 0hr worked. Either way, nothing is saved until you save it.
Moving a Holiday: on the Calendar, tap your Holiday and choose Move this Holiday. The original date becomes a regular day again, marked “Holiday moved to” the new date. The new date becomes your Holiday, and a shift you record there is counted against the Holiday you moved. A moved Holiday is normally taken off; if you record it as worked, the app says so but still saves it. Undo move puts it back.
On Thanksgiving, Christmas Eve, Christmas Day, or New Year's Eve, the major holiday bonus checkbox appears automatically in the full form when you have hours worked. Check it to include the bonus in your pay calculation.
Use the Full Shift Form. Set shift type to V-Hours and enter the payout hours. This is a pay-only entry — it doesn't affect your leave balances.
Use the Full Shift Form and set the shift type to Other Payments. This reveals fields for court time hours, court on-call, show-up pay, safety watch, CE payout, and banked payout. Enter the relevant amounts.
In the full form, enter the hours in the "Hours Banked" field. Your banked time balance updates automatically.
Open the Add Shift modal and tap Trade at the top, or pick Trade from the Shift Type dropdown on the Full Shift Form. Today the app handles shift trades (the common 360). Holiday and AH Code trades are coming soon.
Submitting creates two linked rows: one with Trade · Off on your original date (0 hours, no pay) and one with Trade · On on the partner's date (your full hours, full pay). The two rows are linked so deleting one prompts a modal to delete both (or just one) and shows both dates side by side.
NSS imports recognize 360 rows on both sides and populate partner info + paired date automatically when present in the roster. Each trade reads “Trade with [partner] for [other date]” on your shifts. If one side of a trade has no other side recorded, the shift says Other side not recorded and offers to link it to the matching side or add the other side, and the dashboard counts it. Pick Trade in the Shift Type filter on Shifts to see every trade.
This is the main reason the app exists. When your paystub arrives:
The pay calculator breaks down each shift in the period, showing base pay, overtime, and bonuses. It also shows your FLSA overtime calculation and how your leave balances changed.
If the numbers match, you're good. If they don't, use the "Doesn't match your paystub?" button. It walks you through common reasons for mismatches (missing shifts, wrong rate, etc.) before letting you file a discrepancy.
Your leave balances update automatically every time you log a shift that uses leave. You don't have to do anything extra — just keep logging shifts and the balances stay current.
Go to Balances from the navigation bar to see all your current balance totals. Tap any balance type to see its full transaction history (every shift that changed it, plus any manual adjustments).
Sometimes payroll makes a correction that doesn't come from a shift (e.g., an accrual adjustment or a clerical fix). Use Adjust Balance on the Balances page to record these one-off changes with a reason and date, so your tracked balance stays in sync with payroll.
If a shift would take a balance below zero — on its date, or later, because of leave you've already scheduled — the app tells you before saving, for example “Vacation would show −24hr on Dec 20.” For sick time it names the tiers the hours come from. You can go back, or save anyway: overdraws do happen, and your record should match what actually happened. The same check runs when you save a shift, add shifts from a template, approve an import, or use NSS values.
A similar notice appears if you enter SOD, Assign Hire or Recall on one of your regular shift days with nothing recorded that takes the day off (a trade, a full day of leave, or a day off on your Holiday): “Sep 23 is your regular shift day (Platoon A). Working SOD that day needs it off first — a trade or leave.” Record the trade or leave first, or save anyway if it's already arranged.
The app tracks two types of discrepancies:
Your estimated gross pay doesn't match your actual paystub. File one from the Pay Calculator: enter what the paystub says, then tick everything the difference may involve (Rescue Ambulance, overtime, a leave balance and which one, and so on). Several can apply at once, and Not sure yet is a fine answer.
Each discrepancy has a status: Open, Raised with payroll (with the date and any reference), Resolved (corrected), or No change if you decide the check was right. When payroll sends a retro payment, log it against the discrepancy to mark it resolved. You can reopen any of them.
Your paystub shows a different leave balance than what you're tracking. File one from Balances → Discrepancies. You can mark it as reported to payroll, and resolve it once corrected.
Discrepancies that are open or raised with payroll show up as alerts on your dashboard until they're resolved or marked no change.
Your profile page lets you update anything from the initial setup, plus manage rate changes over time.
When your rate changes (new salary step, promotion, etc.), add a new rate history entry from your profile page. Enter the effective date and new rate. The app uses rate history to calculate pay correctly for each period — shifts before the change use the old rate, shifts after use the new one.
If your FLSA overtime type changes (e.g., moving from platoon to a 40-hour assignment), update it in your rate history entry. The change applies from the effective date forward.
Station, rank, platoon, paramedic status, Holiday letter, and salary step can all be updated directly on the profile page. Changes are tracked in your assignment history; give a change an earlier effective date to record what you held before, and your current assignment stays as it is. Each date uses the assignment and rate in force on it. For a date before your first record, the app uses that first record and says so when you enter a shift, import a roster, or check a pay period, with a link to add what you actually held then.
Your regular days ahead show on the calendar from your platoon; they aren't shifts yet. Once each shift has ended (0600 the next morning), the app adds it to your shifts as a Regular Shift awaiting approval, with the RA bonus if that's your preference, or with what your roster said if you imported one covering that day. The dashboard tells you when shifts are waiting. Approve them as they are, or edit a day where something else happened, such as an off trade or leave. Nothing awaiting approval counts toward pay or balances.
Each day is added once. If a regular day ends up with nothing recorded at all, for example a shift deleted by accident, the dashboard lists it under Nothing recorded on these regular days. Your Holidays are never added this way; the dashboard asks whether each was a Working or Off Holiday.
The Calendar Sharing card on your profile has calendars you can subscribe to in Google Calendar, Apple Calendar, or anything else that reads calendar feeds. Each arrives as its own calendar, so you can show or hide it on its own:
Below them are the department calendars, the same for everyone:
Each calendar comes with a colour: Shifts orange, Holidays purple, Assign Hires yellow, Payroll grey, and each shift calendar in its own colour (A red, B blue, C green). Apple Calendar picks these up when you subscribe; in Google Calendar, set them yourself after subscribing. The dot next to each calendar on your profile shows its colour.
Everything stays up to date as you edit. Regenerate URLs makes the old links stop working, if you ever need that.
Show 24-hour shifts as controls how a full shift looks once it's there:
Shifts shorter than 24 hours always show their real hours either way. Calendar apps refresh feeds on their own schedule, so a change can take a few hours to appear.