basalt

SourceNativeGA

Stripe events, verified and deduplicated.

Basalt registers a webhook endpoint and checks every signature. Payments, invoices and subscriptions land as typed rows within a second.

Setup
1 min
Delivery
Exactly-once
Throughput
20k req/s
Since
v1.2
Overview

How it works.

Basalt creates the endpoint through the Stripe API and stores its signing secret. Each event is verified against the Stripe-Signature header, deduplicated by event ID, and acknowledged only after it is written to the log.

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

Set it up in three steps.

01

Add the source

Paste a restricted key with webhook write access. Basalt creates the endpoint, subscribes to the events you choose, and backfills 30 days.

terminal
# subscribe to billing events from Stripe
basalt source add billing --stripe --events charge.*,invoice.*,customer.subscription.*
✓ endpoint we_1Q8x registered · secret stored
✓ backfilled 30 days · 412,906 events
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

Signature checks

Every payload is verified with HMAC-SHA256. Unsigned or stale requests are rejected.

02

Event dedup

Stripe retries are dropped by event ID, so a charge is counted once.

03

Typed objects

Charges, invoices and subscriptions get columns that match the pinned API version.

04

30-day backfill

Pull up to 30 days of past events from the Events API when you connect.

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.