← Back to all posts
2026-07-24 · MailAnvil Team

SendGrid Free Tier Is Gone — Migrate to MailAnvil and Save 60% for Your Indonesian Startup

July 24, 2026 · Ferry Setyawan · 6 min read Category: Migration Guide Target: Indonesian SaaS developers currently on SendGrid/Resend looking to cut email costs


SendGrid killed its free tier. The new entry point: $19.95/month. For an Indonesian startup sending 10,000 emails a month, that's Rp 330,000 — before the rupiah exchange rate eats another 3-5%.

Your options: pay it, switch to Resend, or move to something built for Indonesia. This guide covers option three.

The Real Cost of SendGrid for Indonesian Devs

Let's do the math. Indonesian SaaS startup with 2,000 users, sending:

Email type Volume/month
Welcome + verification 2,000
Password resets 500
Notification digests 5,000
Invoice receipts 2,500
Total 10,000

At SendGrid's $19.95/mo Essentials plan (50K emails):

Cost
SendGrid Essentials $19.95/mo
Credit card FX markup (~3%) +$0.60
IDR equivalent ~Rp 340,000/mo

Same volume on MailAnvil:

Cost
MailAnvil Startup plan (50K emails) Rp 149,000/mo
Pay with GoPay/QRIS No FX markup
Total Rp 149,000/mo

Savings: 56%. At 100K emails/month the gap widens — MailAnvil Rp 249,000 vs SendGrid ~Rp 600,000+ (savings: 59%).

Step 1: Sign Up (60 Seconds)

curl -X POST https://api.mailanvil.com/v1/signup \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "password": "your-secure-password"}'

Response:

{
  "api_key": "ma_live_01j...",
  "plan": "free",
  "daily_quota": 10
}

Free tier: 500 emails/month. Verify your domain to unlock 1,000/month. No credit card needed. Pay later with QRIS or GoPay when you upgrade.

Step 2: Verify Your Domain (3 Minutes)

curl -X POST https://api.mailanvil.com/v1/domains \
  -H "Authorization: Bearer ma_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"domain": "yourstartup.id"}'

Returns DNS records. If you're on Cloudflare DNS, MailAnvil auto-detects and can verify in under 60 seconds. No manual TXT record hunting.

Step 3: Swap the API Call

Before (SendGrid — Node.js)

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

await sgMail.send({
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Welcome!',
  html: '<h1>Welcome to YourStartup</h1>',
});

After (MailAnvil — drop-in replacement)

const MAILANVIL_KEY = process.env.MAILANVIL_API_KEY;

await fetch('https://api.mailanvil.com/v1/send', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${MAILANVIL_KEY}`,
  },
  body: JSON.stringify({
    from: '[email protected]',
    to: ['[email protected]'],
    subject: 'Welcome!',
    html: '<h1>Welcome to YourStartup</h1>',
  }),
});

No SDK required. Standard REST API. The from, to, subject, html fields map 1:1. Response format is predictable JSON with an id and status field.

Python

# Before: SendGrid
import sendgrid
sg = sendgrid.SendGridAPIClient(os.environ['SENDGRID_API_KEY'])
sg.send({
    "to": [{"email": "[email protected]"}],
    "from": {"email": "[email protected]"},
    "subject": "Welcome!",
    "html_content": "<h1>Welcome</h1>",
})

# After: MailAnvil
import requests
requests.post("https://api.mailanvil.com/v1/send",
    headers={"Authorization": f"Bearer {os.environ['MAILANVIL_API_KEY']}"},
    json={
        "from": "[email protected]",
        "to": ["[email protected]"],
        "subject": "Welcome!",
        "html": "<h1>Welcome</h1>",
    })

PHP (Laravel)

// Before: SendGrid
\Mail::to($user)->send(new WelcomeEmail($user));

// After: MailAnvil — swap MAIL_MAILER in .env
// MAIL_MAILER=mailanvil
// MAILANVIL_API_KEY=ma_live_xxx

Step 4: Migrate Your Templates

SendGrid dynamic templates use {{handlebars}}. MailAnvil uses simple {{variable}} syntax:

SendGrid MailAnvil
{{user.name}} {{name}}
{{order.total}} {{total}}
{{#each items}} Not needed (pass pre-rendered HTML)

For most transactional emails, you're already generating HTML server-side. No template migration needed — just pass the same HTML.

If you use SendGrid's template editor, export your templates as HTML and use them directly:

# Export template from SendGrid dashboard
# Paste HTML into your codebase
# Replace {{handlebars}} with your template engine's syntax

Step 5: Set Up Webhooks

SendGrid Event Webhook → MailAnvil Webhooks:

# Register webhook endpoint
curl -X POST https://api.mailanvil.com/v1/webhooks \
  -H "Authorization: Bearer ma_live_xxx" \
  -d '{
    "url": "https://yourstartup.id/api/webhooks/email",
    "events": ["delivered", "bounced", "complained", "opened", "clicked"]
  }'

Event payloads follow the same pattern. Your existing webhook handler needs minimal changes:

// SendGrid: req.body[0].event === 'delivered'
// MailAnvil: req.body.event === 'delivered'

app.post('/api/webhooks/email', (req, res) => {
  const { event, email_id, recipient, timestamp } = req.body;

  switch (event) {
    case 'delivered':  /* update delivery status */
    case 'bounced':    /* flag for suppression */
    case 'complained': /* handle spam report */
    case 'opened':     /* track engagement */
  }

  res.status(200).send('ok');
});

Why Indonesian Startups Are Switching

1. Pay with QRIS or GoPay

No credit card. No FX fees. Pay in rupiah from your BCA, Mandiri, BNI, or GoPay balance. This alone eliminates the #1 friction for Indonesian indie developers and small startups.

2. Jakarta Edge Latency

MailAnvil runs on Cloudflare Workers with edge nodes in Jakarta. API round trips: ~80ms vs ~400ms to us-east-1. For OTP emails and password resets where every second counts, this matters.

3. Bahasa Indonesia Everything

Documentation, error messages, and support in Bahasa Indonesia. kirim email not send email. Your team doesn't need to translate API docs.

4. MCP-Native for AI Agents

Claude, Cursor, Copilot — any AI coding agent with MCP support discovers MailAnvil's endpoints automatically. Your AI builds the email integration for you. First email API with native MCP server.

5. Built on Cloudflare Workers

Same infrastructure that powers 20% of the internet. No single-region outages. Automatic failover. Zero cold starts.

Migration Checklist


Switch today. First 500 emails free. Pay with GoPay.

mailanvil.com · docs.mailanvil.com · github.com/richaferry/mailanvil