What game is this? How Discord tackled a game entity resolution problem
Delphine Fumar
Content Manager
@Gameopedia
Read Time :
8 minutes

Illustrative example of resolving a gameplay signal to the correct game entity
Not every bad game match looks broken
How do you spot a bad game data match from a player's activity? Usually you don't. The session record looks complete, the timestamp and duration are right, and it passes every validation you've written. But it might be attached to the wrong game.
Say someone plays Modern Warfare for two hours. Which one? Call of Duty 4: Modern Warfare shipped in 2007, a remaster followed in 2016, and a reboot took the name again in 2019. Your system still has to work out which game the signal refers to. If the signal carries little more than the title string, it may not contain enough evidence to distinguish the 2007 release from the 2016 remaster or the 2019 reboot, leaving the activity unresolved or at risk of being matched to the wrong title.
That's game entity resolution: working out which game a signal refers to, then tying it to an identity your other systems can rely on. It's hard because the industry is fragmented: games ship across hundreds of combinations of distributor, platform, release pattern and game type, and each combination is another way for the same game to reach you under a different name. Once a game signal is tied to the wrong entity, that inconsistency can carry into the game information other systems and experiences rely on. Reporting, search, recommendations and the game pages your players see all inherit that one decision.
Discord tackled this problem at scale. More than 20,000 games are played on the platform every month, and stray game entities were turning up across internal systems, other platforms, and public and community sources, each one adding maintenance. We worked with Discord on the game information behind those decisions, learning a few things along the way.
A matcher can't decide with evidence it doesn't have
Most teams respond to bad matches by writing more rules. That works until the rules run out of facts to work with and start piling up edge cases.
Start with what the record carries
Go back to those two hours of Modern Warfare. If the signal carries the title and nothing else, no rule will separate 2007 from 2016 from 2019, because every rule you write is reading the same string. Tightening it doesn't help in either direction: exact matching drops legitimate matches over a punctuation mark, a subtitle or a regional name, and fuzzy matching recovers those while merging products that were never the same thing.
What separates them are facts from the same axes that made the name ambiguous in the first place: which platform it ran on, when it released, which storefront it came through, whether a verified identifier came with it.
So before touching the matching logic, establish whether the record in front of it holds enough to decide anything.
Then ask what the match is for
Reporting, search, recommendations and game pages all inherit the same decision, but they don't all want it at the same level.
If you're gauging interest in a title to run a promotion, you need to know exactly which edition of which release someone has, because that's the thing being sold.
If you're using play activity to improve recommendations, you want everything under Modern Warfare pointing at relevant interests; because a player's taste doesn't stop at this one game edition, a franchise or a genre.
Both answers are correct, and a catalog that can only serve one of them will be wrong for somebody every time.
Related, distinct, or different
Every incoming record forces one of three calls.
It's the same entity as something you already hold.
It's a related but distinct entity, an edition or a port or a remaster or a DLC item.
Or it's a different game altogether.
A catalog that can only merge or separate has no home for the middle case, so related entities get forced into one of the two wrong ones.
What works is records that stay addressable on their own, with the relationship to the game held explicitly, so activity can aggregate up to the title while your growth team still addresses a single edition.
Gameopedia holds more than 180,000 game titles, editions and DLCs as distinct records with the relationships between them intact, which is what lets one catalog answer at both levels. With Discord, that went in as another game information layer inside the systems already running.
Identifying a game once should be the last time anyone does it
Resolving a difficult record is investigative work. Say you settle how the deluxe edition relates to the base game and your reporting comes right. Next week another partner feed lands, and your colleague researches the same relationship from scratch, because your answer is sitting inside an analytics pipeline where nobody else can reach it.
Your reporting problem is solved. Their listing problem is still open, and it was the same piece of knowledge both times.
What a canonical game ID does
A canonical game ID lets every system point at the same resolved entity. Keep the edition records addressable and their relationships visible, and your growth team works at product level while you aggregate at game level, off one source.
It doesn't perform the identification. You still need evidence tying each source record to the right entity, and that evidence should stay attached to the decision, so anyone can reopen the call when a source renames a title.
Avoid the source ID shortcut
You might think that a shortcut is to reuse a source ID instead. However, a storefront ID or launcher ID is authoritative inside its own namespace and says nothing about how that record relates to anything outside it. One source will issue separate IDs for the base game, an edition, a DLC item and a regional listing. Minting your own ID for every unrecognized record does the same thing: it renames the fragmentation.
Gameopedia uses deterministic game entity keys to resolve the same source record consistently to the same game entity.
One identity, every surface
Discord's case study shows why this matters once a platform has more than one surface. The same game turns up through activity shared with friends, game interests on profiles, game communities, and game profiles. All of them need the same answer to "what game is this?", or the platform contradicts itself in front of players. Our deterministic game entity keys went into the catalog system Discord already had, which is a large part of why integration moved quickly.
Tomorrow's releases don't care about today's clean catalog
Everything so far describes work you do to a record. The catch is that records don't stop arriving.
A game ships, then a deluxe edition, then a port to another platform, a regional release under a different name, a remaster four years later that reopens a question you thought you'd closed: "what game is this?"
Categories move too. A genre field written before battle royale existed had to be retrofitted across every record once it did. Live service did the same thing to business model. Something else will arrive while your scheme sits still.
Ad-hoc labels don't survive that. Teams invent their own, the definitions drift, and comparing this quarter's releases against last year's stops meaning much.
A structured taxonomy is what holds. New releases get described in dimensions that already exist, so a game added this month is comparable to one added three years ago without anybody rebuilding the scheme. When something genuinely new does show up, it gets absorbed once and everyone downstream inherits it, rather than four teams patching four definitions.
Depth is what makes that worth having. Genre alone puts thousands of games in the same bucket and can't tell you why a player who finished one would want the other. Gameopedia's taxonomy goes past genre into business model, themes, social and narrative features, and game vibes, drawn from more than 22,000 selectable attributes, with roughly 1,000 to 1,500 applying to the largest games. Those become dimensions your analysis can hold steady on while the catalog grows underneath it.
None of it holds by itself. With Discord, the work ran in phases, from backlog mapping through daily loops into ongoing enrichment, and the enrichment phase is the one without an end date. Games keep releasing, so the taxonomy keeps getting applied.
"Gameopedia has this taxonomy, which is fantastic, but the value add has really been the service provided on top of that."
– Timothy Lu, Senior Staff Data Scientist, Discord
A higher match rate can hide a worse catalog
So how do you tell if any of it is working? You can't audit what you can't see, so you're left measuring, and the obvious measure is the one that lies to you.
Match rate counts decisions made. It doesn't count decisions made well. Collapse the three Modern Warfares into a single record and every session resolves cleanly, your match rate goes up, and you've just made it impossible to run a promotion on one release. The number improved because the catalog got worse.
Three things are worth measuring on one workflow you care about:
Correctness
Match correctness only exists relative to a purpose. There's no catalog-wide score. The question is whether a match holds the distinctions the workflow in front of you depends on, and that's a different answer for merchandising than it is for recommendations. Pick one workflow you care about and measure that.
Useful coverage
Weight by activity rather than volume. Five unresolved records carrying heavy usage will distort your reporting more than several hundred that barely register. A percentage of rows resolved tells you very little. A percentage of activity reaching a verified game tells you something.
Maintenance
The last question is what it costs to stay there. If the same titles come back every month, they were handled, not resolved, and that's a running expense hiding in someone's week.
Two things about how you test any of this. Run both approaches on the same sample and include the records that didn't resolve, because comparing accepted matches to accepted matches flatters whichever one gave up more often. And look hardest at whatever looks like a win, since that's where a merge is most likely sitting.
With Discord, the work recovered 2% additional monthly voice gameplay attribution from stray game entities, alongside a lower maintenance burden and more internal confidence in the gaming data.
Which records keep coming back to your team?
Nobody sets out to fix game entity resolution. It arrives as a report that needs explaining before anyone trusts it, a promotion that can't target the release it was built for, and the same few titles landing on somebody's desk again in a month.
That won't settle down on its own, because the cause sits outside your pipeline. Games keep shipping across more distributors, more platforms, more editions and more names for the same thing, and every new combination is another chance for your catalog to answer confidently and be wrong. There will be a fourth Modern Warfare.
What it costs is real activity. Players are already telling you what they play. When activity can’t be confidently connected to the right game entity, attribution can remain incomplete and the game information other systems and experiences rely on becomes less consistent.
If that's familiar, it's worth a conversation with our team. We'll look at what your signals are missing and what it would take to stop resolving the same games twice.


