Pipelines your agent can write and you can read.
Connections, ingestion, models, checks, AI evaluation and semantic models in plain Python, in your workspace repo. The platform schedules, runs and monitors it on managed compute.
Get started
# pipeline/pyproject.toml
dependencies = ["segmentstream"]At a glance
- Python, on top of a production-grade orchestrator
- Bronze, silver and gold tiers; daily partitions; backfills
- Assets, checks, jobs and semantic models in one definitions file
- Every connector on the platform uses the same SDK
What it does
Connections
Declare connections once; pipelines, apps and agents share them. OAuth tokens and keys stay in managed secrets.
from segmentstream.connections import GoogleAdsConnection, HubSpotConnection
connections = (
GoogleAdsConnection(key="google_ads"),
HubSpotConnection(key="hubspot"),
)Ingestion
Load any API by day, with retries, rate-limit pools and backfills. Re-running a day replaces it exactly.
@s.ingestion(
tier=s.Tier.Bronze,
mode=s.IngestionMode.Historical(
partitioning=s.Partitioning.Daily(column="created_date", start_date="2020-08-13"),
),
connections=("hubspot",),
schema=CONTACT_SCHEMA,
primary_key=("contact_id",),
)
def hubspot_contacts(context: s.Context) -> Iterator[s.IngestionRow]:
yield from contact_rows(context)Models
Models are dataframe expressions compiled to warehouse SQL, with declared schemas and inputs.
@s.model(
tier=s.Tier.Gold,
inputs={"orders": "silver/orders"},
schema={"order_date": "!date", "total_revenue": "!float64"},
)
def revenue_summary(orders: ir.Table) -> ir.Table:
return orders.group_by("order_date").aggregate(
total_revenue=orders.amount.sum(),
)Checks
Checks evaluate a table and record the result next to it, where lineage and agents can see it.
@s.asset_check(asset=raw_orders)
def positive_order_amounts(raw_orders: ir.Table, warehouse: s.WarehouseResource) -> s.CheckResult:
invalid = int(warehouse.execute(raw_orders.filter(raw_orders.amount <= 0).count()))
return s.CheckResult(passed=invalid == 0, metadata={"invalid_order_count": invalid})AI evaluation
Ask a decision model typed questions about any record and store the probabilities next to it.
client = s.evaluation_client("evaluation")
result = client.evaluate(
state={"job_title": lead.job_title, "company": lead.company},
questions={"relevant": {
"type": "boolean",
"instructions": "Would sales accept this demo request as an opportunity?",
}},
)Semantic models
Define dimensions and measures over a table; the platform compiles every query deterministically.
advertising = SemanticModel(
name="advertising",
source="silver/cost_data",
default_date_dimension="date",
dimensions=(Dimension("platform", "data_source_type"),),
measures=(
Measure("spend", sum_(column("cost")), unit="currency"),
Measure("cpc", divide(measure("spend"), measure("clicks"))),
),
)The rest of the surface
Your company’s context, ready for every agent.
$ segmentstream workspace create acme --region eu
▸ workspace ready · data, objects, metrics and access rules in one place
▸ connect Claude, ChatGPT or Cursor with one connector
▸ tell your agent: “add our billing API as a source”
Our engineers build the first version on your data in two weeks, at a fixed price.
Or join the waitlist for self-serve:
Pilots are open now. Self-serve opens to the waitlist this fall.