Problems & solutions · Custom Software

Sanctions Screening Software Problems: The 7 That Cost Real Money, and How to Avoid Them

Sanctions Screening Software software overview illustration showing common problems and fixes.
The short answer

The most expensive failure in screening software is a hit queue ordered by arrival time. At 15:20 with forty three hits open and a Fedwire cutoff approaching, an analyst is working oldest first, which means the same handful of common surnames that generate hits every single day are consuming the clock while the two genuinely ambiguous names wait behind them. You pay twice. Legitimate commercial payments miss their window and your corporate clients notice, and the one hit that deserved forty minutes of investigation gets four. Neither cost appears in a false positive rate, which is why tuning the threshold is usually the wrong first move.

Why does the matching engine get scoped and the queue get skipped?

Because matching is the part that sounds like software. Transliteration, tokenisation, phonetic scoring and thresholds are concrete, demonstrable and fun to build. The queue is described as a screen, so it gets two weeks at the end of the project.

That inversion is backwards for almost every institution. Your screening risk is rarely that a name scored 82 instead of 87. It is that an analyst under deadline pressure cleared something quickly, or that a real hit sat behind thirty repeats of a name your team has dispositioned every week for two years.

The specific miss is recurrence. A hit that is identical to one you cleared last week, on the same customer against the same list entry for the same reason, should present as a one click confirmation with the prior decision and its rationale attached. It should not present as a fresh investigation. Doing that well depends on something most implementations get wrong at the data model level: keying a decision to the triple of subject, list entry and match reason, so recurrence is recognisable at all. Retrofitting that key after launch means every historical disposition is unusable for the purpose.

Scope the queue first. Order by time remaining against the relevant cutoff or onboarding service level, then by novelty. That alone typically removes the majority of the queue's clock time without touching coverage.

What goes wrong when you migrate lists, whitelists and disposition history?

The whitelist is the dangerous one. Every screening operation accumulates a list of subjects previously determined not to be matches, and in most institutions it is a spreadsheet with names in it. Migrating it as it stands imports a control you cannot defend, because a name whitelisted globally stops generating hits against list entries that did not exist when the decision was made.

Do not migrate it in that form. Convert each entry into a governed object: a specific customer against a specific list entry, with an owner, an expiry date and the evidence that supported the decision. Where that evidence cannot be reconstructed, the honest answer is to expire the entry and let it re screen, which will hurt for a fortnight and is far better than carrying an undocumented exemption into a new system that your examiner will now expect to be rigorous.

Disposition history has the same problem in a milder form. Records closed with a free text note saying cleared are not evidence and cannot be used to recognise recurrence. Migrate them for continuity, mark them as unstructured, and set a cutover date after which every disposition carries a selected reason and the identifier that differentiated your customer from the listed party.

List data itself should be reloaded from source rather than migrated, and loaded as immutable versions from the first day.

Why do payment path and onboarding integrations break after launch?

Inline screening breaks because it was built as a service call and not as a component of a payment path. A filter that sits between a payment being instructed and released has latency and availability requirements a batch job does not, and the failure behaviour has to be a deliberate decision. Blocking every payment when the screening service is unavailable is a choice with consequences. Releasing every payment is a different choice with worse ones. Teams that never make that decision explicitly discover their default during an outage.

Onboarding integrations break for a data reason. Screening consumes names, addresses, dates of birth and ownership structures, and those are entered by humans in a customer onboarding system that keeps evolving. A new field, a changed address format, a merged party record, and your matching input quietly changes shape while your thresholds stay where they were.

Two defences. Pin the input contract, validate every incoming record against it, and alert on drift rather than on failure, since partial degradation is more common than an outage. Then stamp every screening event with the list version, the parameter set and the input snapshot that produced it, so a payment released on a particular Tuesday can be reproduced exactly. That last point costs almost nothing at the start and is close to impossible to retrofit.

What happens when the OFAC 50 percent rule is not covered?

You screen names very well and miss entities that are blocked because of who owns them. Under the 50 percent rule an entity owned in aggregate by blocked persons is itself blocked even where its own name appears nowhere on any list. No fuzzy matcher will find it, because there is nothing to match against.

This is the clearest example of why a screening tool bolted onto the side of an onboarding platform underperforms a system that shares its data model. You already collect ownership information during onboarding for corporate clients. If screening cannot see it, the control simply does not exist, and the gap is invisible in every metric you report, because the entity never generated a hit to begin with.

The fix is to evaluate every node in the ownership structure against the lists and compute aggregate blocked ownership through the chain, including indirect holdings, then treat a threshold breach as a hit with its own disposition path. Two practical points. Ownership data is often stale, so record the date it was collected and flag structures older than your refresh policy rather than silently trusting them. And re evaluate the whole population when a list changes, because the trigger for a new breach is frequently a list addition rather than a change in the ownership itself.

Should you build custom or configure what you already own?

If you are a smaller institution screening a few hundred names a day in batch, with a customer base that does not stress transliteration, buy. LexisNexis Bridger Insight or a comparable mid market product plus disciplined process is proportionate, and building a name matching engine is effort spent a long way from where your risk actually sits.

Be precise about what you already own. LSEG World-Check and Dow Jones Risk and Compliance are data providers, and good ones, supplying lists and enrichment rather than a matching engine or your workflow. Fircosoft is the incumbent inline filter in large payment operations and is proven at volume, with tuning that is specialist work and iterates slowly. Napier offers a more configurable modern architecture and is still a platform you configure to your population. If your gap is coverage of lists, you have a data subscription question, not a build question.

Build, or build the layer around a bought filter, when two or more of these are true. Screening sits inline against a payment cutoff and the queue is the bottleneck. Your customer base or corridors create matching behaviour that default algorithms handle badly, for example heavy transliteration variance or patronymic name ordering. You cannot evidence why your thresholds sit where they do. Your good guy list has passed a few hundred entries and nobody governs it. Or you already hold ownership graphs and want the 50 percent rule evaluated properly rather than by hand. Keeping a proven filter and owning the tuning and disposition layer around it is the most common sensible answer.

How do hidden costs get into the quote?

Screening quotes go wrong in the same five places.

  • Inline screening is priced like batch screening. A filter in a live payment path carries latency budgets, availability targets and a designed failure mode, and all three cost more than a scheduled job.
  • Historical replay is assumed to be free. Proving a threshold change is safe means rerunning past screening events through candidate parameters, which requires that those events were stored in a queryable form from day one.
  • List count is underestimated. Beyond the major sanctions programmes there are internal lists, correspondent supplied lists and politically exposed person data, each with its own shape and update rhythm.
  • Non Latin script handling is treated as a library choice. It is genuine specialist work and it is the difference between usable precision and an unworkable queue for large parts of your book.
  • Trade finance is folded in silently. Vessel names, ports, goods descriptions and dual use item references behave nothing like personal names and need their own normalisation, scoring and reference data.

The honest bands from Digital Heroes delivery experience are $80,000 to $190,000 over 12 to 18 weeks for a first release covering list ingestion with versioning and delta computation, an inspectable matching pipeline and an operations queue with structured dispositions, and $240,000 to $550,000 across 8 to 16 months for a full platform adding inline screening, historical replay, governed good guy lists, ownership evaluation and blocked property record keeping.

What separates a build that works from one that fails here?

Whether the pipeline is inspectable. Normalisation, transliteration handling, tokenisation, scoring and threshold should be separate, versioned stages, so that when your sanctions officer asks why a name scored 87 somebody can answer stage by stage rather than appealing to a vendor. That answer is the difference between tuning and guessing.

Second, list updates have to be treated as events. When a programme amends an entry, the correct behaviour is to compute the delta, re screen the existing customer base against additions and amendments, and force review of any whitelist entry whose underlying record changed. Authorities add aliases and identifiers to existing entries regularly, and an amendment to something you previously cleared is precisely what the control exists to catch. A nightly file load does none of this.

Third, no threshold change ships without a replay. Rerun historical events through the candidate parameters and look at which hits would no longer fire, not just how many. Anything else is an opinion with a deployment date.

Fourth, dispositions are structured. A hit closed with a selected reason referencing the identifier that differentiated your customer from the listed party is evidence. Free text is not.

Fifth, ownership. You should own the repository, the matching parameters, the full disposition history and the cloud accounts, in the contract before kickoff. At Digital Heroes the client owns all of it from the first commit. That record is what defends the programme in an examination, and an arrangement where it sits somewhere you cannot extract it from should be refused.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. The federal government spends about 80% of its IT budget on operations and maintenance of existing systems rather than on development or modernization, with many critical systems being decades old. Source: U.S. Government Accountability Office (GAO) (2025) →
  2. This World Bank report argues that digital technology adoption raises SME competitiveness, productivity and resilience, while documenting that smaller firms consistently lag larger ones in digital adoption - a gap that constrains their growth and market reach. Source: World Bank (2022) →
  3. Gallup reports global employee engagement fell to 20% in 2025 (its lowest since 2020, down from a 2022-2023 peak of 23%), and estimates low engagement costs the world economy an estimated $10 trillion in lost productivity, or 9% of global GDP. (Note: this figure appears in Gallup's evergreen State of the Global Workplace page, currently reflecting the 2026 edition reporting on 2025 data.). Source: Gallup (2025) →
  4. 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) →
Rishabh K. · Web Developer · Lucknow

Rishabh builds and maintains client storefronts and marketing sites, including Shopify theme work. Product pages, checkout flows and the small template changes a retailer asks for on a Friday all land with him. Readers get the practical detail of what is easy to change on an ecommerce site and what is not.

View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How do we tell whether our problem is the threshold or the queue?

Take a month of hits and count how many were repeats of a decision already made on the same customer against the same list entry. In most operations that share is large, and it means your clock time is being spent on work that a recurrence design would remove without changing coverage at all. Only after that is fixed does threshold tuning tell you anything useful, because until then your false positive rate is measuring your workflow rather than your matching.

Can we keep our existing filter and build only the tuning and disposition layer?

Yes, and for institutions running a proven inline filter that is usually the right shape. The filter keeps producing candidate matches, and you own the queue, the recurrence keying, the structured dispositions, the whitelist governance and the replay harness. The requirement is that the filter can emit enough detail about why a match was produced for your layer to be useful, so establish what it exposes before you design around it rather than after.

How should we prove to an examiner that a threshold is set correctly?

By showing the test rather than the reasoning. Keep the historical screening events, replay them through the current parameters and through alternatives, and document which hits fire under each, including the ones that stop firing when you loosen. Pair that with structured dispositions so you can show what your analysts actually decided and on what identifier. An examiner is not expecting perfection, they are expecting a documented, repeatable basis for the choice you made.

What is the correct way to run a good guy list?

Never whitelist a name globally. Whitelist a specific customer against a specific list entry, with a named owner, an expiry date and the evidence that supported the decision attached. Re screen the whole whitelist on every list update, and force review of any entry whose underlying list record was amended. Treat the size of the list as a metric in its own right, because unchecked growth is the clearest early sign that analysts are using it to make a queue problem disappear.

What happens to screening when the service is unavailable during a payment run?

Whatever you designed, and if you did not design it you will find out under pressure. The two defaults are blocking every payment, which stops legitimate commerce and generates immediate escalation, and releasing every payment, which is an unscreened release you will have to explain. The workable pattern is a documented degraded mode with a defined queue, an authorised approver for release, and a full record of anything released under it, agreed with compliance before go live.

Does trade finance screening need a separate system?

It needs a separate matching problem solved inside the same system. Vessel names, ports, goods descriptions and dual use references need their own normalisation and scoring, and the reference data sources differ from personal name lists. Institutions that push trade documents through a personal name matcher get poor precision in both directions, which is why trade screening should be priced as its own workstream in any build estimate rather than folded into the general filter.

How long does it take before analysts see the queue improve?

The first release ships in 12 to 18 weeks, and the recurrence handling is usually the piece that lands first and is felt immediately. The slower part is confidence: your compliance function will reasonably want a period of parallel running before the new queue is the record of decision. Plan for that overlap explicitly rather than treating it as a delay, and use it to build the replay dataset you will need for every future tuning decision.

How do we screen for the 50 percent rule if our ownership data is incomplete?

Start by making the incompleteness visible rather than treating unknown ownership as clean. Record the collection date on every structure, flag anything older than your refresh policy, and report the share of corporate customers where ownership is unverified. Then evaluate the structures you do hold, including indirect holdings, and re evaluate the whole population on every list change, because a new breach is usually triggered by a list addition rather than by the ownership shifting.

How much should a small business budget for its first custom app or website?
For a focused first build, most small businesses land between $8,000 and $60,000: roughly $8,000 to $45,000 for a custom website and $25,000 to $60,000 for an internal tool or simple web app, based on Digital Heroes delivery across 2,000+ projects. Customer-facing products with payments, logins, or a mobile app start around $40,000. Quotes far below these bands usually mean a template with your logo on it, not software shaped around your workflow.
We run everything on Airtable and spreadsheets. When is it time to go custom?
The switch usually makes sense when you hit one of two walls: Airtable's record caps (125,000 records per base on the Business plan) or logic the tool cannot express, like multi-step approvals with conditional pricing. There is also a simple cost signal: 25 people on Business at roughly $45 per seat per month is about $13,500 a year, forever, for a tool you are already fighting. Custom is worth it when the workflow is core to how you make money; for peripheral processes, staying on Airtable is the right call.
How many people should be working on my software project?
A typical $40,000 to $150,000 build runs on three to five people: a technical lead, one or two developers, a designer, and someone owning QA and project communication, often as overlapping part-time roles. More bodies do not make software arrive faster; past a point they slow it down with coordination overhead. The question that matters more than headcount is whether one named senior engineer is accountable for the outcome.
Who owns the code when an agency builds my software?
You should, completely, through a written intellectual property assignment that transfers everything on final payment; without that clause, copyright stays with whoever wrote the code by default. Insist that the repository lives in your own GitHub organization from day one and that hosting, domains, and third-party accounts are registered to you. Also check for licenses to the agency's proprietary frameworks buried in the contract, because those can make switching vendors practically impossible even when you own your own code.
How long does it take from first call to software my team can actually use?
Plan for four to six months: two to three weeks of discovery, two to four weeks of design, then a 10 to 16 week build with testing. In Digital Heroes delivery experience the schedule killer is not engineering speed but decision lag; a client who takes two weeks to approve wireframes adds two weeks to launch. Book a weekly 30-minute decision slot before kickoff and most of that risk disappears.
Is a solo freelancer enough for my project, or do I really need an agency?
A solo freelancer is a fine choice for a well-defined build under roughly $15,000 to $20,000 with a limited lifespan: an internal calculator, a scripted integration, a prototype. Above $50,000, or for any system your business will depend on for years, you are buying continuity as much as code: enforced code review, cover when someone is ill, and support that outlasts one person's career plans. Price the risk of a single point of failure, not just the hourly rate.
Should I ask for a fixed price or pay the agency hourly?
Fixed price for the first version, hourly or retainer for what comes after launch. A fixed-scope, fixed-price V1 puts the estimation risk on the agency, which is exactly where you want it while trust is unproven; hourly billing on an unscoped greenfield build is a blank check. After launch, flip it, because maintenance and small features arrive unpredictably and fixed-pricing every ticket wastes everyone's time.
How do we get years of data out of our old system and into the new one?
Treat migration as a planned sub-project: a field-mapping document, at least one dry run on a copy of your data, then a cutover with the old system kept read-only for 30 days as a safety net. On Digital Heroes projects it consumes 10 to 15% of the budget when the old system has an export, and more when data must be pulled out screen by screen. Ask any vendor to walk you through their last migration before you sign.
Is it cheaper to customize Salesforce than to build a custom CRM from scratch?
If you use less than a third of what Salesforce does, a custom CRM is often cheaper by year three. Salesforce Enterprise lists at $165 per user per month, so 25 seats cost about $49,500 a year before admin and consultant fees, while a focused custom CRM runs $60,000 to $100,000 once plus 15 to 20% a year in maintenance. If you genuinely need Salesforce's ecosystem, reporting, and app marketplace, customizing it beats rebuilding it; the mistake is paying enterprise prices to use it as a glorified contact list.
What should I prepare before contacting a software development agency?
A one-page brief beats a 40-page requirements document: the business problem in plain words, who will use the system, the 5 to 10 workflows it must handle, the tools it must connect to, and your budget range and deadline driver. You do not need wireframes, a specification, or technical vocabulary; producing those is the agency's job during discovery. Stating a budget range up front is the single best move, because it gets you honest scoping instead of a quote engineered to win the meeting.
Should I hire a freelancer or an agency for my software project?
A skilled freelancer is the right call for a single-discipline scope under roughly $15,000, like a website, a plugin, or one integration. Above that, projects need design, backend, testing, and project management at once, and a solo builder becomes the single point of failure: if they get sick or take a bigger client, your project simply stops. Agencies bill 20-40% more per hour but carry continuity, code review, and someone to escalate to, which is what you are actually buying.
What happens if I stop paying for maintenance after launch?
Nothing breaks on day one, which is what makes it dangerous. Within 6 to 18 months, unpatched dependencies accumulate known vulnerabilities, an integrated API like Stripe ships a breaking change, and the first fix requires a developer to relearn a stale codebase at full price. Budget 15 to 20% of the build cost per year for upkeep; it is the difference between a $500 patch and a $15,000 emergency.
Who can build a custom software system?

Digital Heroes builds custom software 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 software 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.

Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?