basalt

AI & MLBetaBeta

Events, embedded as they land.

Pick a text column and an OpenAI embedding model. Basalt embeds new rows on arrival and stores each vector next to its source row.

Setup
3 min
Delivery
Exactly-once
Throughput
5k rows/s
Since
v2.2
Overview

How it works.

Basalt batches new rows and calls the OpenAI Embeddings API with your key. Vectors are written to a vector column on the same row, and each row is embedded once, keyed by a hash of its text.

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

Set it up in three steps.

01

Connect the tool

Store your OpenAI API key as a workspace secret and choose the view and column to embed. Backfill runs at your rate limit.

terminal
# embed support ticket bodies with text-embedding-3-small
basalt connect openai --view tickets --column body --model text-embedding-3-small
✓ vector column body_embedding added · 1536 dims
✓ backfill 284k rows · 3m 12s
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

Embed once

Rows are keyed by content hash, so unchanged text is never re-embedded.

02

Vectors beside rows

Search by similarity and filter by any column in the same query.

03

Rate aware

Requests respect your tier limits and back off on 429 responses.

04

Model choice

Use text-embedding-3-small or -large, with optional reduced dimensions.

Related

Other ways to stream in.

All integrations →
Beta

Anthropic

AI & ML

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

Partner

Hex

BI & notebooks

Query views from SQL cells and keep notebooks current.

Native

Grafana

BI & notebooks

Live panels over the Postgres wire protocol, no plugin needed.

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.