Built on ClickHouse

Every trade. Every market. One query away.

Outcome is a warehouse of prediction market history: full price paths and transaction-level trades, from open to resolution. Bring SQL, get answers.

  • Full price history for every market, trade by trade
  • Transaction-level records, not daily rollups
  • Saved queries and charts your team can share
daily-yes-volume.sql
-- Daily YES volume on PRES-2028
SELECT
toStartOfDay(created_time) AS day,
sumIf(count, taker_side = 'yes') AS yes_volume
FROM trades
WHERE ticker = 'PRES-2028'
AND created_time >= now() - INTERVAL 30 DAY
GROUP BY day
ORDER BY day
dayyes_volume
2026-07-131,204,118
2026-07-14982,440
2026-07-151,378,905
3 rows · 184 ms · 2.1 MB read
01 · the workbench

From first query to shared dashboard

Outcome is the warehouse, the API, and the workbench in one place, so exploring a market and shipping an analysis use the same tools.

Full history in SQL

Query a ClickHouse warehouse holding every market, price point, and trade from open to resolution. No sampling, no rollups you did not ask for.

An API of exactly one endpoint

POST your SQL to /v1/execute and JSON rows come back. No pagination to walk, no endpoint sprawl to memorize, no client library to babysit.

An analyst in the loop

The playground chat writes and runs ClickHouse SQL for you, reads the results, and stages query diffs you review before they apply.

Charts without the export

Turn any result set into a chart, tune scales and units, and keep it alongside the query that produced it.

Built for teams

One workspace for saved queries, members, and API keys, so the whole team works from the same numbers.

Pay for what you run

Credit-based billing with no seat pricing. Every response reports the bytes read and credits used, so cost is never a surprise.

02 · the api

The whole API is one endpoint.

Two tables, one route. POST ClickHouse SQL to /v1/execute and rows come back as JSON, with duration, bytes read, and credits used reported on every response. If you can write a SELECT, you already know the whole surface.

markets
  • venuetext
  • tickertext
  • titletext
  • statustext
  • close_timetimestamptz
  • created_timetimestamptz
trades
  • venuetext
  • tickertext
  • taker_sidetext
  • pricenumeric
  • countbigint
  • created_timetimestamptz
terminal
$ curl -X POST https://api.outcome.sh/v1/execute \
    -H "Authorization: Bearer $OUTCOME_API_KEY" \
    -d '{"query": "SELECT venue, count() AS trades FROM trades GROUP BY venue"}'
venuetrades
kalshi184,220,913
200 OKX-Duration-Ms: 184X-Bytes-Read: 2104329X-Credits-Used: 12

Stop scraping. Start querying.

Magic-link sign in, no password and no credit card. Your first query runs in minutes.

Get started