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.
Add Basalt as a destination in Segment. Track, identify and page calls become typed rows you can join with the rest of your data.
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.
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.
# create an ingest key for the Segment destination basalt source add web --segment --workspace acme-prod
Write plain SQL over the source. Basalt keeps the view current with every record and tracks lineage back to the topic, partition and offset.
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;
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.
curl https://api.basalt.dev/v1/views/revenue_by_min?limit=5 \ -H "Authorization: Bearer $BASALT_TOKEN"
Each track event gets its own typed table, built from the properties it sends.
Identify calls link anonymousId to userId, so views can resolve sessions to people.
Segment retries are dropped by messageId within a 24-hour window.
Rows that break a Protocols plan are tagged, not dropped, so you can find them.