Features

Everything you need to run lifecycle email.

Built for SaaS. Self-hosted. No contact-count tax.

Flows

Prompt-defined flows

Write what you want in plain English. Claros compiles it once into a deterministic plan and executes it with SQL. The AI never decides timing, targeting, or the send path.

  • Three content modes: AI-drafted, fixed-content, and AI-assisted
  • Closed vocabulary of conditions keeps plans deterministic
  • @template, @kb, and @flow references inside prompts
  • Flow classes and priority control concurrency
  • Re-entry policies enforced by the database
Read about compilation →
A flow prompt and its compiled, inspectable plan in the Claros flow editor.

A prompt becomes a deterministic plan you can read before it runs.

The lifecycle retention grid showing contacts grouped by tenure and recency.

A 4x4 grid of tenure versus recency; every cell is an audience you can email.

Lifecycle

A state machine that knows when to act

Seven lifecycle states, configurable thresholds, engagement depth scoring, and a 4x4 retention grid. Trigger flows on events, lifecycle transitions, or grid cells.

  • signed_up, activated, engaged, at_risk, dormant, churned, resurrected
  • Configurable thresholds per tenant
  • Engagement depth: power, regular, casual, minimal
  • 4x4 retention grid by tenure and recency
  • Trigger flows from any lifecycle event or grid cell
Read about lifecycle states →

Brain

AI drafts. You approve.

The Brain decides whether to send, drafts the email, and runs it through a value gate. Every draft waits in the approvals inbox until a human says yes. Switch a flow to auto-approve once you trust it.

  • BYO LLM key: OpenAI, Anthropic, Gemini, Groq, Ollama, or any OpenAI-compatible endpoint
  • Rich context packet with lifecycle state, cadence, behavior, and knowledge-base entries
  • Value gate prevents generic or misaligned drafts
  • Bulk approve or reject up to 100 messages
See how approvals work →
The approvals inbox with a drafted email open for review.

No AI-drafted email sends until a human says yes.

POST/v1/track
POST/v1/identify
POST/v1/batch
2 KB browser snippet
Events

Segment-compatible ingestion, idempotent by messageId.

Ingestion

Send events the way you already do

Segment-compatible /track and /identify. A 2 KB browser snippet. Works with existing Segment SDKs by pointing them at Claros.

  • Segment-compatible API with publishable and secret keys
  • 2 KB browser snippet served by your own instance
  • Idempotent ingestion over a rolling window
  • Works with Segment, RudderStack, or PostHog webhooks
Read the ingestion guide →

Infrastructure

One dependency, one container

One Docker image. Jobs via pg-boss. Embeddings via pgvector. 30-minute quickstart. Scale by splitting into API, worker, and scheduler roles.

  • Single dependency: Postgres 16 with pgvector
  • No Redis, no Kafka, no separate message broker
  • Resend or SMTP transport, including Amazon SES SMTP
  • Magic-link auth, owner/member roles
  • Scale from one container to many
Read the installation guide →
Jobspg-boss
DedupAdvisory locks
EventsTable partitioning
Embeddingspgvector
No RedisNo KafkaNo broker
  • RFC 8058 one-click unsubscribe
  • Hosted unsubscribe page
  • CAN-SPAM postal footer
  • Suppression list + CSV import
  • Bounce and complaint handling

Compliance

Compliance built in, not bolted on

RFC 8058 one-click unsubscribe, hosted unsubscribe page, CAN-SPAM postal footer, suppression list with CSV import, and automatic bounce and complaint suppression through Resend webhooks.

  • One-click unsubscribe headers on every marketing email
  • Suppression list enforced before every send
  • Import up to 10,000 suppressed contacts per call
  • Resend webhooks automatically handle bounces and complaints

Compare

See how Claros compares

Honest comparisons with the tools people switch from.

vs Mauticvs Customer.iovs Klaviyovs Loopsvs Dittofeed

Three commands on your own server.

Self-hosting is the only way to run Claros today. Install in about five minutes and send your first real email from your own server.

git clone https://github.com/claroshq/claros.git && cd claros
docker compose run --rm install
docker compose up -d

No LLM key needed to start.Full installation guide →