# Migrate from Opsgenie

Atlassian ended new Opsgenie sales on June 4, 2025, and Opsgenie reaches end of support on April 5, 2027. EvoHub On-Call has a built-in importer that reads your Opsgenie account and creates the matching schedules, escalation policies and integrations. This page explains how to run it, what it maps and what you finish by hand.

## How Opsgenie concepts map to EvoHub

| Opsgenie | EvoHub | Notes |
| --- | --- | --- |
| Users | Organization members | Matched by email. Invite everyone — EvoHub has no per-seat fee. |
| Teams | Teams | Not created. You choose which of your EvoHub teams each Opsgenie team's schedules, policies and integrations go into. |
| Schedules and rotations | Schedules and layers | Imported. |
| Schedule overrides | Overrides | Upcoming ones are imported with their schedule. |
| Escalations | Escalation policies | Imported. |
| Integrations (Prometheus, Datadog, CloudWatch, email, API…) | Integrations | Imported, each with a new URL to paste into the tool. |
| Heartbeats | Uptime heartbeat monitors | Not imported. See [Heartbeat monitors](https://docs.evohub.io/heartbeat-monitors.md). |
| Notification rules | Notification settings and notification schedule | Not imported; each person sets their own. |
| SMS notifications | Push or voice call | EvoHub does not currently send SMS. |
| Mobile app | EvoHub iOS and Android apps | See [Mobile app](https://docs.evohub.io/mobile-app.md). |

## Before you import

- **Invite your people first.** The importer matches Opsgenie users to EvoHub members by email address. A schedule or escalation policy that names someone who is not a member yet is not imported until they join; the preview says which person is missing. The preview lists unmatched people and, if you are allowed to invite, offers an **Invite N people** button.
- **Make sure they can respond to alerts.** A member whose role cannot respond to alerts holds back the schedules and policies they appear in the same way, with a message naming them.
- **Create an Opsgenie API key with read access.** In Opsgenie: **Settings → API key management → Add new API key**, give it read access and copy it.

You need the On-Call settings permission to import (Owners, Admins and Members have it by default).

## Run the importer

:::steps
### Open the importer
Go to **On-Call → Import from Opsgenie** (also linked from the **Moving from Opsgenie or PagerDuty?** banner on the Integrations page).
### Enter the key and region
Paste the **Opsgenie API key** and choose the **Region**: **US** (api.opsgenie.com) or **EU** (api.eu.opsgenie.com). Click **Preview**. The key is used for this import only; EvoHub does not store it.
### Review the preview
Nothing is created yet. The preview shows **People** (who matched), **Teams** (where each Opsgenie team's objects go — by default, your current team), **Schedules** with their layers, **Escalation policies** with their steps and delays, **Integrations** with the EvoHub type each maps to, and every warning. Untick anything you do not want.
### Import
Click **Import N items**. The result lists what was created (with links), what was **Skipped** and why, and the warnings.
### Point your tools at EvoHub
For each imported integration, the result shows its new webhook URL with "Paste this into … in place of the Opsgenie URL". Update each monitoring tool. Alerts reach EvoHub only after you do this.
:::

You can run the importer again at any time. Items that were already imported are marked and skipped, so a re-run never creates duplicates. Only one import runs at a time per organization.

A schedule imported before that people have joined since shows **Add N new people**. Tick it and import: they are put where Opsgenie has them in the rotation. If you changed the layer in EvoHub since the import, they are added at the end instead and a warning asks you to check the order. Nobody is removed.

## What is imported, and how

### Schedules

Each Opsgenie schedule becomes an EvoHub schedule in the same timezone, and each rotation becomes a layer:

- **Daily** and **weekly** rotations carry over. A rotation of several days or weeks becomes a custom rotation of that many days.
- **Hourly** rotations become custom rotations of that many hours (up to 168). Longer hourly rotations are rounded to whole days, with a warning.
- **Time restrictions** become shift windows when EvoHub can express them: a daily window, or the same window on selected weekdays (such as Mon–Fri 09:00–17:00). A schedule with a restriction EvoHub cannot express (such as Friday 18:00 to Monday 09:00) is not imported; the preview tells you to create that layer by hand, one layer per window.
- Rotations that have already ended are skipped. Rotations that start or end in the future are imported with that start or end date.

### Overrides

Every override that has not ended yet comes over with its schedule, for the same person and the same start and end. The preview shows how many each schedule brings. An EvoHub override covers the whole schedule for one person, so these are not imported, and the preview names each one for you to recreate:

- an override on only some of a schedule's rotations, when the schedule has more than one;
- an override handed to a team rather than a person;
- an override for someone who is not in EvoHub yet, or cannot respond to alerts. Invite them or change their role, then run the import again.

If Opsgenie does not return a schedule's overrides, the schedule is still imported and the preview says so. Running the import again adds overrides that are new since; one that is already on the schedule is not added twice.
- Rotation participants are kept in order. A rotation with a team, an escalation, an empty ("no one") slot or the same person twice cannot be imported as it is: its schedule is not imported, and the preview tells you what to change in Opsgenie or to create the layer by hand.
- A disabled Opsgenie schedule is imported as inactive.

### Escalation policies

Each Opsgenie escalation becomes an escalation policy, and each rule a step:

- Steps can target a **user** or a **schedule**. A rule that notifies a team becomes a step for that team's schedule when the team owns exactly one; otherwise it is skipped with a warning, as are rules that notify another escalation. A rule that notifies a schedule whose rotations overlap becomes one step per rotation, a minute apart.
- Opsgenie counts every rule's delay from when the alert was created; EvoHub counts each step's delay from the step before, using 1, 2, 3, 5, 10, 15, 30 or 60 minutes. The importer converts the delays so each step lands as close as possible to its Opsgenie time and warns about any difference.
- A rule that notifies the "next" or "previous" on-call of a schedule notifies whoever is on call now in EvoHub.
- Opsgenie rules that escalate "if not closed" become steps that escalate until someone acknowledges.
- Repeat settings carry over, up to EvoHub's maximum of 5 repeats.
- Steps use each person's own notification preferences.

### Integrations

- Integrations that send alerts *into* Opsgenie are imported as the matching EvoHub integration type (Prometheus/Alertmanager, Grafana, Datadog, New Relic, CloudWatch, Azure Monitor, Dynatrace, Sentry, Google Cloud, Zabbix, UptimeRobot, Pingdom, Site24x7, StatusCake, Nagios, PRTG, email and API).
- A type EvoHub has no equivalent for is imported as a generic **API** integration, with a warning to check the payload it sends.
- Integrations that only send *out* of Opsgenie — Slack, Microsoft Teams, Jira, ServiceNow, Zendesk, outgoing webhooks, Statuspage — are not imported.
- Disabled Opsgenie integrations are not imported.
- Each integration is attached to the first (by name) escalation policy of its Opsgenie team that is imported. If none is, it is created without a policy — choose one on the Integrations page.

## What you recreate by hand

The preview lists these under **Not imported yet**:

- Heartbeats — use [heartbeat monitors](https://docs.evohub.io/heartbeat-monitors.md).
- Alert policies and routing rules.
- Notification rules — each person sets [their own notifications](https://docs.evohub.io/notifications.md).
- Maintenance windows — schedule them in **On-Call → Maintenance**.
- Team members — Opsgenie teams are not created. Each team's objects go into the EvoHub team you choose in the preview, or your current team.

Also recreate:

- **Overrides** the preview flagged (see [Overrides](#overrides)).
- **People who joined after the import, on escalation steps.** A re-run adds them to the schedules it imported (see above), but not to escalation policies imported before; add them to those steps by hand.

## Run both in parallel, then cut over

:::steps
### Add EvoHub next to Opsgenie
Where a tool supports several destinations (Alertmanager receivers, Datadog webhooks, CloudWatch SNS subscriptions, email recipients), keep Opsgenie and add the EvoHub URL, so both receive the same alerts for a week or two.
### Test paging end to end
Fire a test alert through each integration. Confirm the right person is paged, can acknowledge from the mobile app, and that recovery resolves the alert where the source supports it.
### Compare
During the parallel run, compare what EvoHub paged with what Opsgenie paged.
### Cut over
Remove the Opsgenie destinations from your tools and replace heartbeats and API calls. Leave time for a quiet week with EvoHub as the only pager before Opsgenie's end of support.
:::

The import itself is free. Alerts and notifications in EvoHub are billed by usage — see [How billing works](https://docs.evohub.io/how-billing-works.md). For help planning a migration, contact info@evosync.io.

## Related

- [Migrate from PagerDuty](https://docs.evohub.io/migrate-from-pagerduty.md)
- [Integrations overview](https://docs.evohub.io/integrations-overview.md)
- [Schedules and rotations](https://docs.evohub.io/schedules-and-rotations.md)
- [Escalation policies](https://docs.evohub.io/escalation-policies.md)
