Migrating from SendGrid

SendGrid (Twilio Email) is great at one thing: blasting a lot of email cheaply. It's not a journey platform. If you're using SendGrid Marketing Campaigns for lifecycle workflows, hitting the limits of their Automations product, or watching the Twilio bill scale unfavorably, Apex is a clean upgrade.

This guide focuses on the Marketing Campaigns + Automations path. If you're using SendGrid purely for transactional sends, see the API migration section at the bottom — that's a much smaller change.

Why teams move

  • Automations were never the focus. SendGrid's strength is transactional + bulk; their Automations are second-class. Apex's Adaptive Journeys are the headline product.
  • Real lift measurement. SendGrid's reporting tells you opens and clicks. It doesn't tell you whether the journey caused the conversion vs. would-have-converted-anyway. Apex's global holdout + calibrated impact compute that number directly.
  • One sampler across all surfaces. SendGrid's experiment is per-send, fixed splits. Apex's Experiment step samples letters continuously and shares the engine with website experiments.
  • Bring the delivery account you control. Apex adds orchestration and measurement without asking you to hand over the verified domain and sender reputation you already own.

Concept mapping

SendGridApexNotes
Sender Identity / DomainSES domain identityKeep your existing SES setup. Apex doesn't proxy your sends.
Marketing CampaignsCommunicationsOne-shot sends become a journey with a single Send step (or just a transactional API call if it's not lifecycle-shaped).
AutomationsAdaptive JourneysSame shape: trigger on event, sequence of steps, exit conditions.
Automation: Send EmailSend stepReuses your existing comm template via the comm picker.
Automation: WaitWait step (duration)Direct mapping.
Automation: A/B TestExperiment stepCompare two letters. The old Adaptive Branch authoring mode is retired.
ListsSegmentsDynamic SendGrid segments → Apex Segment predicates. Static lists → org-scope Segments.
Single Sendsone-shot CommunicationUse a one-step journey with an immediate trigger, OR call the transactional send API directly.
Contact Custom FieldsEnd-user attributesBackfill via /api/events.
Template Engine (Handlebars)LiquidJSThe few syntax differences flag at preview time. Most templates port verbatim.
Email Activity / StatsCalibrated impact + per-step statsDifferent shape — Apex shows lift vs holdout, not just opens/clicks. Your transactional opens/clicks still come through SES events.

What you can leave as-is

  • SES — keep your domain identity, IPs, configuration sets. SendGrid was sending through SendGrid's IPs; you'll switch to your own SES IPs as part of the migration. Plan for a 2-week IP warm-up if you're sending high volume.
  • Event tracking — if you're tracking signup/activation/etc. via your own analytics already, just point them at /api/events.
  • Contacts data — exportable as CSV from SendGrid; backfill into Apex via a one-time identify call per contact.

Migration steps

1. Provision SES (if you haven't already)

SendGrid handles the SMTP layer for you. Moving to SES means:

  • Add your sending domain to SES (DKIM + DMARC records)
  • Request out-of-sandbox if you're sending to addresses you don't own
  • (Optional) request dedicated IPs and plan a 2-week warm-up if you're doing >10k/day

Apex's onboarding flow walks you through this — it's a one-time setup that takes a couple of days for DNS propagation.

2. Export from SendGrid

Pull from SendGrid's Marketing Campaigns API:

  • A JSON dump of Single Sends, Marketing Campaigns, and Automations
  • A CSV of contacts + custom field values
  • (Optional) recent email-event history for backfill

3. Translate

The migration tool emits:

  • Apex Segment predicates from SendGrid dynamic segments
  • Org-scope Segments from SendGrid static lists
  • Adaptive Journey drafts from SendGrid Automations
  • Communications from individual email templates (preserves the Handlebars-to-Liquid conversion where straightforward; flags non-portable filters)

4. Review + publish

Open /dashboard/communications/journeys/[id] for each translated journey. Walk the canvas, dry-run with a test subject, set the conversion event in the toolbar (Set goal) if relevant, then publish.

5. Cut over

  • Pause the SendGrid Automation (stops new entrants)
  • Publish the Apex equivalent
  • Wait 1-2 weeks for in-flight SendGrid contacts to drain
  • Update DNS to send through SES if you haven't already
  • Sunset the SendGrid Marketing Campaigns plan; keep Twilio for SMS if you use it (Apex routes SMS through the Webhook step → Twilio)

If you're using SendGrid purely for transactional

Apex doesn't build a separate transactional-only product — every send goes through the same pipeline. If you're using SendGrid solely for password-resets / receipts / 2FA codes, the migration is trivial:

- POST https://api.sendgrid.com/v3/mail/send
+ POST https://app.apex.inc/api/v1/transactional/send

The payload schema is similar (personalizations, from, subject, content). Apex's transactional API also gives you:

  • Idempotency keys (15-minute window)
  • Sandbox mode (X-Apex-Mode: sandbox)
  • The same delivery + bounce + complaint signals you got from SendGrid

See the transactional API docs for the full schema.

What's NOT in the migration

  • SendGrid IP reputation. It does not transfer because you are sending through your own SES account. Plan the IP warm-up.
  • SendGrid template editor history. Templates port; revision history doesn't.
  • SendGrid Email Activity feed. Apex's event history is per-end-user (queryable via the dashboard); the bulk Activity API is a different shape.

FAQ

Will my email reputation tank during the move? No, if you do the warm-up right. We recommend ramping volume from 1k → 5k → 25k → full over the first two weeks. Apex's onboarding ships with a sample warm-up plan; SES dedicated-IP customers get IP-pool monitoring per recipient domain.

What about SendGrid Marketing Campaigns' segmentation? Translates cleanly to Apex Segments. Dynamic segments → predicates; static lists → org-scope Segments.

Can I keep SendGrid for transactional? Sure. Pointing Marketing Campaigns at Apex while keeping SendGrid for /v3/mail/send calls is a valid intermediate state.

How long does a typical migration take? Pure transactional: a sprint. Marketing Campaigns + Automations: 1-2 weeks including the SES IP warm-up.

Get migration help

migration@apex.inc — send your SendGrid API key + a quick description of your setup and we'll send back a translated Apex workspace + a tailored cutover plan.