Customer data for developers

Your users,
in code.

Send identify and track. Get profiles, live segments, and journeys you write in TypeScript.

Free usage allowance every monthNo card requirednpm i @cowliss/cli
cowliss · one event, end to end
your app
 
cowliss
event track receiving200 · stored
Signed Up · deduplicated · source stamped
profile identity resolvinglinked
profile id minted · identifiers linked
segment on write evaluatingentered
entered “New signups” · membership current
journey as code runningrelease #12
welcome · pinned to the release it started on
email ses sendingdelivered
delivery log
14:02:11welcome → [email protected]delivered · 214ms
One event, end to end.
01 / How it works

Four steps from a signup to a welcome email.

STEP 01

Send events

Two calls, identify and track, from anywhere you can make an HTTP request.

POST /v1/track
STEP 02

Get the profile back

Cowliss makes the id, links the two identities, and updates the segments.

GET /v1/profiles/:id
STEP 03

Write the follow-up

TypeScript in your repo. Test it, then ship it.

$ cow push && cow deploy
STEP 04

Watch it land

Mail goes out from your own domain, and every send is on the log.

GET /v1/deliveries
02 / What you get

Everything a big company's growth team has, without the growth team.

A · SEGMENTS

Segments are never stale

The list updates the second an event lands, and you can preview one before you save it.

B · RELEASES

Roll back a bad send

Every push is a numbered version, and one command points back at the last good one.

C · EXECUTION

Your code cannot leak

It runs in a sandbox with no network and no secrets, and every email it sends is logged.

D · TRACKING PLAN

Typos never reach your data

Say which events you expect. A misspelled one is held for review, not silently kept.

E · ENVIRONMENTS

A place to test safely

A development send does everything a real one does, except reach an inbox.

F · BACKFILL

Import the past, quietly

Import a year of events without sending a year of welcome emails.

G · MULTI-APP

Run more than one product

Each app keeps its own data, and any segment or journey can be scoped to one.

H · DATA RIGHTS

Answer a GDPR request in a click

Consent, export, and deletion are one call each, from anywhere.

I · ANALYTICS

Keep your own BI tool

A read-only ClickHouse user for the BI tool you already have.

03 / Follow-up emails

Your welcome email is a file in your repo.

You write it in TypeScript, review it in a pull request, and ship it like any other code. There is no canvas to drag boxes around on.

cow test

Test a two-day journey in a second. The clock is fake, so nothing waits and nothing sends.

cow push

Nothing ships by accident. Push when you are ready, and deploy when you mean it.

cow deploy

Shipping is safe mid-flight. Someone waiting on day two finishes on the code they started on.

your repo

You can leave. The code is yours, in your repo, not locked in our database.

The full journey API
journeys/welcome.tstypescript
import { defineJourney } from '@cowliss/cli/journeys';

export default defineJourney({
  trigger: { segment: 'new-signups' },
  purpose: 'emailMarketing',
  tags: ['lifecycle'],
  run: async (event, api) => {
    await api.email.send({ template: 'welcome' });
    await api.sleep('3d');

    const me = await api.profile.get();
    if (me.traits.plan === 'trial') {
      await api.email.send({ template: 'tips' });
    } else {
      await api.webhook.send({
        destination: 'crm',
        payload: { profileId: me.id },
      });
    }
  },
});
terminal
$ cow test welcome --scenario scenarios/welcome.json
✓ passed · 4 steps on a virtual clock, nothing sent
$ cow push
built 2 journeys, 4 templates
rel_7b3k #12 ready (6 artifacts uploaded).
$ cow deploy --env production
rel_7b3k #12 deployed to production.
04 / Built for agents

Your agent can do anything you can do here.

Every button in the dashboard is also a CLI command and an MCP tool, built from the same typed definition. Point an agent at it and it has the whole product.

◈ Dashboard

For people

Every user on one page: traits, segments, events, journey runs, every email sent.

profiles / segments / journeys deliveries / tracking plan consent · export · erase
$ cow CLI

For your terminal

Build, test, push, deploy, inspect, and roll back without leaving your repo.

$ cow segments preview \ --predicates - < new-signups.json$ cow journeys dryRun welcome \ --profile-id prof_9x2
⌁ MCP server

For your agents

An MCP server with every operation in it. No scraping, no screenshots, no browser.

tool: deployments_create { releaseId: "rel_9k2" } → { data: { releaseSeq: 11, … } }
The docs ship an llms.txt, so an agent can read them before it starts.
05 / Pricing

Free until you are big enough to notice.

No plans, no seats, no contract. Nobody is charged for a teammate.

Free every month

$1 free, every month

  • $1 of usage every month. No card required.
  • Resets each UTC month. Does not roll over.
What you pay for

Four things are counted

  • Events ingested · $2 per 10,000
  • Emails sent · $4 per 10,000
  • Webhooks delivered · $2 per 10,000
  • Journey runs · $2 per 10,000
  • Per event and per send. Never per seat.
After that

Top up when you want to

  • One-time top-ups of $10 / $50 / $200, through Stripe.
  • Credit never expires.
  • Nothing recurring, ever.
NOTEAt zero credit the service stops rather than billing you, and the dashboard warns from 80% spent.
See the rates and estimate your bill

Customer data,
in code.

Free allowance every month. No card to start.