Market Data Entitlement Software Problems: The 7 That Fail an Exchange Audit, and How to Avoid Them
The most expensive failure in a market data entitlement build is an entitlement model shaped like software licensing, where a right attaches to a user or a machine and stays there. Exchanges do not count that way. Some count users, some count devices, some count applications, and some count every instance of a non display process separately. A seat-shaped model misreports the non display half of your estate silently, month after month, and you find out when an exchange opens a review covering several past years. The correction is retroactive, and it lands on a bill you cannot negotiate down with a better model built afterwards.
Why does the seat-shaped entitlement model keep getting built?
Because it is the model every engineer has seen before. Software asset management has trained a generation to think a licence belongs to a person or a machine, and the first data model somebody sketches for market data reproduces that assumption without anyone questioning it. It survives the first review because it describes terminals accurately, and terminals are the part of your estate everyone can see.
Then the exceptions arrive. One user is entitled to full depth on one venue and top of book on another. A single physical server carries an entitlement counted per application rather than per device. A risk engine restarts nightly and each instance counts. A price arrives from an exchange, passes through your own model, and reaches a client as derived data with its own rules and its own fee. None of that fits a seat, so it gets handled in a spreadsheet beside the system, which is exactly where you started.
Fix it by refusing to start development until the model expresses user based, device based, application based and non display counting as first class alternatives, with the counting basis carried on the entitlement rather than assumed globally. Ask any developer to model one specific case on a whiteboard before you sign: a single internal pricing service, consumed by four downstream applications, running three instances in production and one in disaster recovery. If they draw a user table, stop. That case is not an edge case in your estate. It is most of your exposure.
What goes wrong when the existing subscription spreadsheet is loaded as truth?
Loading it takes an afternoon. Believing it costs you the project. The workbook that currently drives your declarations carries forward last month's numbers with a few manual edits, was last fully reconciled during a reorganisation, and contains rows that nobody living can explain. Import it unchallenged and you have built a fast, confident system that produces wrong answers, which is materially worse than the spreadsheet, because people will now trust it.
The specific damage in this domain is that errors compound into declarations. A stale row means a user who left eighteen months ago is still being declared and paid for, or worse, a consumer who was added last year has never been declared at all. The first is money leaking. The second is the one that hurts in a review.
Treat migration as a reconciliation, scoped as weeks with your market data team rather than as a data load. Rebuild the population from the systems that hold live truth, meaning the vendor administration exports, the data access control system and your identity directory, then compare that population against the spreadsheet and work the differences one by one. Every difference gets a decision, an owner and a date. The output you want before go live is not a clean import. It is a list of every row the spreadsheet asserted that the source systems do not support, with a named person's judgement recorded against each.
That list is uncomfortable reading. It is also the single most valuable artefact the project produces, because it is the first honest picture of the estate anyone has had.
Why do the vendor, permissioning and identity feeds break after launch?
Because they are not really feeds. They are exports, produced by systems owned by other people, in formats that change when those people change something for their own reasons. A vendor administration export gains a column. The permissioning system's export changes how it represents a group. Human resources (HR) moves to a new identity platform and the leaver attribute you keyed on is now expressed differently. Nothing errors. The file parses. The counts drift.
The identity side is the one that quietly breaks declarations. Joiners, movers and leavers determine which cost centre carries a subscription and whether a person should be counted at all, and a mover who changed desks last quarter but kept their entitlement is both a recharge dispute and a declaration error at once.
Build three defences. First, validate on shape and volume rather than on parse success, so a source that returns eleven per cent fewer records than its own trailing average halts the run and raises a ticket instead of producing a smaller declaration. Second, keep the raw source file for every collection, immutably, so when a count is challenged in two years you can show what the source actually said on the day. Third, give every source a named owner on both sides and a documented expectation of what it contains, because the failures are organisational as often as technical.
Then reconcile continuously rather than monthly. A daily comparison between the identity directory population and the entitled population turns a quarterly surprise into a two line exception queue.
What happens when non display and derived data use is never instrumented?
This is the gap that makes audits expensive, because it is the half of the estate nobody can see. A developer built a price cache in 2019 and four other systems now read from it. A client facing calculator has been republishing a vendor field into a portal for two years. A model transforms an exchange price and the output reaches customers, which may make it derived data with its own policy and its own fee. None of that appears in any subscription inventory, because no subscription was ever taken out for it.
The usual substitute is a spreadsheet of applications maintained by hand from architecture diagrams. That records intent, not consumption, and it goes stale the first time a team deploys something without telling you.
Instrument at the point of use. Each internal service that reads a price emits an event carrying the application identifier, the entitlement it is consuming under, the venue and the instance, and those events roll into the monthly declaration. This is an engineering programme with named owners in other teams, not a data collection task, and any developer who describes it as easy has not done it. Budget the negotiation, not just the code.
For derived data, map at field level rather than product level. The exposure is almost never a product you know about. It is a specific field in a specific output that somebody classified informally years ago, and field level mapping with the classification, its author and its date attached is what turns that from a discovery into a record.
Should you build custom or configure what you already own?
If your estate is a few dozen terminals from one or two vendors, with no internal redistribution, no derived data and no non display declarations beyond the obvious, do not build. A disciplined spreadsheet reviewed quarterly is honest, cheap and proportionate, and TRG Screen or MDSL will cover you properly when you outgrow it.
If you already own one of those products, check what you have configured before concluding it cannot help. Both hold contracts, subscriptions, cost lines and invoice reconciliation, and firms routinely run them as a passive inventory with notice period tracking switched off and invoice matching never set up. Getting your contract dates and renewal notices actually loaded is weeks of work inside a tool you already pay for, and it captures the fastest saving available in this discipline, which is cancelling something unused before the notice window closes.
The line is instrumentation. A packaged inventory knows what you told it. Nobody can sell you a connector for a system your own developers wrote, and that is where non display usage and internal redistribution live. Most large firms end up running a packaged inventory alongside a custom instrumentation and declaration layer, not replacing one with the other, and proposing a full replacement of a working inventory is usually a sign a developer wants a bigger project.
How do hidden costs get into the quote?
The largest omission is per exchange work. Each declaration format, each policy interpretation and each reconciliation is separate effort, so a quote priced around your largest exchange is not a quote for the other eleven. Ask for the price of exchange two and exchange three explicitly, in writing, at the start.
The second is the negotiation cost of instrumentation. Every internal application that consumes prices has an owning team with its own roadmap, and getting an emitter into their release is a conversation before it is a code change. Firms that budget engineering time and no relationship time run three months late on that workstream alone.
Then four that are routinely left out. Data quality remediation on your identity directory, which is frequently weeks before anything else works. Evidence storage sized against the longest audit look back you can be subject to, which is a multi year commitment rather than a launch cost. Parallel running through at least two declaration cycles, where your team produces both the old and the new numbers and explains any difference. And the validation package if compliance requires the evidence store to be write once, which changes the storage design rather than adding a setting.
What separates a build that survives an audit from one that does not?
Reproducibility. The artefact that makes an audit survivable is not a number, it is the reconciliation: the raw population you collected, the rules you applied, the exclusions you made, and the declared figure that resulted, preserved as an immutable monthly snapshot. You are not trying to prove you were right. You are showing your working, and a system that recalculates historical months against current parameters cannot do that.
Versioned policy interpretations. When your reading of a rule changes, last month's declared numbers must not move, but the reasoning behind them has to remain retrievable alongside the new one. A developer who has done this raises immutable monthly snapshots before you ask.
Notice periods treated as first class dates with escalating alerts to named people. This is the least interesting feature in the system and it produces the fastest payback, because the recurring failure in market data is discovering an unused service one month after its notice window closed.
An allocation basis a desk head can argue with line by line. Direct attribution where a subscription ties to a named user from the identity directory, and a documented, published basis where it does not. The political requirement is not accuracy, it is that the recharge cannot be dismissed as arbitrary.
And ownership settled before kickoff: the repository, the cloud accounts and the unrestricted right to hire another firm. For a system holding audit evidence that is a control requirement rather than a commercial preference, because you may need to produce and explain records long after the build relationship has ended.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- The average developer spends more than 17 hours a week dealing with maintenance issues such as debugging and refactoring, and about four of those hours on 'bad code' - waste that equates to nearly $85 billion annually worldwide in opportunity cost. Source: Stripe (2018) →
- The median annual wage for U.S. software developers was $133,080 in May 2024, and employment is projected to grow 15% from 2024 to 2034 - a core input to any in-house build-vs-buy TCO model. Source: U.S. Bureau of Labor Statistics (2024) →
- The right combination of digital transformation actions can unlock as much as US$1.25 trillion in additional market capitalization across Fortune 500 companies, while the wrong combinations put more than US$1.5 trillion at risk; companies with all three core factors (strategy, aligned technology, and change capability) saw a 5% market-value lift relative to peers. Source: Deloitte (2023) →
- In the Flexera 2025 State of ITAM report, respondents reported roughly 33% of SaaS spend is wasted, underscoring how paying for off-the-shelf seats and tiers that go unused erodes the supposed cost advantage of generic SaaS. Source: Flexera (2025) →
Olivia runs paid media: budgets, creative testing, tracking setup and the reporting that tells a client whether any of it worked. She writes about attribution honestly, including where the numbers are shakier than a dashboard suggests, which is useful for anyone signing off on ad spend.
View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.
Frequently asked questions
Our monthly declarations are assembled from three exports by one analyst. Where do we start?
Start by rebuilding the population from the systems that hold live truth, meaning the vendor administration exports, the data access control system and the identity directory, then compare that against what has actually been declared. Work the differences one at a time with a named owner and a dated decision against each. Do not automate the current process first, because automating a compilation nobody can defend just produces wrong numbers faster and gives them more credibility than they deserve.
How do we get internal application teams to instrument their price consumption?
Treat it as a programme with named owners rather than a data request, and go to the teams with a specific, small ask: emit an event carrying the application identifier, the entitlement, the venue and the instance. It helps enormously to start with one team that already feels exposed, ship it end to end, and use their declaration as the reference implementation everyone else copies. Any developer who quotes this workstream purely as code has not done it before.
Our identity directory has no reliable leaver feed. Does this project still work?
It works, but the data quality remediation comes first and it is usually weeks rather than days. Population accuracy is the foundation everything else sits on, because joiners, movers and leavers determine both which cost centre carries a subscription and whether a person should be counted at all. Budget it explicitly at the start. Firms that skip it end up with a fast system that confidently declares users who left eighteen months ago.
Can we keep TRG Screen or MDSL and build only the instrumentation layer?
That is the arrangement most large firms end up with, and it is usually the right one. The packaged inventory holds contracts, subscriptions, cost lines and invoice reconciliation, which it does well, and the custom layer handles the part nobody can sell you a connector for, meaning consumption inside applications you wrote yourself. Be wary of any proposal to replace a working inventory, since that adds scope without addressing the exposure that made you look.
How long does the evidence store need to retain declaration records?
Set retention against the longest audit look back you can be subject to, and treat it as an architecture decision made at design time rather than a setting added later. What you are retaining is not just the declared figure but the raw population, the rules applied, the exclusions and the resulting reconciliation, as an immutable monthly snapshot. Evidence created after a review notice arrives carries very little weight, which is the whole reason the store exists.
A desk head is disputing their recharge. What actually makes the number defensible?
Two things. Direct attribution wherever a subscription ties to a named user pulled from the identity directory, so the line is traceable to a person rather than to a formula. And a published, documented allocation basis for shared entitlements, agreed before the first recharge rather than defended after the first complaint. The political requirement is that the desk head can challenge one specific line rather than dismiss the whole number as arbitrary, and a breakdown that supports that ends most disputes quickly.
We cancelled a service and were still billed for a full quarter. Can software prevent that?
Yes, and it is the fastest payback in this category. Every subscription carries a contractual notice period that is not held in any inventory system by default, and the recurring failure is finding an unused service one month after the window closed. Track notice dates as first class fields with escalating alerts to a named person, and pair them with actual usage evidence so the conversation becomes a decision rather than an argument about whether anyone still needs it.
How long does it take to get the first exchange declaration produced automatically?
Twelve to eighteen weeks for a first release covering the entitlement model, collection from your two or three largest sources, contract and notice tracking and one exchange declaration end to end, in Digital Heroes delivery experience. Start with your largest exchange bill and your largest vendor, because getting one declaration right teaches the whole model and the second takes a fraction of the time. The pace after that is set by how many internal applications you add, and each one is a negotiation with its owning team.
Should we build the whole internal tool at once or start with an MVP?
Is a freelancer or an agency better for building an internal tool?
How many SaaS seats do we need before building custom becomes cheaper?
How do I vet a software development agency before signing a contract?
How long does it take to build an internal tool from scratch?
How do I vet a development agency for an internal tools project?
Can a custom internal tool connect to QuickBooks, Salesforce, and the other software we already use?
Why do agencies charge for a discovery phase instead of quoting for free?
Can I build my product on a no-code tool like Bubble instead of hiring developers?
Who owns the code when an agency builds our internal tool?
We run everything on spreadsheets and Airtable. How do we know it's time for custom software?
How much should a small business budget for its first custom app or website?
Who can build a custom internal tools system?
Digital Heroes builds custom internal tools systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.
Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.
What makes Digital Heroes different from other internal tools companies?
Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.
Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.
How can I check Digital Heroes is legitimate before getting in touch?
Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.
Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.