Omnisend

omnisend.com

ALMOST

A weekend of work, and real gaps remain.

Email and SMS marketing for online shops: automated flows triggered by shop events, segmentation by purchase behaviour, and revenue attribution.

Promptfree, for everyone, and the only version there is
Build me the shop marketing automation that replaces Omnisend.

The economics are why people leave: **these products charge by contact count, so the bill grows with your list whether or not you send anything.** The flows themselves are a queue and some templates.

STACK
- Node 20+ with Fastify
- SQLite through better-sqlite3, WAL mode
- A worker process for the flows
- MJML for templates, a relay provider for delivery
- Caddy in front

THE DATA MODEL
- contacts: id, email, phone, consent_email_at, consent_sms_at, source, created_at, unsubscribed_at
- orders, order_items, carts: mirrored from the shop by webhook, with the shop's own ids
- flows: id, name, trigger_json, steps_json, is_active
- enrolments: id, contact_id, flow_id, position, next_at, entered_at, exited_at, exit_reason
- sends: id, contact_id, flow_id, step, channel, template_version, sent_at, provider_ref
- events: id, contact_id, kind, ref, at — opened, clicked, ordered
- attribution: id, send_id, order_id, window_days — **computed at query time, never stored as a total**

THE FLOWS THAT EARN THE MONEY
- Abandoned cart, abandoned checkout, welcome, post-purchase, win-back. Five flows are most of the revenue in this category
- **Abandoned cart is the one that pays for everything.** Trigger on the cart being idle for an hour, and check at send time that it is still abandoned — sending a cart reminder after somebody has bought is the mistake that makes people unsubscribe
- Exit conditions on every flow, evaluated before every step, not only at entry

RELIABILITY
- The queue is a table with a lease; a crashed worker's step is reclaimed
- Idempotency per contact per flow step. **Sending the same reminder three times is the failure that costs you the customer**
- A global per-contact cap across all flows, so somebody in three flows at once does not receive nine messages in a day
- Quiet hours in the contact's own timezone, which for SMS is a legal requirement in several countries

ATTRIBUTION, HONESTLY
- An order within a window after a click is attributed to that send. State the window on every report
- **Show attributed revenue beside total revenue.** These platforms report attributed revenue as if it were incremental, and it is not — many of those people would have bought anyway
- A holdout group excluded from a flow, permanently, is the only way to know the flow actually earns anything. It is the single most valuable thing you can build here and no vendor offers it

SMS
- Rent it. Carrier relationships and short codes are not buildable
- Separate consent, recorded with time and source, and honoured separately from email. **SMS consent is legally stricter than email consent almost everywhere**
- STOP handling that works immediately and permanently

COMPLIANCE
- Confirmed opt-in with the record, one-click unsubscribe on every message, suppression checked before every send, and a physical address in the footer where required

WHAT MATTERS MOST
The global per-contact cap and a real holdout group. One stops the automation harming the relationship; the other tells you whether it is worth running.

What you lose

  • Shop integration that knows carts, orders and products
  • Revenue attributed back to each message
  • SMS delivery, which needs carrier relationships
  • Flows a marketer edits without a developer

If you would rather not build

  • Your shop platform’s own abandoned cart email, which is free
  • Customer.io or similar, if the flows are genuinely complex

The escape hatch

open source · no votes, no paid placement

Listmonk

$0

Self-hosted list and campaign management with an API.

knadh/listmonkfree · open source

Medusa

$0

Open-source commerce backend that emits the cart and order events.

medusajs/medusafree · open source

Why this verdict

our own opinion · changed only by a person

56/100

Verdict kinda at 56: the flow engine is buildable, SMS and shop connectors less so. The holdout group is the honest measurement nobody in this category offers.

History

tracked since 14 Aug 2026 · nothing is ever overwritten

Interest · last 30 days

Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.

Questions about Omnisend

answered from the record above

Is Omnisend free?

No — the plan we track is $16 a month. Standard from $16/month for 500 contacts, rising steeply with list size.

Can you replace Omnisend by building your own?

ALMOST. A weekend of work, and real gaps remain. Replacement score 56 out of 100, build time a weekend. Read what you lose before you decide.

How much does Omnisend cost?

$16 a month on Standard — $192 a year. Recorded 14 Aug 2026.

What do you lose by replacing Omnisend?

Shop integration that knows carts, orders and products; Revenue attributed back to each message; SMS delivery, which needs carrier relationships; Flows a marketer edits without a developer. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Omnisend?

Yes: Listmonk, Medusa. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 33 in Email & newsletters

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc