Self-hosted email marketing with full source code. Pay once, own forever. Get AcelleMail — $74 →

For independent newsletters & publishers

Own your subscribers. Own your deliverability.

Embeddable subscribe forms, double opt-in by default, tag-and-field segmentation, one-click unsubscribe, per-campaign open/click reporting, and any SMTP backend you trust — Amazon SES, Postmark, Postal, your own MTA. A 10,000-subscriber newsletter sent weekly costs roughly $4 per month in send fees on top of a one-time $74–$199 license. The tier ladder doesn’t exist; the tier is “your VPS.”

Buy Standard License — $74 Try Live Demo →

The math at newsletter scale

Send fees, not platform fees.

Newsletter platforms typically bill per subscriber per month, regardless of whether you sent a single issue or four that month. AcelleMail bills nothing — the only ongoing cost is the actual send. Amazon SES is $0.10 per 1,000 emails; sending a weekly issue to 10,000 subscribers costs roughly $4 per month. Skip a week and you pay nothing for that week. Grow to 50,000 and the math is still ~$20/month at the same one-issue-per-week cadence.

Subscribers Mailchimp Standard / mo AcelleMail + SES / mo* 3-year saving
5,000$100~$2~$3,500
10,000$135~$4~$4,700
50,000$385~$20~$13,000
200,000$1,310~$80~$44,000

*Assumes one issue per subscriber per week sent through Amazon SES at $0.10/1,000, plus $1–2/mo for a small DigitalOcean droplet. Mailchimp pricing as published 2026-05. Full comparison →

Newsletter-shaped feature surface

Subscribe. Confirm. Send. Segment. Unsubscribe. The five flows newsletters actually ship.

Embeddable subscribe forms

Build a subscribe form in the admin, get back an iframe snippet, a JavaScript popup snippet, or a static HTML form — whichever fits your site. Forms POST back to AcelleMail’s frontend route directly; no third-party form-host service in the middle. Custom fields, tags, and the double-opt-in flag are all per-form settings.

Double opt-in by default

Lists ship with subscribe_confirmation on. New subscribers get a confirmation email; only confirmed addresses become “subscribed.” The legal default for GDPR-friendly consent and the deliverability default for senders who want clean reputation. Toggle off per-list if you’re importing pre-confirmed contacts.

Tag & custom-field segmentation

Tag subscribers by signup source, paid tier, location, content interest. Custom fields hold any structured data your form collected. Segment a campaign to tag:paid AND interest:tech; build automations that branch off any combination. The same tag layer drives win-back triggers when a subscriber is tagged inactive.

One-click unsubscribe

Every campaign template auto-injects an unsubscribe link tied to the recipient + campaign. One-click drops the subscriber to unsubscribed — no second confirmation step, the way Gmail & Yahoo bulk-sender rules require since 2024. Unsubscribe events are logged per campaign for the report.

Per-campaign reports

Open rate, click rate, click map, top-domain breakdown, bounce + complaint detail, unsubscribe log. Reports are public-link-shareable per campaign so you can share the numbers with sponsors or co-authors without granting them admin access. No third-party analytics vendor; the data lives in your database.

Bring-your-own SMTP

Amazon SES, SendGrid, Mailgun, Postmark, Postal, raw SMTP — whichever vendor fits your reputation strategy. New vendors ship as a one-class sending-driver plugin. DKIM / SPF / DMARC validation runs against the sending domain regardless of provider; same warmup pacing rules apply per IP.

What we don’t ship

Two things newsletter operators ask about that we’re straight with.

No native RSS-to-email. If your workflow is “publish a blog post, blast it to the list,” AcelleMail doesn’t auto-poll your feed today. Workaround patterns: a small cron-driver plugin (~50 lines, a single Laravel command that polls your feed and POSTs a campaign through the REST API), or a webhook from your CMS calling POST /api/v1/campaigns on publish. Documented under custom commands in the plugin lifecycle deep-dive.

No public archive page. AcelleMail exposes per-campaign report URLs (open log, click log, unsubscribe log) but doesn’t expose a Substack-style “view this issue in the browser” archive index. If you need a public archive, the simplest pattern is to publish issues to your own CMS as part of the send workflow — the same plugin that handles RSS-to-email can also push the rendered HTML to your blog as a regular post.

Built on Laravel — not a black box

Your subscriber list lives in your MySQL. Forever.

The list is rows in a database you own. Export to CSV any time, query directly with SQL, back up with the same tool you back up the rest of your stack. If AcelleMail disappears tomorrow, your subscriber list is still in mysqldump. Custom data shapes — per-tier signup origin, paid-vs-free flag, regional segment — ship as plugin migrations under your own namespace.

Every claim above traces back to a file path: the database & models doc for the schema, the Hook system for plugin contracts, the REST API for programmatic access. No proprietary export format, no per-record fees to extract your own data.

Newsletter-specific FAQ

Real questions from newsletter operators.

Can I import my existing list from Substack / Beehiiv / Mailchimp?

CSV import handles the contact records. Tags and custom fields flow through if your CSV has the right columns. Plan a one-week DNS warmup window: DKIM / SPF / DMARC for the sending domain, propagation 0–48h, then a small parallel-run send to a 1% cohort to compare deliverability before switching primary. The biggest unknown is reputation history — an IP that hasn’t sent your audience before needs warmup, regardless of platform.

How do I handle paid subscribers / paywall integration?

AcelleMail itself doesn’t handle paywall billing — that’s your CMS or Stripe / Lemon Squeezy / Patreon. The integration is one direction: when a paid subscription starts, your billing system POSTs a tag-add to the AcelleMail REST API (POST /api/v1/lists/{uid}/subscribers/{uid}/tags); when it ends, POSTs a tag-remove. Campaigns then segment to tag:paid. Most newsletter operators wire this into their existing Stripe webhook handler — ~20 lines.

Is there a referral / share mechanism like Substack?

Not as a built-in feature. The pattern that ships today: a custom field for “referrer” populated from your subscribe form’s ?ref= query param; a tag triggered when the field hits a threshold; an automation that emails a milestone reward. About 30 minutes of setup in the admin once your form passes the param through. A more sophisticated referral leaderboard would ship as a plugin; the canonical SparkLoop-style flow is ~150 lines.

What about Gmail & Yahoo bulk-sender rules from 2024?

SPF + DKIM + DMARC alignment, one-click unsubscribe (List-Unsubscribe-Post header + List-Unsubscribe URL), and complaint-rate < 0.3% are the three requirements. AcelleMail ships all three: DKIM signing per sending server, the List-Unsubscribe headers on every campaign, and complaint feedback ingested back into the per-subscriber state via the SES feedback loop. Setup happens once at the sending-server level.

Can I run multiple newsletters from the same install?

Yes — each newsletter is its own list (or its own Customer if you want stronger separation). One install can serve a primary newsletter, a paid-tier-only newsletter, an internal-team newsletter, and a partner co-publication newsletter. Per-list custom fields, per-list automations, per-list sending-server choice. The Plan model gates the customer-level limits if you want to keep sub-newsletters from interfering with each other’s reputation.

Pay once. Send for years. Own the list.

Standard License $74. Extended $199 includes commercial redistribution + the plugin SDK. Lifetime updates. Try the live demo before you buy.

Get AcelleMail — $74 Try Live Demo