By Nora Vance · Updated October 7, 2026

SparkPost vs SendGrid: the price table and the plumbing

SparkPost's cheapest listed price undercuts SendGrid's cheapest at every volume where both publish one. Startup is $15 for 50,000 emails and $30 for 100,000, against SendGrid Essentials at $19.95 and $34.95. Growth is $175 for 250,000 emails and $295 for 500,000, against SendGrid Pro at $249 for 300,000 and $499 for 700,000. At 2,500,000 the two come within $60 of each other. SparkPost now publishes its prices under the Bird name, and the page gives each plan a 30-day retention window, an overage rate of $0.90 per thousand and an overage ceiling that pauses sending. This page lines the numbers up and covers the API, webhook and migration differences that the price table hides.

SendGrid pricing page, captured Oct 2026
SendGrid Email API pricing page, hosted on Twilio.com, as of October 7, 2026. Source: Twilio SendGrid. SparkPost's pricing page could not be captured cleanly, so its figures are read from sparkpost.com/pricing.

SparkPost's plan and rate table

PlanVolume and monthly pricePer 1,000Limits
Free1,000 emails, $0None50 a day, 1 webhook endpoint, 1 sending domain, shared IP
Startup50K for $15; 100K for $30$0.301 webhook endpoint, 10 sending domains, shared IP
Growth100K for $80; 250K for $175; 500K for $295; 1M for $530; 2.5M for $1,039$0.80 falling to $0.415610 webhook endpoints, 1,000 sending domains, dedicated IPs as an add-on
Enterprise2.5M and above, negotiatedCustomOverage cap lifted by agreement

Two rules apply across paid plans. Extra sends cost $0.90 per thousand, and the default overage ceiling is five times your plan, after which sends pause unless you agree other terms. Every plan keeps 30 days of retention and limits messages to 20 MB. A dedicated IP costs $24.95 a month each on Growth only, up to five.

Cost at 10,000, 50,000, 100,000 and 250,000 emails

Monthly volumeSparkPostSendGrid
10,000$15 (Startup, sized for 50K); Free covers only 1,000$19.95 floor; no step below 50,000
50,000$15 (Startup)$19.95 (Essentials)
100,000$30 (Startup) or $80 (Growth)$34.95 (Essentials) or $89.95 (Pro)
250,000$175 (Growth)$249 at the 300,000 stop (Pro)

The gaps: at 50,000 emails SparkPost is $19.95 - $15 = $4.95 a month cheaper, and at 100,000 on the entry tiers it is $34.95 - $30 = $4.95 cheaper again. For plans with a dedicated IP, SparkPost Growth at $80 plus one $24.95 IP is $104.95 against SendGrid Pro's $89.95 at 100,000, so SendGrid wins that matchup. At 250,000 the order flips: Growth plus one IP is $175 + $24.95 = $199.95, which is $49.05 under SendGrid Pro's $249 at the 300,000 stop. Per thousand, SparkPost Growth falls from $0.70 at 250,000 to $0.53 at one million, while SendGrid Pro runs $0.83 at 300,000, $0.71 at 700,000 and $0.53 at 1,500,000. Pro at 2,500,000 is $1,099 against Growth's $1,039.

The 10,000 row needs a note. SparkPost's paid tiers start at 50K emails, so a sender with 10,000 a month falls between the Free plan's 1,000 and a $15 plan sized for five times more, as at SendGrid. Neither vendor serves very small senders well on the price list alone.

Retention and the tier that gives it

SparkPost's pricing page puts "30-day retention" on every plan, the free one included, without breaking down which data that covers. SendGrid's feature table is more specific: 3 days of searchable email activity on its trial and Essentials, 7 days on Pro, and a purchasable add-on that reaches 30. If SparkPost's window covers your delivery events, a $15 Startup plan would hold the history that SendGrid sells as an extra, so ask SparkPost support to confirm what is kept before you plan around it.

Sending API: transmissions and idempotency

SparkPost's Transmissions API posts to /api/v1/transmissions with a recipients array, a content object (inline from, subject, html or text, or a stored template) and optional options, metadata and substitution_data. Accounts begin with a sandbox domain that allows five messages over the account's lifetime, and each plan has sandbox, daily and monthly sending limits shown on the dashboard.

The feature worth noting is idempotent retries. Send an Idempotency-Key header of 1 to 255 allowed characters and SparkPost remembers it for 24 hours. A repeat with an identical payload returns the original response instead of sending again. Using the example in the documentation:

Idempotency-Key: 9f8b7c6d-1e2f-4a3b-8c9d-0e1f2a3b4c5d

HTTP/1.1 200 OK
Idempotency-Key: 9f8b7c6d-1e2f-4a3b-8c9d-0e1f2a3b4c5d
X-Idempotent-Replayed: true
{
  "results": {
    "total_rejected_recipients": 0,
    "total_accepted_recipients": 1,
    "id": "11668787484950529"
  }
}

The replay carries X-Idempotent-Replayed: true. If the same key arrives with a different payload, you get a 409 with code 1600; if the first request is still in progress, code 1601. SendGrid's v3 send call, by contrast, takes up to 1,000 personalizations in a single request and offers batch_id to cancel or pause scheduled batches.

Webhooks: batches against signatures

SparkPost's event webhooks arrive as batches. Any batch that does not get a 200 is retried for eight hours before being discarded, each carries an X-MessageSystems-Batch-ID header, and each event has a unique event_id for deduplication. Your endpoint times out after 10 seconds, so SparkPost advises writing the batch to disk and processing it asynchronously. A webhook's auth_type can be none, basic or oauth2. Startup allows one endpoint and Growth ten, against SendGrid's 1, 2 and 5 across its trial, Essentials and Pro.

SendGrid layers an ECDSA signature and OAuth 2.0 on its Event Webhook, as its security guide sets out. SparkPost's page lists basic and OAuth 2.0 authentication but no payload signature, so if you need to prove who sent the request, SendGrid has the stronger answer.

Moving from SendGrid to SparkPost

  1. Add the sending domain and a CNAME-verified bounce domain; SparkPost's reference says the return path must use one. Keep SendGrid's records during the overlap.
  2. Turn each personalizations entry into a recipients entry, with custom_args becoming recipient metadata, which SparkPost passes into webhook events.
  3. Rebuild dynamic templates in SparkPost's template language, which uses double-brace substitutions.
  4. Change the webhook receiver to iterate over a batch, deduplicate on event_id, and answer with 200 inside 10 seconds.
  5. Load bounces and unsubscribes through SparkPost's suppression list API before sending.
  6. If you relied on a SendGrid Pro dedicated IP, add one on Growth at $24.95 and warm it gradually.

Going the other way, recipients become personalizations, metadata becomes custom_args, and you should expect SendGrid's shorter 3 or 7 day activity window.

Which to choose

SparkPost wins on list price from 50,000 emails up and on endpoint count, may win on retention if its 30-day window covers event history, and the idempotency key is useful for queue-driven senders. SendGrid wins where a bundled dedicated IP at $89.95 matters near 100,000, where signed webhooks are a requirement, where teammates and subusers matter, or when you want Marketing Campaigns, whose free plan allows 2,000 contacts and 6,000 emails a month.

Related pages

For SparkPost on its own see SparkPost pricing and SparkPost alternatives. For SendGrid against others read Mailgun vs SendGrid and SendGrid alternatives.

FAQ

Is SparkPost cheaper than SendGrid?

On list price, yes. $15 for 50,000 and $30 for 100,000 against $19.95 and $34.95, and $175 for 250,000 against $249 for 300,000.

What happens if I exceed my SparkPost plan?

Extra emails cost $0.90 per thousand. The default ceiling is five times the plan, and sends pause there unless you agree different terms.

Does SparkPost have a free plan?

Yes, 1,000 emails a month with a 50-a-day cap, one webhook endpoint and one sending domain. SendGrid's Email API gives 100 emails a day for 60 days.

Can I get a dedicated IP on SparkPost?

On Growth only, at $24.95 a month each, up to five. SendGrid Pro includes one.