INV—W/SCORE · CASE · 2026 EIGHT FEEDS → ONE TABLE · FIG. 01
Invental/ Works/ Real-time Odds Platform
Sports-data Real-time — Confidential engagement · sports-tech / esports

Real-time odds & predictions.

An esports audience product that had to do three hard things at once: aggregate live betting odds across many bookmakers, keep scores updating by the second, and predict who wins — all from data feeds that constantly disagree with each other.

Confidential · under NDA
Full-stack real-time platform · data → product
Odds aggregation · Live relay · ML predictions · Monetization
Web · real-time · subscription
Sports-tech / esports data
Real-time esports odds, live scores and AI predictions platform
[ M · 01 ]
8
Third-party bookmaker feeds unified into one normalized odds table
[ M · 02 ]
99%
Match & team coverage after entity resolution — up from ~1%
[ M · 03 ]
262K
Live-match data snapshots ingested in ~1 month, across 454 matches
[ M · 04 ]
5s
Incremental sync that replaced a 436K-message-per-connection flood

§ 01Context

The product is a companion app for competitive esports fans and bettors. In one place it shows live scores for in-progress matches, a best-available-odds table that compares coefficients across many bookmakers, and AI match predictions — win probability plus derived markets. It runs on a freemium subscription. In a product like this the interface is the easy part; the data is the product, and the data is the problem.

§ 02Challenge

Every source disagrees with every other source. Bookmaker feeds are wildly inconsistent — one keys outcomes by numeric IDs instead of team codes; another's “is-live” flag is unreliable, so live vs. pre-match has to be inferred from time; two of them have no API at all. The same match appears under slightly different names across providers and has to be merged into one. Live scores must update in near-real-time and never silently go dark. And the prediction models are useless unless thousands of team-name variants map to a single canonical identity.

The hard part of an odds product isn't the UI — it's making eight disagreeing feeds tell one consistent story, in real time.— Engagement scope

§ 03Architecture

We built it as a set of cooperating services, each owning one hard job:

A later generation re-architected the coupled services onto an event bus with typed event contracts, an outbox pattern for reliable publishing, a columnar store for odds history, and an in-memory cache for millisecond live state — a clean CQRS/streaming shape for live sports data.

Subsystem · 01 Aggregation & normalization

One adapter per feed, one normalized table — including odds synthesized for API-less bookmakers via correction coefficients.

Provider adaptersDedupFallback chain
Subsystem · 02 Real-time relay

A WebSocket relay carrying odds, live updates and predictions to clients — rich feed preferred, polling as fallback.

WebSocketSocket.ioIncremental diff
Subsystem · 03 ML predictions

Python + scikit-learn: ELO and draft-synergy models, fed by live snapshots, mapped to 99% of teams via an ID dictionary.

PythonFastAPIscikit-learnELO
Subsystem · 04 Event-driven core

Typed events, outbox publishing, a columnar store for odds history and an in-memory cache for live state.

NATSClickHouseRedisOutbox

One connection once flooded the backend with 436,000 messages and a 3.4M backlog. The fix was to stop bulk-syncing and diff every five seconds instead.

— Reliability post-mortem

§ 04Real-time & reliability

Real-time systems fail in ways demos never show. This one taught the lessons the hard way, and we fixed each at the root:

§ 05Result

  1. Eight feeds, one truth. Odds from eight sources — including two with no API — normalized into a single comparable table.
  2. Live data that stays live. Sub-second updates with automatic fallback and stale-state cleanup; 262K snapshots across 454 matches in a month.
  3. Predictions that actually resolve. Team coverage went from ~1% to 99% after entity resolution — the difference between a model that fires and one that can't.
  4. A core built to last. A typed, event-driven backbone the product can grow on.

— Have a real-time or data-heavy product in mind? Start a conversation.

— More work View all case studies ↗
Pet-nutrition platform
Pet-nutrition platform
2026Data / Shopify
Ingredient-intelligence platform & widget
Language app
Language app
2026EdTech / AI
A dialect-first language-learning app
Custom Shopify App
Custom Shopify App
2026Shopify
Custom Shopify app — storefront to App Store

Building something real-time? Let's make it hold.

We build data-heavy, real-time products — ingestion, aggregation, live relays and the ML on top. Thirty minutes on a call is usually enough to see if we're a fit.

Book an intro call