Resources

// GUIDES

PagerDuty On-Call Hours Export for Payroll

PagerDuty's native exports aren't payroll-ready. Here's what the data looks like, where the gaps are, and how to bridge them for your finance team.

2 May 2025 · 5 min read

Every month, someone on the engineering or HR team has to produce on call pay figures. If your organisation uses PagerDuty, the data is in there — but getting it into a format payroll can actually use is a different problem. This guide covers exactly what PagerDuty gives you, what it doesn't, and the most reliable ways to bridge the gap.

What PagerDuty exports natively

PagerDuty offers a few built-in ways to get data out:

Incident CSV export

From the Incidents view, you can export a CSV of all incidents in a date range. This includes incident ID, service, status, creation time, resolution time, and the assigned user. It is useful as a raw incident log, but it does not tell you who was on call during non-incident time, and it does not calculate any pay figures.

Schedule view

The schedule view shows who is on call and when, but it is a visual tool — there is no export button that produces a clean list of on call intervals per user. You can screenshot it, but you cannot download it.

Analytics (Business and Enterprise plans)

Higher-tier PagerDuty plans include an Analytics module that aggregates incident data — MTTD, MTTR, incident volume by team, responder load. This is useful for operational insights but is not designed for payroll: it summarises trends rather than listing the raw on call intervals your finance team needs.

The key gap:PagerDuty does not natively tell you “User X was on call from Monday 18:00 to Tuesday 09:00, which spans 1 weekday evening and 0 bank holidays, and was paged twice.” That classification and calculation is left entirely to you.

The PagerDuty API: what is actually available

The API is where the real data lives. Two endpoints matter most for payroll:

  • GET /oncalls — returns on call schedule entries for a given date range, user, or schedule. Each entry includes the user, the schedule, and the exact start/end time of that on call window. This is the foundation of any stipend calculation.
  • GET /incidents — returns incidents in a date range, with trigger time, resolution time, assigned user, and service. This is the foundation of any callout fee or hourly rate calculation.

Both endpoints are paginated and rate-limited. For large organisations or long date ranges, you may need to handle pagination carefully (PagerDuty uses offset-based pagination with a limit of 100 items per page) and back off gracefully when you hit rate limits.

What you still have to build yourself

Even with API access, you need to handle:

  • Time zone conversion — PagerDuty returns timestamps in UTC. Weekday/weekend boundaries are local-time concepts. An on call shift that ends at 01:00 UTC on a Monday is still Sunday in the UK.
  • Day classification — for each day in the on call period, you need to determine whether it is a weekday, weekend, or bank holiday. This requires a bank holiday data source, ideally one that knows about regional differences (England vs Scotland vs Northern Ireland).
  • Partial days — on call intervals rarely align perfectly with calendar day boundaries. An engineer might go on call at 18:00 on a Friday. You need to decide whether to pay a partial day rate or a full day rate, and implement that logic consistently.
  • Incident matching — joining incidents to on call intervals to determine which incidents fall within a user's on call period (not just which incidents were assigned to them).
  • Minimum hours — applying the callout minimum-hours rule correctly, including when multiple short incidents occur in the same shift.
  • Spreadsheet formatting — payroll typically wants a structured file with one row per day or per incident, clear column headers, and summary totals. Generating a well-formatted XLSX from API data takes non-trivial effort.

Practical options

Build a script

If you have engineering time to spare, a Python or Node script hitting the PagerDuty API and producing a CSV is achievable in a day or two. The challenge is maintaining it — pay policies change, API rate limits bite during busy months, and the script tends to become a critical piece of infrastructure with no owner.

Use a dedicated tool

Tools like CalloutPay handle the API calls, time zone logic, bank holiday classification, incident matching, minimum-hours rules, and XLSX formatting so you don't have to. You configure your rates once, hit generate, and get a file your finance team can submit directly to payroll. For most teams, this is faster and less error-prone than building and maintaining a custom solution.

// GET STARTED FREE

Stop doing this by hand

CalloutPay generates finance-ready on-call pay spreadsheets from PagerDuty in seconds. Stipends, callout fees, bank holidays, GBP / EUR / USD — all handled automatically.

Try CalloutPay free