The challenge
A data feed does not give an operator a book. It gives raw prices reflecting somebody else’s view of probability. Turning that into something a sportsbook can actually offer is the trading function, and it is where the margin is made or lost.
That work needs a system. Traders have to decide how much margin to apply and where, which markets to offer and when to open and close them, how much liability to accept on any given outcome, what to do when the feed is wrong or absent, and how to settle when a result is disputed. Doing any of that in the primary betting platform, or by direct database access, is how operators end up unable to answer what happened after a bad afternoon.
The additional constraint is that every one of those actions is commercially significant and potentially subject to regulatory scrutiny. A price change made by a trader must be attributable.
Approach
Pricing is a pipeline, not an edit. Feed probability enters, margin is applied, the result is rounded to valid displayable odds, and the price is published. Each stage is separate and inspectable, so a trader can see why an offered price is what it is rather than being presented with a number.
The rounding step deserves more attention than it usually gets. Odds are displayed in increments, and rounding naively at the final step gives margin away on every selection. Rounding is applied deliberately, in the direction that preserves the intended overround.
Margin is configurable by scope, with inheritance. A default sits at sport level, overridden per competition, then per market type, then per individual market. Traders work at whichever level is appropriate, and a change to a broad default does not silently overwrite the specific adjustments made underneath it.
Overround also has to be distributed across selections, and the distribution is a commercial choice rather than a technical one. Applying margin evenly and weighting it towards longshots produce different books, and the system supports the choice rather than assuming one.
Offer management is explicit state. Which markets exist, which are visible, which are open for betting, and which are suspended are separate concerns. A market can exist and not be offered, or be offered and suspended. Collapsing these into one flag is how markets end up accepting bets when nobody intended them to.
Suspension propagates immediately, because the interval between a trader suspending a market and acceptance stopping is exactly when informed money arrives.
Risk is calculated as bets land, not on request. Liability per selection, per market and across correlated markets updates continuously as bets are accepted, so a trader sees current exposure rather than a figure that was accurate a minute ago.
Thresholds raise alerts rather than requiring someone to be watching. The realistic operating condition is a small number of traders responsible for a large number of simultaneous markets, so the system has to direct attention rather than assume it.
Manual events are first-class, not a workaround. No feed covers everything. Local competitions, novelty markets and specials have to be created and priced by hand, and operators that treat this as an edge case end up with a parallel process that settlement and reporting do not understand.
A manually created event enters the same pipeline as a feed event. It has the same market structure, the same suspension behaviour, the same settlement path and the same audit trail. The only difference is where the price originated.
Settlement is automatic with deliberate override. Most settlement follows the feed. When the feed is wrong, delayed, or covers an event the operator created, a trader settles manually.
That override is the most sensitive action in the system, so it is the most tightly controlled: permissioned, reasoned, recorded, and reversible through the same append-only mechanism that handles feed corrections. Settlement is never overwritten, which means a disputed payout can be reconstructed rather than argued about.
The event log is the product, not a side effect. Every trading action records who did it, when, what the value was before and what it became. Price changes, margin adjustments, suspensions, manual settlements and limit changes are all captured the same way.
This serves three purposes that are usually discovered in this order: investigating a bad result, answering a customer dispute, and satisfying a regulator. Building it in from the start is considerably cheaper than reconstructing intent from application logs afterwards.
Results
The system gives traders configurable margin applied per sport, competition and market, explicit control over what is offered and when, live liability and exposure as bets are accepted, the ability to create and price events no feed covers, and controlled settlement override, with every action recorded against an actor and a timestamp.
The decision that mattered most was routing manually created events through the same pipeline as feed events. It costs more up front than a separate path, and it means settlement, reporting, risk and audit work identically regardless of where an event came from, which is the difference between a trading system and a trading system plus a set of spreadsheets nobody trusts.