Skip to content
Launching Oct 10 — OpenPush is free forever to 1M MAU per app, every feature included. Get early access →
ProductJourneysLive ActivitiesPricingCompareDocsChangelogMigrate from OneSignalSign in
Home / Compare / Migrate from OneSignal
Migration guide

Leave OneSignal without
losing a subscriber.

Your subscribers are yours. This guide moves them — tokens, tags, opt-in status, templates and message history — in an afternoon, with a verification step so you never send blind.

An afternoon · 5 steps · nobody gets re-permissioned
01

Pull your audience with a REST key

On the Migrate page, paste your OneSignal app ID and a REST API key. OpenPush asks OneSignal for its own subscriber export — tokens, external IDs, tags, country, timezone and subscription status — waits for it, and imports it. The key is used for the pull and never stored. Prefer to do it by hand? Audience → Export CSV in OneSignal and upload the file.

On the free plan, exports are still available. Do this before anything else.

app.openpush.ai · migrate
players.csv · 428,110 rows · pulled
columnsplayer_id, token, external_id
alsotags, language, country, timezone, status
history✓ 366 campaigns · 12 templates
02

Create your app in OpenPush

One click generates per-app keys. Add your FCM service-account JSON — the same one OneSignal uses for Android — and your APNs auth key for iOS. Nothing new to provision.

app.openpush.ai · new app
appprod
api keyop_live_••••••••3f9a
FCM service account✓ uploaded
APNs auth key✓ uploaded
03

Import

Columns map automatically and subscribed / unsubscribed status is preserved exactly — nobody gets re-permissioned, nobody gets ghost-messaged. Message history and templates come with it; segment names arrive as paused shells for you to re-enter the rules. Large accounts import in the background, and a re-import never overwrites a live OpenPush snapshot.

app.openpush.ai · import
token→ device_token  ✓
external_id→ external_id  ✓
subscription_status→ status  ✓ preserved
imported412,806 subscribed · 15,304 unsub
04

Swap the SDK config

Replace the OneSignal import and keys — the SDK keeps the same method names on purpose. Ship your next release; both SDKs can coexist during rollout, so you migrate at your own pace.

// AppDelegate — the import and the keys change; the call sites stay- import OneSignalFramework+ import OpenPushOneSignal- OneSignal.initialize("onesignal-app-id", withLaunchOptions: launchOptions)+ OneSignal.initialize(appId: "op_app_…", sdkKey: "opsk_…")OneSignal.login(user.id)// tokens, tags & opt-in status carry over
05

Verify with a test device

Test subscriptions don't touch your reports. Send yourself the first push, watch it land in the delivery funnel, then flip the switch and go live.

app.openpush.ai · test send
totest device · iPhone 15
sent14:02:11
delivered✓ not counted in reports
go liveready
All platforms

iOS (APNs), Android (FCM) and web push are all live from the Oct 10 launch — migrate whatever you run. Import your subscribers, swap SDK keys per platform, and send. "OneSignal-compatible" covers the segment vocabulary, the importer, and the SDK surface we've validated — see the compatibility matrix for exact SDK versions, token/VAPID types, tag mapping, and known gaps before you cut over. The developer-level detail is in the docs.

What survives the move

Nothing about your users changes.

Opt-in statussubscribed / unsubscribed, preserved exactly
Tokens & tagsdevice tokens, external IDs, every tag
History & templatescampaign outcomes and templates come across
Straight answers

Migration questions.

Can I export on OneSignal's free plan?

Yes — CSV export is available on the free plan, and OpenPush can pull it for you with a REST key. Export your audience first; the file includes tokens, external IDs, tags, and subscription status.

Can both SDKs run at the same time?

Yes. OpenPush and OneSignal SDKs coexist in the same build during rollout, so you can migrate a percentage of traffic at a time and verify before you fully cut over.

What's the rollback plan?

Because both SDKs can run together, rollback is a config change, not a migration: point sends back at OneSignal while you investigate. Your OpenPush data stays put, and nothing is deleted on either side.

What happens to my segments?

Segment names come across as paused shells — OneSignal's API does not export the rules — and you re-enter them in OpenPush's identical filter vocabulary: last_session, session_count, tags, language. Most paste straight over; the few that don't are usually simpler to express here.

Will anyone get re-permissioned or double-messaged?

No. The importer preserves opt-in status exactly, and test subscriptions never touch reports — so nobody who unsubscribed gets messaged, and you won't send duplicates during the cutover.

An afternoon, not a quarter

Keep your subscribers. Drop the bill.

Free forever to 1M MAU · No credit card · Your own APNs and FCM credentials · read the pledge