Solution

Newsletters, without a second vendor.

Build a list, add contacts, and send a broadcast to your whole audience from the dashboard or the API — draft it, schedule it, or send now. Watch delivery progress live and retry only the recipients who failed, from the same domain and quota as your transactional mail.

Why it fits

What you get

Lists and contacts, built in

Create a list, add or import contacts, and target a broadcast at it — no separate marketing-email vendor or contact sync to maintain.

Draft, schedule, or send now

A broadcast is a draft until you're ready — send immediately or schedule it for later, and cancel a scheduled send to edit it right up until it goes out.

Live send progress

Sends drain gradually with a live audience count and status, so you can watch a broadcast go out instead of firing it blind.

Retry only the failures

If some recipients fail, retry just that subset — the rest of the audience isn't re-sent to.

How it works

Three steps to live

  1. 1

    Create a list and add contacts

    Make a list in the dashboard (or via the API) and add contacts one at a time or in bulk.

  2. 2

    Write the broadcast

    Compose the subject and body, pick the list as the audience, and save it as a draft.

  3. 3

    Send now or schedule it

    Send immediately, or schedule a time — watch audience count, delivery status, and failures live once it's sending.

Show me

create and send a broadcast

Lists, contacts, and the broadcast itself are all the same API you already send transactional mail through.

create and send a broadcast
import { MailKite } from "mailkite";

const mk = new MailKite(process.env.MAILKITE_API_KEY);

const list = await mk.createList({ name: "Product updates" });
await mk.addListContacts(list.id, { contactIds: ["ctr_ada…", "ctr_grace…"] });

const broadcast = await mk.createBroadcast({
from: "MyApp <updates@myapp.ai>",
subject: "What shipped this week",
audience: { type: "list", id: list.id },
html: "<p>Three new things landed…</p>",
});

// Pass { scheduledAt } to send it later instead.
await mk.sendBroadcast(broadcast.id, {});
Install Docs →
In the box

What's included

Questions

Is this a replacement for a full marketing-email platform?

It covers lists, contacts, and scheduled or on-demand broadcast sends on your own domain. If you need deep marketing automation (drip campaigns, complex segmentation), evaluate against your specific needs — MailKite's broadcasts are built for straightforward product updates and newsletters.

Does this affect my transactional deliverability?

Broadcasts send from the same domain, so keep your audience opted-in and engaged — that's good practice for any sender. Ask about separated sending streams if you're running high-volume campaigns alongside critical transactional mail.

Can I cancel a scheduled send?

Yes — a scheduled broadcast can be canceled, which returns it to a draft you can edit and reschedule.

Keep reading

Ready to build?

Start free on unlimited domains — no credit card. Or browse the other solutions.