pex

Migrating from AWS Pinpoint

AWS Pinpoint reaches end-of-life on October 30, 2026. New customer signups have already been disabled (since May 20, 2025). The recommended replacement — Amazon Connect — doesn't include Journeys, In-App Messaging, Push notifications inside Campaigns, Custom Channels, or Imported Segments. If you're using any of those Pinpoint features, you need to migrate to a different platform before the EOL date.

This guide maps Pinpoint concepts to Apex equivalents and shows you the practical migration path.

Why Apex specifically

  • AWS-native, single-region durability. Same VPC region as your Pinpoint setup; same SES/SNS/Lambda primitives. No new vendor exfiltration of customer PII.
  • Strict feature parity for the Pinpoint paths Connect doesn't ship: journeys (with Adaptive Branches), in-app messaging, mobile push, webhook BYO destinations.
  • Better measurement than Pinpoint ever had: a global holdout, calibrated lift dashboard, council-reviewed census rules.
  • Pricing transparency: your transactional sends are the same SES bill they always were; you're only paying us for the orchestration + measurement on top.

Concept mapping

PinpointApexNotes
ApplicationWorkspace (projectKey)Same scoping shape.
EndpointEnd-User (endUserId)Apex unifies on a stable per-user identity rather than per-channel endpoints. The migration tool maps each endpointId to the corresponding endUserId based on shared user attributes.
SegmentAudienceAudiences (docs) are saved predicates over events + attributes + cohort references. The migration tool exports your Pinpoint dynamic segments as Apex audience predicates.
Imported SegmentCohortLarger lists go in as org-level cohorts referenced from journey audiences.
Campaign (one-shot)Communication + Send (one-time trigger)Most "campaigns" in Pinpoint are journey-shaped already; we model them as journeys with a single Send step.
JourneyAdaptive JourneyPinpoint Journeys map 1:1 to Adaptive Journeys (docs). Multivariate "Random Split" branches map to conditional branches; "Multivariate Test" branches with optimization map to adaptive branches with Thompson sampling — usually a clean upgrade.
Yes/No split with EventConditionEngagement Branch (event_response mode)Pinpoint forces you to chain Yes/No splits to handle multi-event routing (Opened vs Clicked vs Bounced) and silently inserts a 1h wait before each — a frequent foot-gun. Apex's Engagement Branch lets you fan out to multiple paths at once with an explicit deadline; the migration tool auto-inserts the 1h Wait when your Pinpoint export had it implicit.
Email ChannelSES Engagement SetReuse your existing SES verified domain.
In-App ChannelIn-App Push (web)Same channel concept; renamed.
Push (APNS / FCM)Mobile PushCapacitor SDK ships with both adapters.
Custom ChannelWebhook stepOutbound HTTPS POST/PUT with HMAC-signed payload + DNS-rebinding-safe URL validation.
Event Stream/api/eventsThe same SDK route you'd use for analytics.
Endpoint AuthorizationWorkspace API keyPer-workspace key, separately scoped from snippet keys.

What you can leave as-is

  • SES — keep your existing domain identity, IP pools, configuration sets. Apex sends through SES under your AWS account; we don't proxy your sends through ours.
  • DNS / DKIM / DMARC — already configured for your sending domain; Apex inherits.
  • Event tracking — if you're already firing events into Pinpoint via PutEvents, the migration is s/PutEvents/POST \/api\/events/. Same payload shape.

Migration steps

1. Inventory

Run the export tool against your Pinpoint application to produce:

  • A JSON dump of every Segment, Journey, and Campaign
  • A CSV of endpoint identities (so we can translate to endUserId)
  • A list of custom event names + their schemas

The export takes ~5 minutes for a typical Pinpoint application. Larger applications (>1M endpoints) take longer; the tool checkpoints so you can resume.

2. Provision the Apex workspace

Sign up at apex.inc → workspace settings → install the snippet. The snippet is the same backbone as your tracking layer — you don't need to dual-write events.

3. Translate segments → audiences

The migration tool emits Apex audience predicates for every dynamic segment. Static / imported segments become cohort references.

Open /dashboard/audiences and review the translated audiences. The tool flags segments it couldn't translate cleanly (e.g. segments using behaviors Pinpoint doesn't expose in the export — these are rare).

4. Translate journeys

Each Pinpoint Journey becomes an Adaptive Journey draft in Apex. The migration tool maps:

  • Wait activities → Wait steps (duration mode)
  • Yes/No Split → Branch (conditional, single condition)
  • Multivariate Split → Branch (conditional, multiple conditions, default route)
  • Holdout → Branch (conditional) with the holdout percentage as the default-route weight (note: most Pinpoint holdouts are per-journey; we recommend deleting these and using Apex's global holdout instead — it's a cleaner control)
  • Send Email / Push / SMS → Send step pointing to a translated communication
  • Custom Channel → Webhook step

5. Review + publish

The translated journeys land as drafts — nothing fires until you publish. Open each in /dashboard/communications/journeys/[id], walk it on the canvas, dry-run with a test subject, then publish.

6. Cut over

We recommend dual-running Pinpoint and Apex for 1-2 weeks:

  • Set Pinpoint journey Status: Closed (stops new entrants but lets in-flight finish)
  • Publish the Apex equivalent
  • After 1-2 weeks of in-flight executions completing on the Pinpoint side, archive the Pinpoint application

What to do about in-flight Pinpoint executions

Pinpoint doesn't expose individual execution state via API, so we can't replay them in Apex. Options:

  • Wait it out — most journey waits are days, not weeks; new entrants are already going through Apex.
  • Send a one-shot bridge campaign — a final "we've moved" notification to the in-flight cohort, then close the Pinpoint journey.

What's NOT in the migration

  • Pinpoint Analytics dashboards. Apex's calibrated-impact dashboard answers a different (better) question. If you need historical Pinpoint analytics, export them to S3 before EOL — they're gone after.
  • Pinpoint custom user attributes. These have to be re-imported as end-user attributes via /api/events (a one-time backfill).

FAQ

What happens to my existing SES warm-up? Untouched. We send through SES under your AWS account; your IP reputation stays put.

Can I keep using AWS Connect for voice/chat? Yes. Apex doesn't compete with Connect's voice/chat agent paths. We replace the Pinpoint messaging layer specifically.

Do I need to re-implement my event tracking? No. The Apex SDK accepts the same event shapes Pinpoint did. If you're already firing PutEvents, swap the URL.

What about the Pinpoint journey-status webhooks? Apex emits the same lifecycle events (execution.started, execution.exited, send.executed, etc.) into the audit log + (optionally) your webhook destination.

How long does a typical migration take? Workspaces with 5-10 journeys take a single afternoon end-to-end. Workspaces with 50+ journeys take a couple of days because the review step is human-in-the-loop.

Get migration help

Drop us a line at migration@apex.inc with your Pinpoint application export — we'll walk you through the translated graph and answer the cutover questions before you publish anything.