Skip to main content

Command Palette

Search for a command to run...

Which platform is best for newsletters?

A developer's checklist for picking a newsletter platform: APIs, webhooks, DNS authentication, exports and fees across eight tools.

Updated
•19 min read•View as Markdown

There isn't one best newsletter platform, but there is a sensible default for each kind of builder. If you want to own the stack, pick Ghost (MIT-licensed, self-hosted or hosted) for a publication, or listmonk for plain list mail sent through your own SMTP provider. If you want a hosted tool with a documented API and signed webhooks, Kit, beehiiv and Buttondown all qualify, and Buttondown pairs that with a Markdown editor. If you only want to write and get paid, Substack takes a flat 10% (plus card fees) and asks you to configure almost nothing. VeloCMS fits a narrower case, covered near the end along with the cases where it's the wrong pick.

Last verified: 2026-10-13. Every price, limit and fee below was read from the vendor's own page that day, in USD. Prices drift, so recheck before you buy.

What should a developer check before picking a newsletter platform?

Most comparison posts rank editors and templates. The editor is where you'll spend each issue, but it's rarely where a platform wins or loses. What hurts later is plumbing: can you add a subscriber from your own backend, can you hear about a bounce, can you leave.

Here's the checklist I'd run, in order:

  • Write path: an API that creates subscribers (and ideally broadcasts), with keys you can rotate.
  • Read path: signed webhooks for signups, unsubscribes, bounces and complaints.
  • Sending identity: a custom sending domain with SPF and DKIM, and a DMARC record you control.
  • Unsubscribe: RFC 8058 one-click headers, not just a footer link.
  • Portability: a CSV export, a tolerant import, and content you can walk away with.
  • Embedding: a signup form that works on a static site or a Next.js page.
  • Money: what the platform takes from paid subscriptions, and which tier unlocks them.
  • Hosting: whether you can run it yourself, and what you'd still have to buy.

None of this is exotic. It's just invisible on a pricing page, which is how people find out late.

Which platforms give you a real API and webhooks?

Most of the eight give you both in a form I'd build on, a couple give you only half, and one I can't vouch for from public pages.

Ghost's Content API is read-only and meant for rendering your site elsewhere; its documentation says keys travel as a query parameter and are safe in a browser because they only expose public data. Webhooks fire for posts, pages, tags and members (member.added, member.edited, member.deleted). On Ghost(Pro), the Admin API, webhooks and custom integrations start at the Publisher plan (pricing).

Kit's v4 API takes an X-Kit-Api-Key header or OAuth 2.0. API keys are limited to 120 requests per rolling 60 seconds, OAuth to 600, and Kit says it doesn't officially support public integrations built on keys (authentication). Webhooks cover subscriber events (created, unsubscribed, bounced, complained, tag added) and broadcast.sent, with signatures and retries documented (event types).

beehiiv exposes subscriptions, bulk subscription creation and posts, plus webhooks for subscriptions and for posts sent, scheduled and updated (docs index). Rate limits scale by plan: 30 requests a minute on Free, 180 on Lite, 500 on Pro (rate limiting). Webhook deliveries are signed (Svix headers), but beehiiv's docs say webhooks are only available on the Lite plan and above (webhooks), so don't assume them on Free.

Buttondown documents an API that can send emails, and webhooks you can sign: with a signing key set, each request carries X-Buttondown-Signature: sha256=<hmac> over the raw body (webhooks). The pages I read don't say which plan includes the API, so ask before designing around it.

MailerLite uses Bearer-token keys with a global limit of 120 requests per minute, and 5 per minute on import creation (API docs). Its webhooks include subscriber.created, subscriber.unsubscribed, subscriber.bounced and campaign.sent, with an HMAC SHA-256 signature (webhooks). On Free, the pricing page marks API access and webhooks as limited, and the API as without sending.

listmonk's docs say every feature on the dashboard is also available over a JSON HTTP API, with API users whose access is governed by roles and per-list permissions (API docs). It also has a public subscription endpoint and inbound bounce webhooks for SES, SendGrid, Postmark and others. I didn't confirm outbound subscriber-event webhooks, so check before you plan around them.

VeloCMS has a versioned REST API at /api/v1 on Pro and up, with scoped Bearer keys, but no subscriber or newsletter endpoints; subscribers show up only as webhook events (subscriber.added, subscriber.removed) (REST API docs). Substack is the one I can't vouch for. It publishes Developer API terms that describe public creator and publication data such as names, subscriber counts and URLs (API terms), and I found no webhook documentation or subscriber-management endpoints. The key documentation it links to returned a 403 for me, so treat anything beyond that as unknown rather than absent.

How do you set up SPF, DKIM and DMARC for a newsletter?

You'll do this once per sending domain, and the vendor will hand you the records. The part worth understanding is why, because Gmail and Yahoo stopped treating authentication as optional.

Google's sender guidelines say that, effective February 1, 2024, all senders need SPF or DKIM, valid forward and reverse DNS, TLS and a spam rate under 0.3% in Postmaster Tools (Google recommends staying under 0.10%). At 5,000 or more messages a day to Gmail you need SPF and DKIM and DMARC, the From domain must align with the SPF or DKIM domain, and marketing mail must support one-click unsubscribe plus a visible link in the body. The DMARC policy can be none. Google recommends 2048-bit DKIM keys if your provider supports them.

Yahoo's requirements are close: bulk senders need both SPF and DKIM, DMARC at p=none or stricter, and a one-click List-Unsubscribe header. Yahoo's page adds a number: honor unsubscribes within 2 days.

In DNS that's three records on a subdomain dedicated to mail, such as news.example.com, which keeps a bad send away from your normal mailbox reputation. Names below are placeholders.

; SPF: which servers may send for this domain
news.example.com.                    TXT    "v=spf1 include:_spf.provider.example ~all"

; DKIM: public key the provider signs with (selector comes from the provider)
sel1._domainkey.news.example.com.    CNAME  sel1.dkim.provider.example.

; DMARC: policy and where aggregate reports go
_dmarc.news.example.com.             TXT    "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

Two traps. SPF evaluation is capped at 10 DNS-querying terms (include, a, mx, ptr, exists, redirect), and going over is a permanent error per RFC 7208; an include for every tool you've ever tried is how people hit it. And alignment matters more than a bare pass: DMARC needs SPF or DKIM to pass and match your From domain, so mail signed only with the provider's domain still fails.

Then one-click unsubscribe. RFC 8058 defines List-Unsubscribe carrying an HTTPS URI, and List-Unsubscribe-Post: List-Unsubscribe=One-Click. Receivers send an HTTPS POST with no cookies or authorization, so the URL must identify recipient and list by itself, and you must not answer with a redirect. Both headers must be covered by a valid DKIM signature, or receivers shouldn't offer one-click at all. If you run your own sender, read a delivered message's raw headers to confirm.

Can you take your subscribers with you?

Mostly yes. A CSV of emails is the floor; what doesn't travel is paid state, tags, engagement history and sending reputation.

Substack lets you click Export in the subscribers dashboard for a CSV, filtered or not, and notes that the data is about half an hour old (guide). listmonk imports through POST /api/import/subscribers with a CSV (optionally zipped), a delimiter, a subscribe or blocklist mode and an overwrite flag (import API); it's your Postgres database, so export is a query. Kit and beehiiv both have bulk subscriber creation endpoints, the programmatic way in.

VeloCMS imports CSV with a required email column and optional name and tags, up to 10,000 rows per import with duplicates skipped, and exports email, name, tier, status, tags and sign-up date (docs). Its homepage says content imports from a Substack export ZIP, Ghost JSON, WordPress XML and a Medium archive (among others) were tested (homepage), and posts export as Markdown with YAML front matter (for developers).

The test I'd run on any vendor: export, re-import into a scratch tool, compare counts. Do it while the list is still small.

How do you embed a signup form on your own site?

You have three real options: a vendor embed script, a plain HTML form posting to the vendor, or your own endpoint calling the vendor's API server-side. Many developers prefer the last, because it allows bot checks and keeps keys out of the browser.

Kit's create-subscriber call is an upsert (POST https://api.kit.com/v4/subscribers, email_address required) returning 201 for new addresses and 200 for existing ones (docs). listmonk's public subscription endpoint accepts form-encoded or JSON bodies with email and list_uuids (API), so a plain HTML form can post to it, though the page doesn't say whether credentials are required. beehiiv's create-subscription endpoint takes a Bearer API key or OAuth token (scope subscriptions:write), which puts it in the server-side camp.

Ghost's Content API is read-only, so on a headless site check how you'd create members before committing. VeloCMS's docs describe a public subscribe form powered by whichever integration you connect (Kit, beehiiv or Mailchimp), and don't describe an embeddable snippet, so I won't claim one.

What does a paid subscription actually cost you in fees?

The platform cut is one line. Stripe's processing fee sits on top, and the tier that unlocks paid subscriptions may cost extra.

  • Substack: "Writers keep 90% of their revenue minus credit card fees," so 10% plus card fees (going paid).
  • beehiiv: 0% take rate on Lite and up; Free has no paid subscriptions (pricing).
  • Ghost: 0% Ghost transaction fees on Publisher and up; Starter has no paid subscriptions (pricing).
  • Buttondown: paid subscriptions are a +$9/month add-on (pricing), and the docs say you keep "all of the money you make" with Stripe collecting (docs).
  • Kit: the free plan lists selling subscriptions, but the pricing page states its commerce fee in two places that don't reconcile, so I'm leaving a number out. Read the fee terms first.
  • VeloCMS: no platform cut on reader payments; it's bring-your-own-Stripe, and Stripe's processing fees still apply (docs).
  • MailerLite and listmonk: I found no stated percentage for MailerLite, and the listmonk pages I read don't mention paid subscriptions, so assume you'd build that yourself.

The sneaky part is the tier gate. Ghost Starter and beehiiv Free are cheap because they leave money features out, so price the plan you'd actually need for paid readers.

How do the eight platforms compare one by one?

Ordered by how developer-friendly the surface is, not by price. VeloCMS sits near the end on purpose.

Ghost

Ghost is the strongest answer when the newsletter is also a publication and you care about open source. The code is MIT-licensed (GitHub). Self-hosting means Ubuntu LTS, Node 22, MySQL 8, NGINX and at least 1 GB of memory (hosting docs). Ghost(Pro) is $18 a month for Starter (1 staff user, 1,000 members, 1 newsletter) and $29 for Publisher (3 staff, 3 newsletters), billed yearly, with unlimited sends on every plan; the limit is on separate newsletters, not messages.

The catch is bulk mail. Ghost's docs say the only bulk mail API it supports is Mailgun and SMTP can't deliver newsletters (FAQ). Transactional mail can use any SMTP service, but newsletters are a Mailgun commitment, and the hosting page says self-hosters pay for their own delivery. Custom sending domains with DKIM and SPF start at Publisher. Starter is the weak spot: no Admin API, no webhooks, no paid subscriptions.

Buttondown

Buttondown is the closest thing here to a developer's newsletter tool. The base tier is free for your first 100 subscribers and includes a rich-text or Markdown editor, sending from a custom domain and hosted archives. Everything else is an add-on: +\(9 a month each for segmentation, paid subscriptions, comments, analytics, RSS-to-email and sponsorships; +\)29 for archives on a custom domain, multiple newsletters and automations; +$79 for whitelabeling and teams (pricing).

That model is both its charm and its trap. You pay only for what you use, but a list needing segmentation, paid tiers and automations adds up in a way a flat plan wouldn't. The per-subscriber price after the first 100 sits behind a slider I couldn't read, so check it at your list size. Pricing also assumes at most one email a day to the whole list.

listmonk

listmonk is free, open source (AGPLv3), written in Go, and ships as a single binary or Docker image whose only dependency is Postgres 12 or later (install). Campaigns can be built in a drag-and-drop builder, WYSIWYG, Markdown, raw HTML or plain text, templated with Go templates and sent through multiple SMTP queues with rate limiting. Pair it with SES, Postmark or any SMTP service.

You are the ops team. Bounce handling needs configuring: a POP3 mailbox, or SES, SendGrid or Postmark webhooks pointed at /webhooks/service/<provider> (bounces). Deliverability, DNS authentication and the Gmail and Yahoo rules are yours. I couldn't confirm from public pages whether it emits RFC 8058 headers, so test that on your own install. For a developer who wants a list without a per-subscriber bill, it's excellent; for a writer who wants to charge readers, it isn't.

beehiiv

beehiiv has a real free tier: up to 2,500 subscribers, unlimited sends, one publication and an API. Lite starts at $49 a month on yearly billing (priced for 1,000 subscribers) and adds paid subscriptions at a 0% take rate, webhooks, automations and ad monetization. Pro starts at $95 and adds branding removal, the Send API and priority support. A subscriber slider drives the price, so the card number is the entry point, not what you'll pay at 25,000.

The strengths are growth tooling and an API covering subscriptions and posts. The pinches are tiering: branding stays until Pro, webhooks need a paid plan, the Send API sits at Pro, and Free's 30-requests-a-minute limit makes bulk jobs slow. Model your list size on the slider before committing.

Kit

Kit (formerly ConvertKit) has the most generous free plan I verified: up to 10,000 subscribers, unlimited landing pages, forms and broadcasts, segmentation, and selling digital products and subscriptions, with Kit branding on. Creator is $33 a month billed yearly ($390) as shown for 1,000 subscribers, adding visual automations, sequences and branding removal. Pro is \(66 a month billed yearly, with a limited-time first-year price of \)50 on the page. Paid plans have a 14-day trial without a card.

For developers the v4 API and documented webhooks are real strengths. The pinches: key-based access has a modest ceiling, bulk endpoints require OAuth, and a custom tracking domain is Pro-only. The pricing page doesn't mention a custom sending domain, so confirm your authentication setup with support.

Substack

Substack is the lowest-friction option for a writer. Its going-paid page promises a 90% revenue share minus card fees and "zero tech knowledge required." You get an editor, a hosted site and payments with nothing to wire up, plus a CSV export of your list.

The developer view is thinner. The only official API I found covers public creator and publication data, with no documented webhooks or subscriber endpoints, so integrating subscribers with your own backend may mean CSV exports and manual steps. Its pitch is that you don't touch infrastructure, which also means you don't get to. The 10% cut is simple, and at higher revenue it can cost more than a flat monthly plan from a platform taking 0%.

MailerLite

MailerLite is the conventional email service provider here. Free covers 250 subscribers and 2,500 monthly emails, with limited API and no sending through it. Paid plans start at $12 a month for Comfort and $25 for Power, and Power lists unlimited monthly emails under fair use. Paid plans list full API and MCP access.

It's sound if you want a standard email tool with automations and a documented API. The tradeoffs: the pricing page gave me no paid-subscription fee to quote, and its comparison table didn't let me confirm custom-domain authentication per plan. Check both.

VeloCMS

VeloCMS is a hosted blog CMS with a newsletter built in, so it fits best when you're really choosing a blog platform that also sends. There's no free plan; every plan starts with a 14-day trial, you add a card up front, and you're charged on day 15 unless you cancel. Pro is $9 a month ($86.40 yearly) with 5,000 subscribers and 10,000 API calls a day. Business is $29 with 50,000 subscribers, 100,000 API calls a day and a custom sender domain. Agency is $69.

The admin gives you campaigns with audiences (all, free members, paid members or tags), scheduling, open and click stats, a welcome-style automation, double opt-in, a signed unsubscribe link and a "Send to subscribers" toggle on posts (docs). Delivery is managed, so there are no SMTP credentials to look after, and the docs describe no way to bring your own sending provider.

Who is each option best for?

  • Ghost: the newsletter is a publication, you want open source, and you'll pay for Mailgun or Ghost(Pro).
  • Buttondown: a technical writer who wants Markdown, a custom domain and an API, and doesn't mind add-ons.
  • listmonk: you already run servers, want no per-subscriber bill and will own deliverability.
  • beehiiv: a growth-minded creator who wants monetization tooling and accepts that branding removal and the Send API sit at Pro.
  • Kit: a creator who wants a big free tier, a mature API and webhooks, and sells digital products.
  • Substack: a writer who wants to publish and charge today and never touch DNS.
  • MailerLite: a small business wanting a conventional ESP with automations on a modest budget.
  • VeloCMS: you want blog, members and newsletter in one admin login, plus a REST API for content, and can live with the limits below.

When is VeloCMS the wrong choice?

Quite often, honestly. Pick something else if any of these is true.

You need to manage subscribers by API. The REST API covers posts, media, comments, members (email masked) and site settings, but not subscribers or newsletters. Kit, beehiiv, listmonk or Buttondown fit better.

You want to own the sending stack. There's no self-hosted core, no source access and no documented way to plug in your own SMTP or ESP for campaigns. Ghost or listmonk is the answer.

You need advanced automation. The docs describe automations as lifecycle emails like a welcome message and don't document branching sequences. Kit and beehiiv are further along.

You need a headless setup. VeloCMS is a full-stack blog platform with its own front end rather than a backend for a Next.js site you've already built, even though the REST API can read and write content.

You send at Gmail-bulk volume and need proof of RFC 8058 headers. I couldn't find them documented, so ask support first. Custom sender domains also start at Business, not Pro.

And it's young: a smaller ecosystem and a shorter public track record than Ghost or Substack, and third-party plugin development isn't open to outside developers today.

FAQ

Is there a free newsletter platform?

Several have a free tier: beehiiv up to 2,500 subscribers, Kit up to 10,000, MailerLite 250 subscribers and 2,500 emails a month, and Buttondown's first 100 subscribers. listmonk is free software, but you pay for hosting and SMTP. VeloCMS has no free plan, only the 14-day trial.

Do Gmail's rules apply under 5,000 emails a day?

The baseline does: SPF or DKIM, reverse DNS, TLS and a spam rate under 0.3%. DMARC, alignment and one-click unsubscribe are required at 5,000 or more messages a day to Gmail (Google). Setting up all three records anyway is a one-time job.

Is a DMARC policy of none enough?

For Gmail's bulk-sender rule, Google says the policy can be none. Yahoo asks for at least p=none that passes. Tightening to quarantine or reject is a later decision, once your reports look clean.

Can I write in Markdown?

Buttondown offers Markdown as an editor option, and listmonk can build campaigns in Markdown. VeloCMS exports posts as Markdown, though its authoring format isn't described on the page I read. For the rest I didn't verify.

Can I self-host?

Ghost and listmonk, yes; both need a database and your own email delivery. VeloCMS is managed only, and the others are hosted services.

How do I avoid lock-in?

Export your list as CSV on a schedule, keep content in Markdown or JSON outside the platform, and send from a domain you own so authentication and reputation stay with you.

Sources

All accessed 2026-10-13.