# Onchain data, straight to your warehouse

Backfilled history, realtime Kafka sync, one schema. Delivered into the Postgres or ClickHouse you already run.

Backfill full onchain history and stream realtime updates over Kafka into your own Postgres, ClickHouse, or warehouse. Struct runs the pipeline end to end: schema, upserts, deduplication, and delivery.

- **10ms latency** from onchain event to your pipeline.
- **99.99% uptime** SLA on the feeds you ingest.

## A managed pipeline between the chain and your tables

Backfill, realtime streams, and a schema we maintain for you. Scoped to exactly the data you need.

- **Full history, your database**: Backfills load complete history into your database and run incrementally, so a restart never re-processes what already landed.
- **Realtime sync over Kafka**: Managed Kafka topics stream ordered, low-latency updates the moment the backfill completes.
- **One schema, warehouse-ready**: Markets, trades, positions, wallets, and candles arrive normalized, the same shape on every chain.
- **Scoped with custom filters**: Filter the pipeline to specific markets, tags, or event types and cut noise and storage costs.

## Warehouse-ready data, no indexers required

We run the indexers, the pipeline, and the schema. You keep the queries.

- **Your database, our writes**: Struct writes complete history directly to Postgres, ClickHouse, and other supported databases. No export jobs to babysit.
- **10ms freshness**: New onchain events reach your pipeline in as little as 10ms, not on the next batch run.
- **Schema handled for you**: Schema creation, migrations, and validation are managed end to end, with upserts and deduplication included.
- **Incremental and restartable**: Backfills pick up where they left off, so a restart never means re-processing history.
- **Ordered delivery**: Kafka topics deliver events in order with delivery guarantees, so downstream consumers stay simple.
- **Every chain, one feed**: Solana, Ethereum, Base, BSC, and Polygon, behind a single integration.

## Set up around your stack, not the other way around

Per-customer pipelines scoped with our team, from database choice to filters, with support on call.

- **Bring your own database**: Postgres, ClickHouse, and more, including read replicas and custom topologies. If you run it, we deliver to it.
- **Managed Kafka topics**: Ordered, low-latency streams you can consume directly when you want the raw feed instead of database writes.
- **Scoped to your use case**: We define data types and filters with you, so the pipeline carries exactly what your product needs.
- **White-glove setup**: Struct provisions and configures the pipeline end to end: destination, topics, and backfill schedule.
- **Delivery guarantees**: Validation, upserts, and deduplication happen inside the pipeline, so your tables stay clean.
- **Your second data team**: 24/7 support on calls, Telegram, and Slack. We build custom integrations like an extension of your team.

## Frequently asked questions

### What can I build with Struct?

Warehouse syncs, lakehouse tables, internal analytics services, ML feature pipelines. We're the data layer, you own the pipeline.

### Which chains and markets does Struct cover?

Polymarket is self-serve. Pipeline coverage on other chains is scoped per customer. Contact us and we'll define the datasets.

### How do I get started?

Pipelines are set up per customer. Book a call or email support@struct.to, we scope the data types and filters together, then we provision the pipeline. When the backfill completes, realtime streaming starts automatically.

### Which databases can Struct write to?

Postgres, ClickHouse, and other supported databases, including read replicas and custom setups. We configure the destination with you during onboarding. If you run it, we can likely deliver to it.

### How do I keep my warehouse current after the backfill?

Realtime sync starts automatically the moment the backfill completes. Updates stream over managed Kafka topics and land in your database in order, with no polling loops or cron jobs re-scanning for changes.

### Will I miss events or get duplicates?

No. The pipeline handles upserts, deduplication, and validation for you, and backfills run incrementally, so a restart never re-processes history.

## Learn more

- [REST API](https://www.struct.to/rest-api)
- [WebSockets](https://www.struct.to/websockets)
- [Webhooks](https://www.struct.to/webhooks)
- [Pricing](https://www.struct.to/pricing)
- [Managed Backfill documentation](https://docs.struct.to)
