Articles

    How Modern iGaming Storefronts Are Built: Catalogue, Search and Merchandising

    By Matteo RuskavellAugust 4, 2026Updated October 26, 20269 min read

    A player taps a jackpot tile that a market rule should have hidden and gets an error. Back in the lobby, the week's biggest release sits in row nine, behind three titles from the same provider. Nobody chose this. It happened because catalogue data, provider feeds, ranking and merchandising were built by different teams as separate projects, and each gap became a fault the player can see.

    The storefront allocates scarce attention

    Under the tiles, a casino lobby is a decision system. It decides which titles are available at all, which can be found, which are allowed for a given player and which are visible right now. These decisions drive launch rate, session depth, reliance on a few providers, freshness and how betting is spread across the catalogue.

    No number of tiles, banners and categories will hide incomplete metadata, an unreliable provider feed or a ranking model that cannot explain why a title is on screen. The lobby depends on everything behind it: the data, market availability, ranking goals, manual rules and tracking. So catalogue operations, search, ranking and merchandising must work as one product. Its job is to make the right eligible game easy to find while the operator keeps control of business and experience.

    Every one of these decisions reads from catalogue data. The catalogue is the lobby's source of truth. A loose pile of provider labels and image links makes filters misleading, leaves search incomplete, lets categories decay and turns merchandising into costly guesswork.

    First, separate fixed identity from changing distribution data. Identity: internal and provider game IDs, title, provider, game type, theme, mechanic, orientation, supported devices and assets. Distribution: launch status, allowed markets, currencies, language assets, RTP setup, allowed segments and provider endpoint status. Commercial data sits next to both: priority, eligibility for featuring, placement terms in contracts and reporting ownership.

    Keeping them apart matters. A game can exist globally and still be unavailable in a market, switched off during an incident, missing a local asset or excluded from one surface. None of that should be hard-coded in the apps. Controlled attributes let eligibility be decided at the moment of each request.

    Player-level rules make this sharper. Where a regulator sets stake limits by age band, as Great Britain now does for online slots, the same title needs a different stake setup depending on who opens it. A lobby that checks eligibility per market but not per player will launch the right game with the wrong limits. The error first shows up in a compliance review.

    Categories should follow what players want; provider labels are just raw material. "Slots" is a product type. "Quick rounds", "jackpot games", "new releases", "classic fruit themes" and "live tables" are ways players look for games. Give each category an owner, a definition, a source field and a fallback rule. A tag with no owner becomes decoration. A category with no measurable purpose becomes a permanent shelf nobody checks.

    A metadata contract keeps these layers honest by guaranteeing the fields each user of the data depends on. Game and provider IDs must support removing duplicates, launching and reporting, or you get duplicate tiles and broken analytics. Market eligibility must filter before display, or players click into dead ends. Type and tags must support filters and categories, or discovery gets weaker. Asset versions must render tiles, detail pages and campaigns, or images break. Release status must control rollout, or titles appear before they are checked. Operational status must hide outages, or players are sent to launches that fail.

    Version the catalogue as well, so a provider metadata change, an editor tag change, and a market-rule eligibility change are all distinguishable from one another. Without that, a decline in launch rate turns into a long forensic exercise.

    Provider feeds need a control layer

    Provider integration is an operational dependency as well as a content deal. Providers differ in their IDs, metadata completeness, images, statuses, languages, launch URLs and update rhythm. Aggregation reduces connections but not the work of keeping data clean.

    Put one standard intake pipeline between the feeds and the public catalogue. It checks required fields, cleans values, maps categories, removes duplicates, fetches assets and sets aside records that fail. Setting aside is the right default. Publishing an incomplete title, or blocking a whole feed because of one broken game, are both worse.

    Treat provider labels such as "featured", "popular" and "new" as signals only. They can reflect a release plan, a broad campaign, or simply inconsistent editorial practice at the provider. Internal rules decide placement, every time.

    Monitor more than whether the feed succeeded. Watch metadata completeness, failed asset downloads, launch errors by provider, disabled games still on show and the time from provider release to approved availability. An HTTP 200 can still bring stale, incomplete or wrongly mapped data. Keep the raw payloads next to the cleaned records. Then, when a category vanishes or a tag is wrong, a team can compare source and mapping, and a provider schema change does not slip through unnoticed.

    Search solves a different discovery job

    Players rarely type an exact title. They search by provider, theme, mechanic, an abbreviation, a spelling variation, or a half-remembered fragment, and every search is a signal that browsing did not meet a discovery need.

    Index the title, the normalised title, provider, aliases, internal tags, type, and selected descriptions, but not every field, because broad indexing manufactures false matches. Normalise punctuation, spacing, common abbreviations, relevant transliteration, and the typos you can predict.

    Set an order of relevance. Exact titles usually beat partial matches. A provider match may beat a theme match when the query looks like a provider name. Filter for eligibility before showing results, never after a tile click. An unavailable result hurts trust and the search success numbers you rely on.

    Measure the share of searches with no results or a rephrased query, result clicks, launches after search and time from query to launch. Split them by market, device, language, query type and provider. Many clicks but few launches can mean a launch failure, poor relevance or a tile that does not match the game behind it. Repeated no-result searches point to missing aliases, a missing provider, demand for a title you do not have or weak categories. They belong in the product backlog, not only in a support ticket.

    Ranking needs explicit business constraints

    Search serves players who know what they want; ranking decides what everyone else sees first. The default lobby order is where product, commercial and technical priorities clash. Pure popularity locks in today's winners. Pure commercial ranking keeps pushing titles players skip. Pure personalisation fails for new players, new games, thin data and changing availability.

    Split the work into two steps: pick candidates, then rank them. A candidate must be active, allowed in the market, supported on the device, have working assets, be technically healthy and fit the category. Only then score it, using recent launches, repeat play, provider preference, freshness, manual priority and overall performance.

    These scores cannot be black boxes. A team should be able to see that a title was allowed in the market, matched a category, got a freshness boost, and was then held below a certain position by a diversity rule. Explanations like this make editorial control, incident investigation and valid A/B tests possible at all.

    Two situations break any score built only on history, so treat "cold start" as its own case. New visitors have no history, and new games have no popularity data. Use curated starter rows, measured exposure for new releases and diversity limits, so no single provider or mechanic dominates. This does not promise equal traffic for every game. It stops a self-reinforcing ranking loop from hiding most of the catalogue. Sculley and colleagues at Google described this in "Hidden Technical Debt in Machine Learning Systems" (NeurIPS 2015). A model that decides what users see also shapes the data it is retrained on, so yesterday's exposure becomes tomorrow's proof of popularity.

    The default order matters more than it seems. Every row a visitor scrolls past without launching is a chance to leave, and your own logs show how steep that drop is. Plot launch probability against the row a session first clicked. The fall after the first screen is usually the clearest argument for getting the top rows right.

    Set goals and guardrails for each surface. If you optimise only launch rate, familiar games win and discovery shrinks. If you optimise only revenue per session, the lobby gets repetitive and new releases never get tested. Track diversity, repeat visits, search use, provider concentration and launch errors right next to the commercial numbers.

    Why not let a model run the whole lobby? Editors are slow, expensive and biased toward providers they know, while a model can re-rank every hour on fresh behaviour. Where data is plentiful, for example a market with 50,000 daily lobby visits and a stable catalogue, that argument works. It fails in small markets, in the first weeks after launch and around big releases, where history is thin and the loop described above does the most harm. So most operators end up with a model for the default order and editors for a limited set of rows.

    Merchandising rules turn strategy into placement

    Ranking sets the default order; merchandising is how editors change that order on purpose. It turns commercial goals into new-release rows, seasonal collections, provider spotlights, editor's picks, pinned tiles and exclusions. Manual curation without an expiry date, audience, owner or measurement will fail every time.

    For each placement, record the surface, market, audience, start and end dates, priority, creative, owner, reason and expected result. Let it expire automatically unless someone renews it. A permanent pin becomes a governance debt: it outlives staff changes and slowly pushes out newer content.

    Settle conflicts in one place. One title can be pinned in a new-release row, hidden because its provider is having problems, excluded in a market and picked by personalisation, all at the same time. Operational suppression beats editorial placement. Market availability beats all presentation. A rank cap stops a pin from taking over every surface, unless that is deliberate and written down.

    Safer-gambling flags sit above all of this. A customer under a safer-gambling intervention, or showing signs of harm, should not see jackpot spotlights or rows linked to bonuses. GB rules already require licensees to stop marketing and new bonus offers once strong signs of harm appear. A promotional row in the lobby is hard to defend as anything but marketing. Model the flag as a suppression rule checked for each player at request time, so no editorial pin can outrank it.

    Keep the rule types distinct:

    • Eligibility rules decide whether a game may appear.
    • Candidate rules decide which games enter a row or category.
    • Ranking rules order eligible candidates.
    • Presentation rules control artwork, labels, and tile variants.
    • Suppression rules remove games during incidents, contract changes, or asset failures.

    Mixing them up is fragile. Deleting a tag to hide a game can break search, reporting and past category analysis all at once. Editing popularity to force a title into first place spoils a signal other systems rely on.

    Measure the path from impression to launch

    A tile view only proves that a row loaded. Analytics must show where discovery fails: did a player see a relevant game, click it, launch it and come back? That needs a stable chain from impression to outcome.

    Metric Definition and decision
    Eligible catalogue size Games allowed for a market/device; detects availability and integration gaps
    Tile impression rate Visible tiles per lobby visit; validates exposure instrumentation
    Game launch rate Successful launches per tile click; separates discovery from technical failure
    Search success rate Searches followed by a launch; measures high-intent discovery
    Category exit rate Category visits without tile interaction; identifies weak intent or ranking
    Provider concentration Share of launches or turnover by provider; reveals dependency or imbalance
    Fresh-title adoption New-game launches among exposed eligible users; tests release discovery without vanity exposure

    Instrument tile_impression, tile_click, search_submitted, search_result_clicked, game_launch_requested, game_launch_succeeded, and game_launch_failed, each carrying the surface, row, rank, game ID, provider, query where relevant, market, device, logged-in state, catalogue version, and ranking-rule version.

    These versions let an analyst compare changed rows by ranking version, which a release date cannot do. Catalogue snapshots show a change in exposure caused by a missing asset or an eligibility change, even with no front-end release. Where traffic allows, use cohorts and controlled tests. Compare a revised row against a control group that keeps the old row, on launch rate, repeat lobby visits, session depth, use of search instead and provider concentration. More clicks are not a win if launches do not rise, or if the clicks just moved from another row.

    Read discovery as a chain. Each surface multiplies the next, so a rate that looks healthy on its own can still starve launches further down:

    discovery yield = impression rate × click-through × launch success launches per 1,000 visits = 1,000 × tiles-seen-rate × CTR × launch-success

    Take a row where, over 1,000 lobby visits, players see the row 80% of the time, 12% click a tile, and 92% of those clicks reach a running game.

    launches = 1,000 × 0.80 × 0.12 × 0.92 = 88 per 1,000 visits

    Now a provider outage drops launch success on that row from 92% to 70% while impressions and clicks look unchanged:

    launches = 1,000 × 0.80 × 0.12 × 0.70 = 67 per 1,000 visits

    That is a 24% drop in launches with no visible change in engagement. Category exit and CTR stay flat, while the leak is in launch success: dead tiles, results not allowed in the market, provider errors. Multiply the whole chain before you credit or blame any one row. Compare each step with its usual level and investigate the step that moved. And remember: the smallest number is not always the one that broke.

    Release storefront changes like product changes, then assign owners

    Most lobby changes never go through a release pipeline. The lobby changes through code, settings, provider data, an editor's action or an outage. If only code counts as a release, you miss most of what players see change. Before a ranking or merchandising rollout, define the surface, audience, main metric, guardrails, duration and rollback trigger. Test eligibility separately from ranking, because unavailable titles inside a category spoil the evidence. Check assets and launches on every surface: mobile web, app and desktop. Watch speed too. A heavier ranking call runs on every lobby load, so compare time to first tile before and after. Any slowdown is a cost the new ranking must earn back in launches.

    Feature flags let you expose changes in stages, but each one needs an owner and an end date. Keep a list with each flag's purpose, owner, start date, planned removal date and a link to the decision. A forgotten flag can serve different logic to an unknown audience months after the test ended. When a number moves, check whether the eligible pool, placement rules, ranking logic or tracking changed, including changes hidden inside a harmless-looking content update.

    Shelves decay when nobody owns them. No single team owns every decision, but the boundaries must be clear. Product owns objectives, priorities and the trade-offs between discovery, commercial return and upkeep. Engineering owns reliability, data contracts, versions and monitoring. Content or casino operations owns editorial choices within the rules. Data owns metric definitions, event quality and test analysis. Provider managers own escalations and responsibility for source feeds.

    A disciplined weekly review can cover catalogue completeness, provider incidents, searches with no results, launch failures, category performance, old placements and the biggest ranking shifts of the week. Give every oddity a named owner and a due date. The review is there to find where the system no longer matches the catalogue anyone intended. Checking every row is neither possible nor useful.

    Start with the weakest link, which is rarely the most visible one. Fix messy provider data through the catalogue contract before you try personalisation. If search cannot find what browsing hides, fix indexing and categories before adding another home-page row. If placements never expire on their own, build a rule registry before hiring more content staff.

    Every visible game should have an explainable eligibility path, a measurable placement path, and a reliable launch path. That is what gives operators control without turning the lobby into either a static catalogue or an opaque ranking machine.

    The test is concrete. Take the 20 tiles with the most impressions in your largest market and trace each through those three paths. Any tile whose placement nobody can explain, or whose launch success sits below a threshold you set (95% is a reasonable start), is where the work starts.