SendGrid and Viesti compared
SendGrid details come from Twilio's pricing page, pricing PDF and SendGrid documentation, linked in each row. Checked 26 September 2026. Prices in US dollars.
| Viesti | SendGrid | |
|---|---|---|
| Entry paid plan | $5/month for 50,000 emails per billing cycle | Essentials: $19.95/month for 50,000 emails; Pro from $89.95/month for 100,000 |
| Free plan | 75 emails per UTC day and 2,000 per UTC month, with no time limit | Free trial: 100 emails/day for 60 days |
| Extra emails | $0.10 per 1,000 ($0.0001 per email); paid sending has no volume cap | $0.0013 per email on Essentials 50K ($1.30 per 1,000) |
| What counts as one email | One accepted message with up to 50 recipients; rejected mail is not counted | One email to one recipient |
| SMTP | smtp.viesti.email, port 587 (STARTTLS) or 465 (implicit TLS); AUTH PLAIN with username apikey and your API key as the password |
smtp.sendgrid.net, ports 25, 2525 or 587 (TLS) or 465 (SSL); username apikey, password the API key |
| HTTP API | POST /v1/send with JSON from, to, subject, text and html, or a whole MIME message in raw; no SDKs, no batch endpoint |
v3 Mail Send: JSON with up to 1,000 personalizations per request; client libraries |
| IP pools | Separate shared pools for free and for paid workspaces; marketing mail is not accepted on any plan | Trial and Essentials send from shared IPs grouped by sender reputation; SendGrid advises separate dedicated IPs for marketing and transactional mail from 250,000 messages a month |
| Dedicated IPs | Dedicated plan: an IP pool of your own with hands-on warmup, custom pricing, up to 120,000 emails an hour and 2,000,000 a day; ask [email protected] | 1 included on Pro and Premier; more for an additional monthly charge |
| Domain authentication | Ownership TXT, DKIM key delegated by CNAME (replaced without DNS changes), include:spf.viesti.email in SPF and a DMARC policy; optional Return-Path CNAME for SPF alignment |
With automated security: a return-path CNAME (em…), two DKIM CNAMEs (s1._domainkey, s2._domainkey) and a DMARC TXT record |
| Open and click tracking | None | Open, click, subscription and Google Analytics tracking settings |
| Webhooks | None; each recipient's outcome is in the dashboard's Activity log | Event Webhook: 1 on the trial, 2 on Essentials, 5 on Pro and Premier |
| Templates | None; send rendered HTML and text | Dynamic templates |
| Inbound email | None | Inbound Parse Webhook |
| Message history | Activity log; message bodies kept 30 days, delivery events 180 days | Searchable activity: 3 days on the trial and Essentials, 7 days on Pro and Premier |
| Team access | One sign-in identity per workspace; no invitations or roles | 1 teammate on Essentials, 1,000 on Pro and Premier; subusers and single sign-on on Pro and Premier |
Choose SendGrid if
- You also run marketing campaigns and want them on the same account, through Marketing Campaigns, which SendGrid sells as a separate plan.
- You need event webhooks, dynamic templates or Inbound Parse.
- You manage many senders or customers and need subusers, single sign-on or many teammates.
- You want a dedicated IP included at 100,000 emails a month.
- Your procurement asks for SOC 2 Type II or EU data residency, both listed on SendGrid's pricing page.
Choose Viesti if
- You need a free plan past 60 days: 75 emails a day and 2,000 a month, with no end date.
- You send up to 50,000 transactional emails a month: $5 on Viesti, $19.95 on Essentials.
- You send messages with several recipients: Viesti counts one email per accepted message with up to 50 recipients, where SendGrid counts each recipient.
- You want your provider to keep marketing mail off your sending IPs.
- Your app already sends over SMTP with the username
apikeyon port 587 or 465: switching is a host and password change.
Migrate from SendGrid to Viesti
1. Create a workspace and an API key
Sign in with GitHub or Google; the first sign-in creates your workspace. Create an API key on the Credentials page and keep it in your secret store, for example as VIESTI_API_KEY. The quickstart walks through the whole setup.
2. Verify your sending domain
Add the domain on the Sending domains page and publish the records it lists (details in DNS records):
- TXT
_viesti.yourdomain.com, which proves ownership. - CNAME
v1._domainkey.yourdomain.com, which delegates DKIM signing todkim.viesti.email. include:spf.viesti.emailin the domain's SPF record. The page shows a merged value that keeps the includes you already publish; a domain must have only one SPF record.- A DMARC record at
_dmarc.yourdomain.com, only if no DMARC policy covers the domain yet. - Optional: CNAME
viesti.yourdomain.comtobounce.viesti.email, so bounces return to your own domain and SPF aligns with DMARC.
SendGrid's em…, s1._domainkey and s2._domainkey records do not clash with Viesti's, whose DKIM selector is v1, so both services can send while you switch.
3. Switch your SMTP settings
Host: smtp.viesti.email
Port: 587 (STARTTLS) or 465 (implicit TLS)
Username: apikey
Password: your Viesti API key
Viesti accepts AUTH PLAIN only, and only after TLS; mail libraries pick it automatically. To try the settings before you deploy, send a test message with curl:
printf 'From: [email protected]\r\nTo: [email protected]\r\nSubject: Viesti test\r\n\r\nSent through Viesti.\r\n' |
curl -sS --ssl-reqd smtp://smtp.viesti.email:587 \
--user "apikey:$VIESTI_API_KEY" \
--mail-from [email protected] --mail-rcpt [email protected] \
--upload-file -
The command prints nothing when Viesti accepts the message, which then shows in the Activity log; a rejected login or recipient prints curl's error. SMTP covers ports, limits and error replies.
SendGrid and Viesti both use the literal username apikey, so only the host and the password change, plus the port if you used 25 or 2525. Remove the X-SMTPAPI header if your app sets one: Viesti does not read it and delivers it to recipients unchanged.
4. Or switch your API calls
SendGrid's v3 Mail Send nests recipients in personalizations and the body in content. Map from.email (with from.name, as "Name <address>") to from, each personalizations[].to[].email to to, and the text/plain and text/html entries of content to text and html. Each personalization becomes its own request.
Viesti's endpoint is POST https://viesti.email/v1/send with Authorization: Bearer $VIESTI_API_KEY and a JSON body of from, to (an array of up to 50 addresses), subject, text and html. It rejects any other field with 400 invalid JSON. For Cc, Bcc, Reply-To, custom headers or attachments, build the MIME message yourself, send it in raw, and list every recipient, Cc and Bcc included, in to. See the HTTP API reference.
5. Replace what Viesti does not do
- Templates: render the message in your app and send the finished HTML and text.
- Webhooks: there are none. The Activity log shows each recipient's outcome, and hard bounces and complaints add the recipient to your suppression list automatically; see bounces and suppressions.
- Open and click tracking: Viesti does not rewrite links or add pixels, so there is nothing to configure or remove.
- Inbound Parse and Marketing Campaigns: keep them on SendGrid or move them to another service; Viesti handles neither.
6. Carry over suppressions
Export the addresses your current provider suppresses (hard bounces, complaints, unsubscribes) and add each one on Viesti's Suppressions page with a reason. The page adds one address at a time. Viesti then refuses mail to those addresses when you submit it.
7. Remove SendGrid's records
Once nothing sends through SendGrid, wait a few days for late bounces, then delete the em…, s1._domainkey and s2._domainkey CNAMEs (or, if you turned automated security off, the MX and TXT records SendGrid listed) and any link-branding CNAMEs. Keep your DMARC record; Viesti checks it.