Unitpost
Marketing email

Email marketing, made simple.

Newsletters and campaigns on the same rails as transactional. Pay for sends, not contacts.

Visual builder

Beautiful emails, no code required.

Design it. Recipients get that.

  • Priced per send

    Never per contact.

  • Markdown or blocks

    Write it, or drag it.

VisualCodePublished
Heading

Welcome, {{first_name}}

Thanks for joining. Here's what's new this week.

Read the update
Unsubscribe · Acme Inc, 123 Market St
SectionHeadingTextButtonImageDividerUnsubscribe

Configurable

Everything you need in one place.

Personalization, Markdown, and scheduling — built right in.

  • Variables

    {{first_name}} and custom fields, with fallbacks.

  • Markdown

    Headings, lists, links. Write it like a doc.

  • Schedule

    “In 1 hour.” Cancel anytime before send.

VariablesResolved at send
{{first_name}}{{email}}{{amount}}
Hi Ada, your receipt for $24.00 is ready.

Fallbacks keep sends clean when a value is missing.

Campaigns API

Send a campaign from your app.

Same SDK as transactional. Create, validate, send — or schedule it.

  • Send or schedule

    Now, or Friday at 10.

  • Validate first

    Missing merge tags, caught before send.

  • Pause & resume

    Stop a send without losing the rest.

Send a campaign
import { Unitpost } from "unitpost";

const unitpost = new Unitpost(process.env.UNITPOST_API_KEY);

const { data: campaign } = await unitpost.email.campaigns.create({
  name: "March newsletter",
  subject: "What's new this month",
  from: "news@acme.com",
  template_id: "tmpl_1a2b3c",
  segment_id: "seg_9x8y7z",
});

await unitpost.email.campaigns.send(campaign.id);

Contacts

Bring your list and grow it.

CSV, API, or by hand.

  • Unlimited contacts

    Pay for sends, not list size.

Contacts1,204 total
EmailNameMarketing

ada@example.com

Ada Lovelace

jaden@example.com

Jaden Smith

alan@example.com

Alan Turing

grace@example.com

Grace Hopper

mike@example.com

Mike Vasilev

Unsubscribe handling

Opt-outs, handled for you.

We add the link, host the page, skip opted-out contacts.

  • Opt-outs

    Hosted preference center, out of the box.

  • Suppression

    Bounces and complaints. Automatic.

You have unsubscribed

ada@example.com will no longer receive updates

ada@example.com
Unsubscribed19m ago

Metrics

Analyze and track performance.

Delivered, opened, clicked, opted-out. Per broadcast.

Deliverability

Delivered98%
Bounced600.5%

Engagement

Opened41%
Clicked3432.7%

Opt-out

Unsubscribed1%
Complained30.02%

Versatile

One platform for all your email needs

However you engage your audience, Unitpost can handle it.

Newsletters

To a list or a segment. Opt-outs handled.

Product updates

Ship-day email. On-brand template.

Onboarding

Welcome series. Same deliverability.

Announcements

One send. Per-message analytics.

Guides

Helpful content, on a schedule.

Promos

Time-boxed. Targeted segment.

Events

Invite with tracked links.

Feedback

Ask a segment. See who engaged.

Questions

Common questions

Can I send marketing email and transactional email from the same domain?

Yes — one verified domain, one sending gate, one bill. A template's category decides what compliance adds: marketing sends get the workspace unsubscribe footer plus List-Unsubscribe headers, while transactional sends get neither. Suppression is category-aware, so a marketing opt-out never blocks a password reset, but hard bounces and spam complaints suppress an address for both.

How do I send an email campaign from the API?

POST /api/v1/email/campaigns with a name, template_id, segment_id, and a verified from address (scope campaigns:write) creates a draft. Call GET /api/v1/email/campaigns/{id}/validate for the pre-send report, then POST /api/v1/email/campaigns/{id}/send (scope campaigns:send). Pass scheduled_at to schedule instead of sending now; reschedule and cancel are separate endpoints. Only published templates are sendable.

Do I pay per contact or per email sent?

Per email sent. Every paid plan has no contact cap, so storing a bigger list never raises your bill — the meter follows send volume. The free plan is the one exception: it stores up to 10,000 contacts. This is the opposite of the per-contact pricing most marketing tools use, where an unengaged list costs you money every month.

Can recipients opt out of one kind of email without leaving my list?

Yes, that's what topics are for. A topic is a named subscription category like Product updates or Promotions. Scope a campaign to a topic_id and anyone who opted out of it is skipped at send, independent of segment membership and the global unsubscribe. Recipients manage the toggles themselves on the hosted preference page — no login required.

Is the unsubscribe link added automatically?

Yes, and it can't be switched off for marketing mail. Every send from a marketing-category template gets your workspace footer injected at render, plus List-Unsubscribe and List-Unsubscribe-Post headers for RFC 8058 one-click opt-out. There is no disable flag. You customize the footer once per workspace and the change propagates to every marketing send without editing templates.

What happens if some contacts are missing a personalization value?

The campaign's validate report catches it before anything sends. It resolves every live segment member and lists who is missing a required variable, with two ways out: exclude those contacts, or set a campaign-level fallback that backfills only the blanks and never overwrites a real per-contact value. A single transactional send fails with a 422 rather than delivering a literal merge tag.

Run your first campaign this week

Campaigns, segments, tracking. 5,000 emails a month free. No credit card.