Sendly 2.0 — Now with React Email and waveform analytics
New · React Email is now generally available

Email
for developers.

Send transactional and marketing emails from a single, modern API. Designed for engineers who care about delivery, design, and analytics.

Free up to 3 000 emails / month · No credit card required

send.ts TypeScript
// 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

Everything email,
nothing else.

Sendly handles the boring parts so you can focus on the message.

Analytics

Real-time deliverability.
Streamed live.

Opens, clicks, bounces, spam reports — queryable from a single dashboard and pushed via webhook in <100ms.

Inbox-first delivery

Authenticated infrastructure with managed DKIM, SPF, DMARC and per-domain warm-up.

React Email

Write emails as React components with type-safe primitives that render the same in every client.

<Email>
  <Header />
  <Button href="…">
    Open
  </Button>
</Email>

Edge-ready SDKs

Node, Bun, Deno, Workers, Edge, Python. Same surface, anywhere.

Idempotent batch

Send 100 emails per request with full idempotency keys.

Audit-grade logs

Every email retained for 30 days with full trace.

Global infrastructure

Send from anywhere.
Deliver everywhere.

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.

0 regions
0 % uptime
0 p95 latency

React Email

Design emails the way
you build the rest
of your product.

A free, open-source library of unstyled React components that render consistent HTML across every email client — even the broken ones.

See components
welcome.tsx
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.

From "hello world" to high volume,
with the same call.

send.ts
// 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

Built to scale
past your wildest spike.

0 Emails sent every month
0 Active developers
0 Uptime over 12 months
0 Global edge regions

Customers

Loved by the teams
that ship every day.

"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."
Maya Okafor Staff Engineer, Northstar
"React Email is the missing piece. Our designers ship templates without touching MJML, and we test them like any other component."
Lukas Berg Head of Engineering, Tinto
"Webhooks, idempotency keys, audit logs — everything we used to build in-house. Sendly is the email layer we wish we had three years ago."
Priya Raman CTO, Lattice Health

Pricing

Start free. Scale linearly.

No seats. No per-recipient fees. Pay for the emails you send — that's it.

Hobby

$0/mo

For side projects and learning.

  • 3 000 emails / month
  • 1 sending domain
  • 30 days log retention
  • Community support
Start for free

Scale

Custom

For teams with serious volume.

  • Dedicated IP pools
  • SOC 2 Type II + DPA
  • Audit-grade log retention
  • SLAs & uptime guarantees
  • Shared Slack channel
Talk to sales

Start sending
in minutes.

3 000 emails / month, free forever. No card required.