Analytics
Real-time deliverability.
Streamed live.
Opens, clicks, bounces, spam reports — queryable from a single dashboard and pushed via webhook in <100ms.
Send transactional and marketing emails from a single, modern API. Designed for engineers who care about delivery, design, and analytics.
// Send your first email in 3 lines import { Sendly } from 'sendly'; const sendly = new Sendly('sndy_••••••••'); await sendly.emails.send({ from: 'team@yourdomain.com', to: 'alice@example.com', subject: 'Welcome to Acme', react: <WelcomeEmail name="Alice" />, });
Trusted by engineering teams at
Built for craft
Sendly handles the boring parts so you can focus on the message.
Analytics
Opens, clicks, bounces, spam reports — queryable from a single dashboard and pushed via webhook in <100ms.
Authenticated infrastructure with managed DKIM, SPF, DMARC and per-domain warm-up.
Write emails as React components with type-safe primitives that render the same in every client.
<Email> <Header /> <Button href="…"> Open </Button> </Email>
Node, Bun, Deno, Workers, Edge, Python. Same surface, anywhere.
Send 100 emails per request with full idempotency keys.
Every email retained for 30 days with full trace.
Global infrastructure
A globally distributed network across 14 regions. Your email leaves the edge nearest to your code and reaches the inbox in under 300 ms, anywhere on the planet.
React Email
A free, open-source library of unstyled React components that render consistent HTML across every email client — even the broken ones.
See components →import { Html, Section, Text, Button } from '@sendly/email'; export default function Welcome({ name }) { return ( <Html> <Section> <Text>Hey {name} — glad you're here.</Text> <Button href="https://app.acme.com"> Open Acme </Button> </Section> </Html> ); }
One API. Every primitive.
// Send a single email await sendly.emails.send({ from: 'updates@acme.com', to: 'alice@example.com', reply_to: 'support@acme.com', subject: 'Your weekly digest', react: <Digest week="42" />, tags: [{ name: 'channel', value: 'digest' }], });
// Send up to 100 emails in a single request await sendly.batch.send( recipients.map((user) => ({ from: 'updates@acme.com', to: user.email, subject: `Weekly update for ${user.firstName}`, react: <Digest user={user} />, })), { idempotencyKey: `digest-${weekId}` } );
// Schedule an email to send at a future time await sendly.emails.send({ from: 'team@acme.com', to: 'alice@example.com', subject: 'Trial ending in 3 days', react: <TrialEnding />, scheduled_at: 'in 72 hours', });
// Receive delivery events via webhook app.post('/sendly/webhook', async (req, res) => { const event = sendly.webhooks.verify( req.rawBody, req.headers['sendly-signature'], process.env.WEBHOOK_SECRET, ); if (event.type === 'email.bounced') { await markEmailAsInvalid(event.data.to); } res.json({ received: true }); });
By the numbers
Customers
"We replaced two providers and a fleet of cron jobs with Sendly in an afternoon. Delivery went up, code went down. Easiest migration of the year."
"React Email is the missing piece. Our designers ship templates without touching MJML, and we test them like any other component."
"Webhooks, idempotency keys, audit logs — everything we used to build in-house. Sendly is the email layer we wish we had three years ago."
Pricing
No seats. No per-recipient fees. Pay for the emails you send — that's it.
$0/mo
For side projects and learning.
$20/mo
For startups in production.
Custom
For teams with serious volume.
3 000 emails / month, free forever. No card required.