What each costs at 10,000, 100,000, 500,000 and 1,000,000 emails a month, who owns the sending account, and where Resend is the better buy.
Use sendvia if you already run on AWS, want the sending reputation and the Amazon bill to stay in an account you control, and send enough that a flat monthly fee beats a rate per email. Choose Resend if you write your email in React, if you need a delivery confirmation you can act on rather than an assumption, or if you send little enough that its free tier covers you outright. At the extremes neither answer is close. The middle is what the rest of this page is for.
The two cost the same at 10,000 emails a month. sendvia is cheaper at 100,000, 500,000 and 1,000,000 emails a month.
sendvia is $19.00 a month flat plus Amazon SES at $0.10 per 1,000 emails, billed by Amazon straight to your own account. At 1,000,000 emails that is the flat fee plus $100.00 of SES, and the flat half of it is the half that never moves.
| Emails per month | sendvia | Resend | Postmark | Mailgun | SendGrid | Raw SES |
|---|---|---|---|---|---|---|
| 10,000 | $20.00$19.00 + $1.00 SES | $20.00 | $15.00 | $15.00 | Not publishedSendGrid does not print a price against a send volume. See their pricing page. | $1.00 |
| 100,000 | $29.00$19.00 + $10.00 SES | $35.00 | $126.00Based on Postmark's Platform plan at $18.00 plus their published $1.20 per additional 1,000. | $90.00 | Not publishedSendGrid does not print a price against a send volume. See their pricing page. | $10.00 |
| 500,000 | $69.00$19.00 + $50.00 SES | $350.00 | $606.00Based on Postmark's Platform plan at $18.00 plus their published $1.20 per additional 1,000. | $530.00At least $530.00. Computed from Mailgun's published $1.10 per additional 1,000 above 100,000 emails, staying on their $90.00 tier. That rate is published as a "from" price, so treat this as a lower bound. | Not publishedSendGrid does not print a price against a send volume. See their pricing page. | $50.00 |
| 1,000,000 | $119.00$19.00 + $100.00 SES | $650.00 | $1,206.00Based on Postmark's Platform plan at $18.00 plus their published $1.20 per additional 1,000. | $1,080.00At least $1,080.00. Computed from Mailgun's published $1.10 per additional 1,000 above 100,000 emails, staying on their $90.00 tier. That rate is published as a "from" price, so treat this as a lower bound. | Not publishedSendGrid does not print a price against a send volume. See their pricing page. | $100.00 |
| Prices verified . Each figure is the cheapest route worked out from what a provider actually publishes. Some are a quoted plan price; others are computed from a published rate for extra emails, and a note beside those says so. sendvia cost is a flat $19 plus Amazon SES at cost. | ||||||
Where a cell says a figure is computed, it is worked out from that provider's own published rate for extra emails on the cheapest plan that can carry the volume, not quoted from a price list. The other three rivals are in the table on purpose: somebody weighing up two of these is usually weighing up more than two, and hiding the rest would make this page less useful rather than more focused.
Every cell below carries the page it was read from and the date it was read. Where a plain yes or no would mislead, the cell says what the difference actually is instead of rounding it.
| Feature | Resend | sendvia |
|---|---|---|
| Infrastructure | ||
| You own the AWS account | NoMail leaves through Resend infrastructure, and Resend holds the sending reputation.Source | YesYour AWS account, your IAM user, revocable by you at any time. |
| DNS setup | ManualYou copy the DKIM and SPF records to your DNS provider yourself. No registrar integration is documented.Source | Generated and monitoredsendvia builds the DKIM, SPF, MAIL FROM MX on bounce.yourdomain.com, DMARC and BIMI records, then watches them afterwards. You still add them at your DNS host. |
| Sending domains included | 3 to 1,0003 domains on the free plan, 10 on Pro, 1,000 on Scale.Source | 1 to 101 on the free plan, 10 on the paid plan. Both figures are PLAN_*_DOMAIN_LIMIT in app/config.php, not a copy of it. |
| Features | ||
| REST API and SMTP | BothSMTP on smtp.resend.com, username "resend", the API key as the password. The old table said API only, which was wrong.Source | BothThe same credentials drive the REST API and the SMTP relay. |
| Newsletters and mailing lists | BroadcastsBulk marketing sends to a stored audience, with queuing, throttling and scheduling handled by Resend. The old table said No, which was wrong.Source | IncludedLists, newsletters and sends are part of the flat fee, not an add-on. |
| Contact segments | YesSegments are groups of contacts within an audience, and a broadcast is sent to a segment.Source | Rule-basedSegments are built from rules over contact fields and engagement. |
| CSV import and subscribers | Yes, up to 200MBCSV import through the dashboard or the contacts import API.Source | YesCSV upload, with column mapping for exports from other tools. |
| Webhook events | Sent, delivered, bounced, opened, clicked and moreIncluding email.delivered, a real confirmation from the receiving server, plus contact, domain and suppression events.Source | Bounce, complaint, delay, rejectNo delivery event. sendvia leaves DELIVERY out of its SES subscription because the volume stalled the site, so delivered status is inferred from the absence of a failure two minutes after sending. All four rivals receive a real delivery confirmation and sendvia does not. |
| Scheduled sending | Yes, up to 30 daysscheduled_at accepts natural language or an ISO 8601 timestamp.Source | Yes, up to 72 hourssend_at on the API. The ceiling is SCHEDULED_MAX_HOURS in app/config.php, read here rather than repeated. |
| Open and click tracking | Both, off by defaultDisabled for all domains until you enable it and verify a tracking subdomain.Source | Both, with countryOpens and clicks, with the country resolved from the opening address. |
| One-click resend | Not recordedNot recorded either way. The dashboard documentation lists viewing, sharing and log actions on a sent email and describes no resend action, but absence from one page is not a statement that the feature is missing.Source | YesResend any logged message from the log, blocklist-aware. |
| Log retention | 30 days30 days on Free, Pro and Scale alike, so the range is a single figure. The old table said 3 to 72 hours.Source | 7 to 90 days7 days on the free plan, 90 days on the paid plan, from LOG_RETENTION_*_DAYS in app/config.php. Message bodies are nulled out at half the retention period, before the row itself is deleted. |
| Compliance and deliverability | ||
| BIMI and DMARC monitoring | Setup guidance onlyResend documents how to publish DMARC and BIMI records and points at an outside checker. It does not monitor them for you.Source | Yes, per domainDKIM, SPF, DMARC policy and BIMI are checked per domain and reported on the domain page. |
| RFC 8058 one-click unsubscribe | Yes, on BroadcastsList-Unsubscribe and List-Unsubscribe-Post are added automatically to Broadcasts with no action from you.Source | YesList-Unsubscribe and List-Unsubscribe-Post are added to every newsletter send. |
| Auto blocklist for bounces and complaints | YesA hard bounce or a spam complaint puts the address on the suppression list, and later sends to it are suppressed.Source | YesBounces and complaints from the SNS webhook go straight onto the blocklist. |
| Two-factor authentication | YesMulti-factor authentication with an authenticator app, enabled from your profile.Source | YesTime-based codes from an authenticator app. |
| Resend figures were read from Resend's own documentation on . The sendvia column is read from the code that implements each row rather than from a marketing page. Where a value would mislead as a yes or a no, the cell says what the difference actually is. | ||
sendvia sends through an IAM user in your own AWS account. Amazon meters the mail and bills you for it directly, the SES sending identity is yours, and the addresses it leaves from are Amazon's shared SES pool unless you pay Amazon for a dedicated one. Revoke the key and sending stops the same minute, with the verified domains, the DNS records and the bounce history still sitting where they were.
Resend is the other arrangement, and it is the ordinary one. You point a domain at Resend, the mail leaves Resend's servers, and the reputation those servers carry belongs to Resend rather than to you. That is not automatically the worse deal, because whoever owns a pool also polices it and there is somebody whose job is to keep it clean.
What it costs you sits in the DNS setup row above: records added by hand at whatever host holds your domain, with no registrar integration documented, and a second subdomain to verify before opens and clicks are counted at all, since that counting is switched off for every domain until you turn it on. None of it is difficult. It is simply a different set of things to own.
The trade runs both ways, and ours costs you something. You set up the AWS account, you create the IAM user, and a new SES account starts inside Amazon's sandbox, capped at 200 emails a day to verified recipients, until Amazon grants production access.
Resend publishes SMTP settings of its own at smtp.resend.com. sendvia runs a relay on smtp.sendvia.io, port 587, with 2525 as a fallback for networks that block it, and your API key is the password.
| Detail | Resend | sendvia |
|---|---|---|
| Send API | REST API | REST API |
| SMTP relay | Yes, smtp.resend.com on 25, 465, 587, 2465 or 2587 | Yes, an SMTP relay on 587 with 2525 as a fallback |
| The Resend column was read from resend.com on . The sendvia column comes from sendvia_profile() in app/data/competitors.php, which is sourced to the code that implements each answer rather than to a marketing page, and reads any plan figure in it straight out of app/config.php. | ||
Both are a single POST. Resend takes the same four fields at POST https://api.resend.com/emails, with the API key as a bearer token and the recipients as an array.
curl -X POST https://api.sendvia.io/v1/send \
-H "Authorization: Bearer sv_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"from": "[email protected]",
"to": "[email protected]",
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>"
}'
Read from app/api.php on .
curl -X POST https://api.resend.com/emails \
-H "Authorization: Bearer re_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"from": "[email protected]",
"to": ["[email protected]"],
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>"
}'
Read from resend.com on .
Both answer with JSON and both report a result per recipient. A successful sendvia call comes back as {"success":true,"total":1,"sent":1,"failed":0} plus a results array.
The reply that surprises a reader arriving from a provider which owns the sending account is the 422. sendvia refuses a from-address on a domain it has not verified inside your own SES account, because it has no sending identity of its own to fall back on. Verify the domain and the same call goes through.
# 422 {"error":"The domain \"yourdomain.com\" has not been verified. Add and verify it in the dashboard first."}
The relay takes the same credentials, so the same tool drives it:
curl --url smtp://smtp.sendvia.io:587 \
--user "sendvia:sv_live_your_api_key" \
--mail-from [email protected] \
--mail-rcpt [email protected] \
--upload-file receipt.eml
sendvia keeps 7 days of send logs on the free plan and 90 on the paid one, and nulls the stored message body at half the retention period before the row itself is deleted. What it records against a message is a bounce, a complaint, a delivery delay or a rejection, published by SES to an SNS topic in your own account.
Delivery is not on that list, and it is the row to read carefully. sendvia leaves DELIVERY out of its SES subscription because subscribing to it flooded the webhook and stalled the site, so a message with no failure recorded against it two minutes after sending is marked delivered. That is an inference drawn from silence. Resend, Postmark, Mailgun and SendGrid all receive a real delivery event from their own systems, and sendvia does not.
Retention is the row where the table above rewards a close read. Every provider prices it differently, and each cell gives the low and the high across everything that provider publishes rather than the flattering end of either.
sendvia stores contacts, builds segments from rules over their fields and their engagement, imports a CSV with column mapping for exports out of other tools, and sends a newsletter to a list on the same flat fee as the transactional mail. List-Unsubscribe and List-Unsubscribe-Post go on every newsletter send, so the one-click unsubscribe Gmail and Yahoo ask for is there without you configuring it.
Resend calls its equivalent Broadcasts, and a Broadcast is sent to a segment of a stored audience. The table above records what each side holds. The difference that matters here is not capability but where the list lives: on sendvia the contacts sit in the same account as the sending domain and the send log, and there is no separate marketing plan to buy.
These come out of the same data file the table above does, and each one links to the page it was checked against.
| Detail | Resend | sendvia |
|---|---|---|
| Best for | A React or Next.js team that wants to write email as components, and anyone under 3,000 emails a month who would rather pay nothing at all. | A team that already runs AWS, sends enough that a flat platform fee beats per-email pricing, and wants the sending reputation, the logs and the bill to stay in an account it controls. |
| The Resend column was read from resend.com on . The sendvia column comes from sendvia_profile() in app/data/competitors.php, which is sourced to the code that implements each answer rather than to a marketing page, and reads any plan figure in it straight out of app/config.php. | ||
Neither line is a slogan. If the one on the left describes you better than the one on the right, the rest of this page is a set of details you do not need.
Yes, and most of the work is on the Amazon side rather than in sendvia. You need an AWS account, an IAM user allowed to use SES and SNS, and production access, which Amazon reviews and usually grants within 12 to 24 hours. After that you verify a sending domain, publish the records sendvia generates for it, and import your contacts.
Check what is missing before you start rather than after: there is no dedicated IP option, no inbound email or parsing, no teams or sub-accounts and no official SDKs. If one of those rules sendvia out for you, it rules it out, and better to find that here.
Run both in parallel before you cut over. Send the same traffic through each for a week, compare what lands, and keep the old key alive until you are satisfied. Migrate from Resend to sendvia walks through every one of those steps in order: the AWS setup is the slow part, and everything after it is an afternoon.