Overview
Migrating from PagerDuty to Rootly On-Call is an API-driven import process that recreates your paging configuration in Rootly so you can cut over with confidence. The migration is designed to preserve the structure your responders rely on—who is on-call, how alerts escalate, and how responders are notified—while also applying Rootly’s operational guardrails (for example, preventing schedule dependency loops and ensuring notification rules remain actionable). A typical migration has two goals:- Parity at cutover: responders can acknowledge and resolve alerts in Rootly with familiar routing and escalation behavior.
- Clean operational ownership: once you cut over, schedules and escalation policies in Rootly become your new source of truth going forward.
How PagerDuty Concepts Map To Rootly
This table answers two distinct questions at once:- Does Rootly have an equivalent concept for this PagerDuty resource? — the Rootly column.
- Will the on-call migration import this for me, or do I configure it natively in Rootly? — the Imported by migration? column.
| PagerDuty | Rootly | Imported by migration? | Notes |
|---|---|---|---|
| Service | Service | ✓ Optional | Included when service import is enabled |
| Team | Team | ✓ Optional | Included when team import is enabled. API/Liquid refers to this as group |
| Escalation Policy | Escalation Policy | ✓ | 1:1 — Rootly optionally creates separate quiet and audible paths to mirror PagerDuty urgency behavior |
| Schedule | Schedule | ✓ | Rotation members can be users or other schedules (nested), not teams directly |
| Rotation | Rotation inside a Schedule | ✓ | Multiple rotations per schedule supported; bottom-most wins on overlap |
| Override | Override | ✓ | Per-shift, individual-user only |
| User | User | ✓ | Matched by email; pre-existing users (including soft-deleted) are reused |
| Contact method (email / SMS / phone) | Contact method | ✓ | + critical mobile push (bypasses DND) and non-critical mobile push (respects DND) |
| Notification rule | Notification rule | ✓ | Mapped where compatible; unmappable rules are skipped rather than partially imported |
| Urgency (low) | Quiet notification rule | ✓ | |
| Urgency (high) | Audible notification rule | ✓ | |
| Incident | Incident | — | Rootly starts fresh on cutover; historical incidents stay in PagerDuty |
| Alert | Alert | — | Set up alert sources in Rootly natively |
| Event rule | Alert routing rule | — | Recreate in Rootly’s alert routing UI |
| Stakeholder | Subscriber | — | Configure in Rootly status pages or per-incident subscriber lists |
| Maintenance window | Scheduled Maintenance Incident | — | Rebuild as scheduled maintenance incidents in Rootly |
| Postmortem | Retrospective | — | New retrospectives are authored in Rootly going forward |
| Runbook / Response Play | Workflow / Playbook | — | Workflows replace the automation side; playbooks replace the documented procedure side |
| Priority | Severity | — | Configure Rootly severities to match your PagerDuty priority model |
| Custom field | Custom field | — | Definitions can be recreated in Rootly; historical incident values stay in PagerDuty |
| Outbound webhook | Outgoing Webhook | — | Reconfigure outbound destinations against Rootly’s webhook events |
| Round robin | Round robin paging | — | Rootly-only configuration applied on top of escalation policy levels after migration |
What You Can Migrate
Rootly can migrate the core building blocks of on-call operations. Each section below explains what is migrated, how Rootly maps it, and where you should expect differences.Users
Rootly imports users in a way that prioritizes safe, deterministic matching. How users are matched- Rootly matches PagerDuty users to Rootly users using email address.
- If a Rootly user with that email already exists (including soft-deleted users), Rootly will reuse that user rather than creating a duplicate.
- If no Rootly user exists for the email, Rootly creates a new Rootly user automatically.
- Imported users are added to the target Rootly Team.
- Your Team’s defaults (and any relevant workspace configuration) may apply to newly created memberships, including default on-call role assignment.
- If your workspace uses on-call seat limits, users without an available on-call seat cannot be added into schedule rotations until seats are available.
- Email address(es)
- SMS-capable phone number(s)
- Call-capable phone number(s)
- PagerDuty urgency = low maps to Rootly quiet notification rules.
- PagerDuty urgency ≠ low maps to Rootly audible notification rules.
- PagerDuty notification start delays map to Rootly rule delays when possible.
- Contact method types are mapped into Rootly’s supported contact methods, which include:
- SMS
- Phone call
- Critical mobile push (bypasses device Do Not Disturb when configured)
- Non-critical mobile push (respects device Do Not Disturb when configured)
- If a PagerDuty rule uses a configuration that does not translate cleanly, Rootly skips that rule rather than importing a partial or misleading configuration.
- After import, Rootly can also seed defaults (if needed) so every responder has a safe baseline configuration (for example, an email-based quiet rule).
- Rootly enforces practical paging constraints in the UI for audible notification rules. For example, initial audible steps typically must include an immediately actionable path (critical push or call) so responders cannot accidentally configure an audible chain that can never reach them.
- Where your PagerDuty rules include escalations or multi-step paging, validate your Rootly notification rules post-import to ensure the “audible” versus “quiet” intent matches your team’s reality.
Schedules
Rootly imports schedules with the intent of preserving rotation logic and future coverage. What schedule data is migrated- Schedule definitions (name, description where applicable)
- Rotations and rotation membership
- Overrides
- Shift generation behavior (Rootly will generate future shifts based on imported rotation configuration)
- Individual users
- Other schedules (nested schedules), with safeguards to prevent circular dependencies
- Schedules with rotation turn lengths shorter than 24 hours may be skipped during migration.
- You can import schedules into a clean workspace (create-only), or
- You can synchronize against existing Rootly schedules (sync mode). In sync mode, Rootly may rebuild base shifts and clean up removed overrides to match the source.
Escalation Policies
Escalation policies are imported to preserve “who is notified, when, and in what order.” What escalation policy data is migrated- Escalation policy definitions and levels
- Targets within each level (where compatible)
- Ordering and delays
- A quiet path designed for low urgency routing
- An audible path designed for urgent paging
- Users
- Schedules
- Teams
- Slack channels
- Services (depending on configuration)
Services and Teams (Optional)
Depending on migration settings, Rootly can also import:- PagerDuty teams into Rootly Teams
- PagerDuty services into Rootly services
What’s Not Migrated
The on-call import covers paging configuration — users, schedules, escalation policies, and optionally services and teams. Everything below is out of scope and either has to be reconfigured natively in Rootly or migrated by a separate process. Knowing this list upfront prevents the “I assumed X would come over” surprise during cutover.| PagerDuty resource | Why it’s out of scope |
|---|---|
| Active incidents | Incidents in flight at migration time stay in PagerDuty. Rootly starts fresh on cutover. |
| Historical incidents and timelines | Past incident records, postmortems, and timeline events are not pulled. Export from PagerDuty if you need archival. |
| Event rules / event orchestrations | Handled by a separate migration path. Discuss with your onboarding rep if you depend on these. |
| Maintenance windows | Recreate as Scheduled Maintenance Incidents in Rootly. |
| Response Plays / Runbooks | Rebuild as Workflows or Playbooks. |
| Stakeholder subscribers | Reconfigure in Rootly’s status pages or per-incident subscriber lists. |
| Status pages | Set up natively in Rootly. The page model differs in ways that don’t translate cleanly. |
| Custom fields and their incident values | Custom field definitions can be recreated in Configuration → Custom Fields; historical values stay in PagerDuty. |
| AIOps content (intelligent alert grouping, dynamic notifications) | Rebuild using Rootly’s alert grouping and alert routing primitives. |
| Integration credentials (e.g., Datadog → PagerDuty webhook secrets) | Reconfigure the sending tool to point at Rootly’s webhook URL with the Rootly-issued secret. |
| User mobile app installs and verified contact methods | Each responder installs the Rootly mobile app and verifies their own phone/email after import. |
Configuration Options You May Be Asked To Choose
PagerDuty migrations often include a small number of explicit choices so the resulting Rootly configuration matches your intent. Common migration options include:- PagerDuty region: US or EU
- Import scope controls:
- Import all escalation policies, or only specific escalation policy IDs
- Exclude certain schedule IDs
- Import all users, or restrict to users referenced by migrated schedules/policies
- Resource strategy:
- Create-only import
- Synchronize existing Rootly resources
- Escalation policy behavior:
- Create separate quiet and audible escalation paths
- Operational hygiene options:
- Disable shift reminders for imported users (helpful if you want responders to opt in later)
- Timing controls:
- Delay between escalation policy imports and schedule imports
- Delay before schedule shift recreation in sync mode
- Dry run mode:
- Validate and produce a report of what would be imported (including validation errors) without writing resources into Rootly
Typical Timeline
Most PagerDuty migrations land inside a 2–4 week window from kickoff to full cutover. The actual import is fast — the time goes into scoping, dry-run review, and the parallel-validation period.Discovery And Scope (1–3 days)
Read-Only API Key And Secure Handoff (same day)
Dry Run And Review (1–3 days)
Production Import (minutes to a few hours)
Parallel Validation Window (1–2 weeks recommended)
Migration Process
Step 1: Define Scope and Success Criteria
Before any technical setup, define what “success” means for your organization. This reduces rework and prevents ambiguous expectations. Recommended scoping questions:- Are you migrating one team or multiple teams?
- Are you migrating only schedules and escalation policies, or also services and teams?
- Do you need parity for low-urgency workflows (quiet routing), or only urgent paging?
- Do you need to preserve existing Rootly resources, or can this be a clean import?
- Every responder can be paged in Rootly via at least one reliable channel.
- Every critical service has an escalation policy attached and can page an on-call responder.
- The most important schedules generate correct upcoming shifts for the next 2–4 weeks.
- Escalation policies correctly notify schedules/users in the intended order with expected delays.
Step 2: Create a Read-Only PagerDuty API Key
Rootly migrations use the PagerDuty API to read configuration. In PagerDuty:- Navigate to Integrations → Developer Tools → API Access Keys
- Create a new API key
- Name the key clearly (example: “Rootly Migration – Read Only”)
- Ensure the key is read-only
- Copy the key securely and share it with the Rootly onboarding team using your approved secure channel
Step 3: Run a Dry Run (Strongly Recommended)
A dry run validates what Rootly can import and highlights any resources that will be skipped or require attention. This is especially valuable if your PagerDuty instance contains edge cases (complex layers, unusual rotation lengths, legacy artifacts). A dry run typically surfaces:- Users that cannot be matched cleanly (missing emails, invalid data)
- Schedules that will be skipped (for example, short turn lengths)
- Policies that reference unsupported patterns
- Any validation errors that would prevent import
Step 4: Execute the Migration
After dry run validation, Rootly runs the migration asynchronously. Imports are typically staged so dependencies resolve correctly (for example, users exist before schedules reference them). At a high level, a migration commonly progresses through:- Users (and optional Teams)
- Services (optional)
- Schedules (and overrides, then shift generation)
- Escalation policies
Step 5: Validate in Rootly Before Cutover
After import, treat validation as an explicit step—not an afterthought. You should validate both configuration correctness and real paging behavior before you flip any alert sources. The On-Call Readiness report in Rootly is your fastest path to a tenant-wide view of paging readiness — it surfaces missing escalation policy attachments, unverified contact methods, and responders not installed on the mobile app in one place. Use it as the dashboard you walk through before sign-off. Schedules- Each core schedule shows the correct “currently on-call” responder and the next 2–4 weeks of upcoming shifts.
- Overrides imported from PagerDuty are visible on the On-Call Shifts page and labeled correctly.
- No schedules show a Gaps Detected badge unexpectedly (or, if they do, the Schedule Owner fallback is intentional).
- Nested schedules (schedules used as rotation members in other schedules) resolve to the correct on-call user.
- Each escalation policy references the intended schedules, users, or targets at each level.
- Level delays match what PagerDuty had (or the agreed-upon override).
- If you opted into separate quiet/audible paths, both are present and target the right groups.
- Every responder has at least one audible notification rule that reaches them within the expected delay.
- Phone numbers are verified (a phone number on the user record without verification will not receive SMS or calls).
- Responders intended for low-urgency routing have quiet rules configured.
- Sample 3–5 responders across teams and confirm their per-user notification rule chain matches expectations.
- Responders intended to receive critical mobile push have the mobile app installed and logged in.
- Critical push permissions are granted (the mobile app prompts for this — verify it was accepted, not deferred).
- Test alert sources route into Rootly’s Alerts page without errors.
- For each critical service, confirm the alert routing rule maps to the correct escalation policy.
- Send a test notification from at least one schedule per team. Confirm the on-call user receives it on every channel they’re configured for (push, SMS, call, email).
- For services with the highest production importance, simulate a real alert (using the source tool’s test webhook) and confirm the page reaches the on-call responder end-to-end.
- Review the dry-run report’s skipped resources list. For each: decide whether to recreate manually in Rootly using a native pattern, or accept that it stays in PagerDuty until decommissioned.
Step 6: Cut Over and Monitor
When you are ready, shift your alert sources to route into Rootly On-Call, then actively monitor the first hours/days of production usage. During cutover, the most common issues are not configuration problems—they are deliverability or responder readiness issues (for example, a responder never installed the mobile app or has not verified a phone number). Use Rootly’s readiness tooling and test notifications proactively.Running PagerDuty And Rootly In Parallel
Because Rootly imports from PagerDuty using a read-only API key, PagerDuty stays fully untouched and operational throughout the migration. That gives you a real safety net: you can keep PagerDuty live during validation and cut over without committing burned bridges. Two parallel-running patterns are common, depending on how much risk tolerance your team has during cutover.Pattern A: Mirror Mode (Lower Risk)
PagerDuty stays primary. Alert sources continue routing to PagerDuty. In parallel, you configure the same alert sources to also send to Rootly as a second destination. Pages fire in both systems; responders acknowledge in PagerDuty as usual. The goal is to observe, not act. Compare what Rootly does to what PagerDuty does for the same incoming alert. Did the right responder get paged? At the right delay? With the right urgency? Discrepancies caught here are cheap to fix — no production responders are relying on Rootly yet. This pattern works best when:- Your sending tools (Datadog, AWS, Sentry, etc.) support multiple webhook destinations or fan-out via a forwarder
- You have a defined validation period (typically 1–2 weeks) before committing
- Stakeholders are nervous about a hard cutover
Pattern B: Cutover With Warm Fallback
Flip alert sources from PagerDuty to Rootly on a planned date. PagerDuty stays configured (escalation policies, schedules intact) but no longer receives alerts. If something serious breaks in the first 1–2 weeks, you can re-point alert sources back to PagerDuty in under an hour and operate normally while the issue is diagnosed. The goal is to commit, but keep an undo path. Most teams find that after a week of clean operation, PagerDuty can be decommissioned with confidence. This pattern works best when:- You’ve completed thorough Step 5 validation and have high confidence in the import
- Your alert sources don’t easily support sending to two destinations
- Your team has a clear rollback runbook (who flips the switch, how the call is made)
What To Avoid
- Don’t pay for both indefinitely without a decision date. Set a cutover deadline. Parallel-running is a transitional state, not a destination.
- Don’t disconnect PagerDuty the same day you cut over. Keep it configured for at least a week. Configuration is free; rebuilding it from scratch on day-three because of a deliverability issue is expensive.
- Don’t skip the parallel period because validation looks clean. Real-world paging surfaces edge cases that no checklist catches — a misconfigured phone country code, a Slack workspace install issue, a responder who set Do Not Disturb. The parallel window catches these cheaply.
Best Practices
These practices reduce risk and make the migration easier to validate and operate.- Start with a dry run. Dry runs catch incompatible schedules and policy edge cases early, when changes are easiest.
- Migrate in a controlled window. Even if Rootly doesn’t require downtime, you want your team mentally prepared for validation and quick fixes.
- Plan a staged cutover. Many organizations keep PagerDuty live briefly while they validate Rootly paging reliability, then fully cut over.
- Validate paging with real test notifications. It’s not enough for rules to exist; verify that responders actually receive calls/SMS/push.
- Decide your urgency model up front. If you rely heavily on low urgency workflows, enable separate quiet and audible escalation paths. If you don’t, keep it simple.
- Communicate responder expectations early. Tell responders what to install (mobile app), what to verify (phone numbers), and what to expect during the transition.
- Document “skipped resources.” If something is skipped (such as a schedule layer with short rotation length), write down why and your replacement approach in Rootly.
Frequently Asked Questions
Does Rootly modify anything in PagerDuty during migration?
Does Rootly modify anything in PagerDuty during migration?
How does Rootly match users between PagerDuty and Rootly?
How does Rootly match users between PagerDuty and Rootly?
Are notification rules migrated exactly as-is?
Are notification rules migrated exactly as-is?
Why were some schedules skipped?
Why were some schedules skipped?
Can I migrate only part of my PagerDuty configuration?
Can I migrate only part of my PagerDuty configuration?
Can Rootly sync into an existing Rootly workspace with existing schedules and users?
Can Rootly sync into an existing Rootly workspace with existing schedules and users?
What should we validate before routing alerts to Rootly?
What should we validate before routing alerts to Rootly?
Who do I contact if something looks wrong after migration?
Who do I contact if something looks wrong after migration?
Need help planning or executing a migration? Contact your Rootly onboarding representative or email support@rootly.com.