← claygeo

Prediction-market prices, matched to game state

Jun 20 – Jun 23 and Jul 16 – Jul 19, 2026

A sports-data researcher wanted a per-game dataset: for each completed baseball game, the moment a prediction-market price met a condition they had defined, lined up with the score and inning at that moment. The client defined the fields and the price rule. The job was to produce the rows and show they were right.

What was built

The pipeline and a viewer began as a proof of concept I built before the first contract, then fitted to the client's specification just before it started. The pipeline joins the league's play-by-play to each team's minute-by-minute price history and reduces every game that has a market to one row, with a notes document explaining each interpretation call and each kind of flag, and flagged games marked in the data. During the first contract I added a field the client requested, applied their review fixes, and ran the season to date. The second contract changed the price condition, rebuilt every field from that one setting, extended the extract to the latest completed games, and gave the viewer previous and next game controls.

What made it hold up

A stale price must not trigger the condition. The client's rule carries the last traded price through minutes without trades, so a crossing counts only on a real trade in that team's own contract. In the 200-game build I showed the client just before the first contract, I checked every crossing against its trades, and none came from a carried price. That check covers that build, not every row delivered afterwards.

The output reproduced the specification's worked examples, including a game where the team that met the condition first went on to lose. Where an example value in the specification was approximate, I used the computed value and noted the difference.

The second contract asked for games the first delivery had listed as having no market to be recovered, and most of them now produce rows. Every completed regular-season game in the new window ends as a row or a named exclusion: 1,226 games, 1,216 rows, 10 exclusions. That shows nothing was dropped silently, not that the ten excluded games have no market anywhere.

Beyond the ask

The deliverables were data files and notes. I also built a viewer that puts each row beside a chart of its game's price path. It is no longer online.

Clayton did outstanding work. His work was accurate and his response times were very fast. His assumptions and findings were clearly stated and easy to follow. He also contributed an unexpected value add to this project that far exceeded expectations. Well done, Clayton!

Client, Upwork · first engagementJun 20 – Jun 23, 2026

This is my second time working with Clayton, and he has proven to be efficient, accurate, and responsive. He consistently exceeds expectations and is a pleasure to work with. Excellent work again, Clayton!

Client, Upwork · second engagementJul 16 – Jul 19, 2026

Scope. Two Upwork contracts, four days each. The first had two milestones, recent games and then the season to date; the second was one fixed-scope rebuild with a viewer update. The client set the field definitions and the price rule and received the data files and notes. This page reproduces none of the client's data or specification.