basalt

SourcePartnerGA

Segment calls, typed on arrival.

Add Basalt as a destination in Segment. Track, identify and page calls become typed rows you can join with the rest of your data.

Setup
3 min
Delivery
At-least-once
Throughput
150k ev/s
Since
v1.3
Overview

How it works.

Segment delivers events to a Basalt ingest endpoint over HTTPS. Basalt deduplicates by messageId, types each event by its name and properties, and keeps one table per event so schemas stay narrow.

KAFKA TOPICSBASALTVIEWSSERVEpayments.v3orders.v1refunds.v2ORDERED LOGpayments_liverevenue_by_minAPI3.1 MS
Setup

Set it up in three steps.

01

Add the source

Create a write key in Basalt, then add Basalt from the Segment destination catalog and paste the key. Events start flowing on the next call.

terminal
# create an ingest key for the Segment destination
basalt source add web --segment --workspace acme-prod
✓ write key created · paste into Segment
✓ first events received · track, identify, page
02

Shape it with a view

Write plain SQL over the source. Basalt keeps the view current with every record and tracks lineage back to the topic, partition and offset.

views/revenue_by_min.sql
CREATE MATERIALIZED VIEW revenue_by_min AS
SELECT date_trunc('minute', ts) AS minute,
       currency,
       sum(amount) AS revenue,
       count(*)    AS payments
FROM payments
WHERE status = 'captured'
GROUP BY 1, 2;
03

Read it from anywhere

Every view is an endpoint the moment it exists. Call it over REST, connect with any Postgres client, or use the SDK from your app.

terminal
curl https://api.basalt.dev/v1/views/revenue_by_min?limit=5 \
  -H "Authorization: Bearer $BASALT_TOKEN"
✓ 200 OK · 5 rows · served from eu-north-1 in 3.1 ms
Included

What you get.

01

Per-event tables

Each track event gets its own typed table, built from the properties it sends.

02

Identity stitching

Identify calls link anonymousId to userId, so views can resolve sessions to people.

03

Message dedup

Segment retries are dropped by messageId within a 24-hour window.

04

Tracking plans

Rows that break a Protocols plan are tagged, not dropped, so you can find them.

Related

Other ways to stream in.

All integrations →
Beta

Anthropic

AI & ML

Give Claude live, row-level context through a typed tool.

Beta

OpenAI

AI & ML

Embed events as they land and store vectors beside the rows.

Partner

Hex

BI & notebooks

Query views from SQL cells and keep notebooks current.

Get started

Set your data in stone.

Free up to 10M events a month. No card, no sales call. Your first pipeline is live in about four minutes.

2,400+ teams in production

SOC 2 Type II

38 regions

Get started

Set your data in stone.

Free up to 10M events a month. No card, no sales call. Your first pipeline is live in about four minutes.

2,400+ teams in production

SOC 2 Type II

38 regions

Get started

Set your data in stone.

Free up to 10M events a month. No card, no sales call. Your first pipeline is live in about four minutes.

2,400+ teams in production

SOC 2 Type II

38 regions

© 2026 Basalt Labs

All systems normal

Back to top ↑

404

© 2026 Basalt Labs

All systems normal

Back to top ↑

404

© 2026 Basalt Labs

All systems normal

Back to top ↑

404

Create a free website with Framer, the website builder loved by startups, designers and agencies.