MIT · self-hosted · pay what you want

Stop renting your
email list.

Self-hosted email marketing. Bring your own SMTP, own your data. Free forever. Tip if it saves you a monthly bill.

install.sh
# One command, on any Linux box with Docker
$ curl -fsSL https://ownmaily.com/install.sh | bash
Pulling Docker image...
Starting services...
→ Running at http://localhost:4400

Monthly email pricing is broken.

You pay more as you grow. The big email platforms charge hundreds a month once your list crosses 50k subscribers. These are recurring fees for software that doesn't get 3x better each year, and if you can run a Docker container, you can replace them with a server cost you're probably already paying.

01 You own the data.

Your subscriber list lives in your Postgres database, on your server. Not exported, not synced, not held hostage. If you stop using OwnMaily tomorrow, your data is already yours.

02 One less subscription.

Indie founders and bootstrappers carry a stack of monthly bills. Email marketing is usually one of the biggest. OwnMaily replaces it with a server cost you were probably already paying.

03 No platform risk.

Platforms change pricing, deprecate features, or shut down. When your list is self-hosted and MIT licensed, none of that applies to you. Fork it if you want to.

04 Bring your own SMTP.

Connect Resend, Mailgun, or Amazon SES. OwnMaily handles the queue, tracking, and bounce handling. Your SMTP provider just sends the mail. Switch providers any time, no re-imports.

Two ways to get running.

Pick the path that fits how you work. Both end in the same place: your own OwnMaily instance, ready to send.

Terminal users
CLI install
  • 01 Run curl https://ownmaily.com/install.sh | bash. Docker and Docker Compose are pulled automatically if missing.
  • 02 A .env with a random secret is created and the stack starts. OwnMaily is live on port 4400.
  • 03 Open the setup wizard in your browser. Set your SMTP credentials (Resend, Mailgun, or SES), send yourself a test email.
  • 04 Done. Import your first list or drop in the signup embed. You are sending.
No terminal
One-click deploy
  • 01 Click the Deploy on Railway or Deploy on Render button in the GitHub README.
  • 02 The platform clones the repo, provisions Postgres, and starts the app. No config required to get it running.
  • 03 Open your deployment URL. Complete the setup wizard: SMTP credentials, sender name, test email.
  • 04 Done. You have a fully managed OwnMaily instance. Railway/Render handle uptime and backups.

Everything you need. Nothing you don't.

Built for the actual job: send campaigns to your list, track opens and clicks, manage bounces, grow your subscribers.

[ 01 ]
Unlimited subscribers

No tiers. No contact limits. Grow your list as large as your server handles, which is very large.

[ 02 ]
Open and click tracking

Per-campaign open rates and per-link click counts. Tracking pixel and redirect proxy built in.

[ 03 ]
Bounce handling

Hard bounces suppress immediately. Soft bounces retry, then suppress after 3 attempts. Suppression list managed automatically.

[ 04 ]
Embeddable signup forms

Drop a single script tag anywhere. The form renders inline and submits to your instance. Double opt-in optional per list.

[ 05 ]
Full REST API

The UI is built entirely on the public API. Use it to integrate OwnMaily with anything: Zapier, your own app, AI agents.

[ 06 ]
Lists, tags, segmentation

Organize subscribers into lists and tag them however you want. Send campaigns to a list or a tag. CSV import and export.