Switching guide

Moving from SendGrid to getread

Your SendGrid account keeps sending while you set things up, so there’s no rush. Here’s what comes with you, and how to move it one step at a time.

What comes with you

  • Your domain. Authenticate it with getread alongside your SendGrid records.
  • Your contacts and suppressions. Export them as CSV files and we’ll help you bring them in.
  • Your templates. Paste the HTML from your dynamic templates into saved getread templates.
  • Your webhooks. Point getread’s delivery events at an endpoint in your app.

One thing to know before you start: getread sends over an HTTPS API, and there’s no SMTP relay. If your app sends through smtp.sendgrid.net, you’ll swap that for one API request. There’s no SDK to install either. Any language that can make an HTTPS request can send with getread, so a few lines replace the SendGrid client library.

1. Verify your domain

Add your sending domain in getread. Domain setup walks you through DKIM, SPF and DMARC, shows the exact records for your domain and checks them for you.

  • Your SendGrid records (the s1._domainkey and s2._domainkey CNAMEs, and the em subdomain) can stay where they are. getread’s DKIM keys live under their own names, so both providers can sign your email at the same time.
  • A domain only ever has one DMARC record. If you already have one, keep your policy and add getread’s reporting address to its rua list.

2. Bring your contacts

If you use Marketing Campaigns, export your contacts as a CSV from the Contacts area. Email, name and tags are what we bring over, and we’ll help you import them.

Campaigns only go to contacts with a recorded consent basis, which is how and when they agreed to hear from you. If you know how people joined your list, such as a signup form or a checkbox at checkout, bring that along too.

Export your suppressions as well: global unsubscribes, group unsubscribes, bounces and spam reports. That way, people who said no stay that way.

3. Rebuild or paste your templates

SendGrid dynamic templates use Handlebars. getread templates use simple variables in double braces, like {{first_name}} or {{order.number}}, filled in from the attributes you send.

  • Copy the HTML from each dynamic template into a saved getread template. Plain variables usually carry over as they are.
  • Variables don’t run logic, so {{#if}} blocks and {{#each}} loops won’t work. Work those parts out in your app and pass the finished values, or render the whole email yourself and send it as html.
  • Would you rather keep templates in your code? Send html and text directly instead of a template_id.

4. Point your send call at getread

Create an API key in getread with permission to send. Then swap your call to SendGrid’s /v3/mail/send for one request to getread:

curl https://app.getread.com/api/v1/transactional/send \
  -H "Authorization: Bearer $GETREAD_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042-receipt" \
  -d '{
    "from_email": "[email protected]",
    "from_name": "Your brand",
    "to": "[email protected]",
    "subject": "Your receipt",
    "html": "<p>Thanks for your order, Maria.</p>",
    "text": "Thanks for your order, Maria."
  }'

The Idempotency-Key makes retries safe. Send the same key with the same request, and we return the original message instead of sending it twice.

Here’s how the fields line up:

SendGrid mail/send getread transactional/send
personalizations[].to[].email to, one recipient per request
from.email, from.name from_email, from_name
subject subject
content (text/html, text/plain) html, text
reply_to.email reply_to
template_id, dynamic_template_data template_id, attributes
custom_args tags

When you send a template_id, include the subject too. It can use the same variables as the template.

5. Reconnect your webhooks

SendGrid’s Event Webhook posts events like bounce, spamreport, open and click to one URL. In getread, add a webhook endpoint and choose the events you want, such as email.bounced, email.complained and email.opened, plus email.clicked for campaigns. getread doesn’t track clicks in transactional email. Each endpoint gets its own signing secret, so your handler can check that an event really came from getread.

Every event also shows up in Mailroom, so you can see what happened to any message without digging through logs.

6. Run both side by side, then switch

There’s no need to move everything at once. Start with one kind of email, maybe password resets, and watch it arrive in Mailroom. When you’re happy, move the rest. Keep your SendGrid account until everything has moved and the last webhooks have come in, then remove its DNS records whenever you like.

Want a hand with any of this? Talk to us, and a real person will help you plan the move.

Questions about moving from SendGrid

Can I keep sending through SendGrid's SMTP relay settings?
getread doesn’t have an SMTP relay, so you’ll swap smtp.sendgrid.net for one HTTPS request to the transactional send API. It’s usually a small change, and you get safe retries with an Idempotency-Key.
Is there a getread library to replace the SendGrid SDK?
There’s no SDK to install. The API is plain JSON over HTTPS, so a few lines with the HTTP client you already use replace the SendGrid client.
Will my Handlebars templates work?
Plain variables like {{first_name}} carry over. Conditions and loops don’t, so work those parts out in your app and pass the finished values, or send the rendered HTML.
Do I have to move Marketing Campaigns and transactional email together?
No. Move them separately, in whichever order feels easiest. In getread they share one monthly pool, so you never have to guess how to split your plan.
What happens to my SendGrid suppressions?
Export your global and group unsubscribes, bounces and spam reports, and send them along with your contacts. People who said no to you on SendGrid stay that way on getread.

Ready when you are.

Set up getread alongside SendGrid, and switch whenever it feels right.

[TRIAL TERMS]