Segment
A weekend of work, and real gaps remain.
A customer data pipeline: instrument events once, and it forwards them to every analytics, marketing and warehouse destination you use, with each one’s format handled.
Build the event pipeline I actually need instead of Segment — and start by counting your destinations, because that number decides everything. **Hundreds of maintained integrations is what the price buys.** Almost nobody uses hundreds. Most companies send events to a warehouse, one analytics product and one email tool — and three destinations written directly is less code than the configuration describing them. STACK - Node 20+ with Fastify - SQLite through better-sqlite3, WAL mode - A worker for delivery, separate from the ingest process - Caddy in front THE DATA MODEL - events: id, message_id, name, kind, user_id, anonymous_id, properties_json, context_json, sent_at, received_at — kind is track, identify, page or group - identities: anonymous_id, user_id, at — the stitch - destinations: id, name, kind, config_encrypted, filter_json, is_active - deliveries: id, event_id, destination_id, status, attempts, response_excerpt, next_attempt_at, delivered_at - **The event table is the point.** Everything downstream is a copy; this is the original, and it is what makes replay possible INGEST - One endpoint, one shape. Follow the established spec — track, identify, page, group — rather than inventing one, because every client library already speaks it - **A message id on every event, generated by the client**, and ingest deduplicates on it. Networks retry, and without this a purchase is counted twice - Answer in a couple of milliseconds: validate, write, return. Delivery happens in the worker - Reject an event with no name or no identifier rather than storing something unusable - A size cap and a rate limit per key DELIVERY, WHICH IS WHERE THE WORK IS - One adapter per destination: map the event to that service's shape, send it, report what happened. A small module with a fixture and a test each - Retries with exponential backoff and jitter, and a dead-letter list with a one-button replay - **Idempotency downstream**: pass the message id through where the destination supports it, so a retry does not create a second record. Where it does not, say so in the adapter, because that is a fact somebody will need - Per-destination filters, so a marketing tool does not receive every server-side event and a warehouse receives all of them - Rate limits respected per destination, with the API's own headers honoured REPLAY, WHICH IS THE FEATURE PEOPLE DISCOVER LATE - Because every event is stored, a destination added in March can be sent January's events - That is one query and the same delivery path. It is the strongest argument for owning the pipeline rather than sending straight to each tool from the browser - Guard it: replaying a million events into a service with a rate limit is a good way to be blocked, so it is queued and throttled like everything else THE SCHEMA, WHICH IS THE PART THAT DECIDES WHETHER ANY OF IT IS USEFUL - A tracking plan: the events you send, their properties and their types, in a file in a repository - Validate on ingest and **record violations rather than rejecting them** — a dropped event is invisible, a recorded violation is a bug report - Without this, two engineers send 'Signup Completed' and 'signup_completed' with different properties, and six months later no report is trustworthy PRIVACY - Personal data in properties is the default failure. Decide what may be sent, enforce it in the plan, and strip the rest at ingest - Deletion by user identifier across the event store, and a record of which destinations were told WHAT MATTERS MOST The stored event table and the message id. The first gives you replay and makes every destination replaceable; the second stops a retry becoming a duplicate purchase.
What you lose
- Hundreds of destination integrations, each with its own schema and its own breaking changes
- Delivery guarantees and retries into services that are occasionally down
- Replay, so a destination added later still receives the history
- One instrumentation rather than one per tool, which is the whole idea
If you would rather not build
- Sending straight to a warehouse and reading from it, which is enough for many
The escape hatch
open source · no votes, no paid placement
RudderStack
$0An open-source customer data pipeline with many destinations.
rudderlabs/rudder-serverfree · open source
Jitsu
$0Open event collection and delivery into warehouses and tools.
jitsucom/jitsufree · open source
Why this verdict
our own opinion · changed only by a person
47/100
Verdict kinda at 47: three adapters are less work than the configuration describing them, and the stored event table gives you replay, which is the real reason to own the pipeline. The tracking plan is what stops the whole thing being worthless in six months.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
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 Segment
answered from the record above
Is Segment free?
No — the plan we track is $120 a month. Team from around $120/month billed monthly, priced on monthly tracked users; a free tier covers a small volume.
Can you replace Segment by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 47 out of 100, build time a weekend. Read what you lose before you decide.
How much does Segment cost?
$120 a month on Team — $1,440 a year. Recorded 14 Aug 2026.
What do you lose by replacing Segment?
Hundreds of destination integrations, each with its own schema and its own breaking changes; Delivery guarantees and retries into services that are occasionally down; Replay, so a destination added later still receives the history; One instrumentation rather than one per tool, which is the whole idea. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Segment?
Yes: RudderStack, Jitsu. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
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

