>
Build Sheet — Module 03
Fintech AI

Fraud Build Sheet

The parts list and assembly instructions for fraud detection. How the market splits into scoring platforms, signal layers and guarantee models, working velocity and graph code, real pricing tiers, and the same job built three ways.

Verified May 2026Free · No signupOfficial sources only
BeginnerStart here. No prior knowledge assumed.

How to read this build sheet

The module explains how fraud detection works. This page is the parts list and the assembly instructions.

Every vendor link is there so you can verify what we say, not so you can go and learn it there.

Watch out

Prices carry a Verified May 2026 stamp and sit in marked blocks. Fraud vendor pricing moves and most of it is sales-led — the tiers here are for budgeting and for recognising when a quote is out of shape.

The market splits into three categories

Almost every confused fraud procurement starts by comparing tools from different categories.

CategoryWhat it gives youExamples
Scoring platformsA decision — approve, review, blockSift, Kount, Forter, Feedzai, Sardine
Signal layersEvidence to feed a decision you makeFingerprint, SEON, IPQualityScore, browser-layer tools
Guarantee modelsThey underwrite the loss and take the chargeback riskSignifyd, Riskified

A working 2026 stack usually needs one from at least two categories: a scoring layer for the decision, plus a signal source giving evidence the scorer is otherwise blind to.

Note

The blindness is specific and worth knowing. Server-side scoring platforms and consortium data cannot see AI-agent activity, because the automation happens client-side before any request reaches your backend. If agentic browsing is in your threat model, a server-only stack will not see it.

How to rank vendors — and how not to

Do not rank on claimed model accuracy. No vendor will let you test it independently, the number is produced on their population, and it is the one figure every sales deck leads with.

Rank on four things you can assess:

  1. Explainability — can an analyst say why this was blocked, in a sentence a customer could be told?
  2. Evidence readiness — does the output stand up in a chargeback dispute?
  3. False positive economics — what does a wrongly blocked genuine customer cost you, and how easily can you tune it?
  4. Browser-layer visibility — can it see what happens before the request arrives?
Watch out

Get all-in TCO before signing, not the base fee. Implementation, custom rules and dispute handling frequently double the invoice, and none of those appear on the pricing page.

IntermediateBuild it. Pipelines, tools and working code.

Raw materials — signal layers and device intelligence

MaterialWhat it doesVerify at
Fingerprint (formerly FingerprintJS Pro)Device identification specialist. Stable visitor ID plus bot, VPN, incognito and tampering signals.fingerprint.com
FingerprintJS (open source)The original library. Weaker than the commercial product; free.github.com/fingerprintjs
SEONDevice fingerprinting plus email, phone and IP enrichment with a rules engine.seon.io
IPQualityScorePrice-per-call option. Thinner fingerprint, fast and volume-friendly.ipqualityscore.com
SardineBehavioural biometrics — typing rhythm, cursor movement, device handling — layered on fingerprinting.sardine.ai
Play Integrity / App AttestPlatform device attestation. The defence against camera injection and emulators.developer.android.com

Raw materials — scoring, graph and infrastructure

MaterialWhat it doesVerify at
SiftLong-running ML fraud platform with a large consortium network.sift.com
FeedzaiTier-1 bank scale real-time payment fraud.feedzai.com
Unit21Investigation and case management oriented.unit21.ai
Clari5India-focused real-time enterprise fraud management (Perfios-owned).clari5.com
RedisSub-millisecond velocity counters and sliding windows.redis.io
Apache FlinkStateful stream processing for windowed aggregation at volume.flink.apache.org
Neo4j / NetworkXGraph storage and traversal for mule and ring detection.neo4j.com
PyTorch Geometric / DGLGraph neural networks — embeddings as features for a tree model.pytorch-geometric
NPCI MuleHunter.AI / DPIPNational mule detection and cross-bank signal sharing. Indirect — via your sponsor bank.npci.org.in

How to use each one — device and velocity

Device intelligence, and what the ID actually means

Device signal integration — and the mistake everyone makes
CLIENT
  const {visitorId, requestId} = await fp.get();
  // send requestId to YOUR server, never trust a client-sent visitorId

SERVER
  GET /events/{requestId}   (vendor API, server-to-server)
  -> { visitorId, confidence, incognito, vpn, bot, tampering,
       ipLocation, firstSeenAt, lastSeenAt }

WHAT TO CHECK
[ ] ALWAYS resolve the requestId server-side. A visitorId posted by
    the client is an attacker-supplied string. This is the single
    most common integration error in device intelligence.
[ ] confidence is a property of the IDENTIFICATION, not of risk.
    Low confidence means "we are unsure this is the same device",
    not "this device is suspicious".
[ ] firstSeenAt is the highest-value field and the least used.
    A device first seen 90 seconds ago applying for credit is a
    different proposition from one you have known for two years.
[ ] a shared device is not automatically fraud. Families, shared
    phones and cyber cafes are normal in India. Use device reuse as
    a GRAPH EDGE, not as a rule.
[ ] incognito/VPN are weak signals alone and strong in combination
    with velocity. Never block on either by itself.

Velocity counters — the cheapest real detection you will build

Redis — sliding window velocity, production shape
import time, redis
r = redis.Redis(decode_responses=True)

def bump_and_count(key: str, window_s: int, now: float = None) -> int:
    """Sliding window via a sorted set. O(log n), sub-millisecond.
    One round trip per dimension - pipeline them."""
    now = now or time.time()
    pipe = r.pipeline()
    pipe.zremrangebyscore(key, 0, now - window_s)   # drop expired
    pipe.zadd(key, {f"{now}:{id(key)}": now})
    pipe.zcard(key)
    pipe.expire(key, window_s + 60)                 # ALWAYS set a TTL
    return pipe.execute()[2]

def velocity(ev):
    now = time.time()
    dims = {
      "cust_1h":   (f"v:c:{ev['customer_id']}",   3600),
      "cust_24h":  (f"v:c24:{ev['customer_id']}", 86400),
      "device_1h": (f"v:d:{ev['device_id']}",     3600),
      "benef_1h":  (f"v:b:{ev['beneficiary']}",   3600),
      "ip_1h":     (f"v:i:{ev['ip']}",            3600),
    }
    return {k: bump_and_count(key, w, now) for k,(key,w) in dims.items()}

# WHAT TO CHECK
# [ ] TTL on every key. Without it Redis grows until it evicts
#     something you needed, usually at peak.
# [ ] compute velocity in ONE shared module used by training and
#     serving. Two implementations = training-serving skew, and it
#     is invisible until the model quietly degrades.
# [ ] the RATIO matters more than the count. 5 transactions in an
#     hour is normal for one customer and extraordinary for another.
#     Store a per-customer baseline and compare against it.
# [ ] beneficiary velocity across DIFFERENT senders is the mule
#     signal. Most teams only count per-sender and miss it.

The gotcha: velocity features are the highest-value thing you can build in week one and the easiest to get subtly wrong. A counter that resets on deploy, or a window measured in wall-clock rather than event time, produces a feature that looks fine in testing and is meaningless in production.

How to use each one — graph and the national rails

Graph features without a graph database

You do not need Neo4j to start. The highest-value mule signals are computable in SQL.

SQL — the three mule signals worth having first
-- 1. PASS-THROUGH: money in, money out, almost all of it, fast
SELECT account_id,
       SUM(credit_amt)                        AS in_amt,
       SUM(debit_amt)                         AS out_amt,
       SUM(debit_amt)/NULLIF(SUM(credit_amt),0) AS pass_ratio,
       AVG(EXTRACT(EPOCH FROM (debit_ts - credit_ts))/60) AS hold_mins
FROM matched_in_out
WHERE ts > now() - interval '7 days'
GROUP BY account_id
HAVING SUM(debit_amt)/NULLIF(SUM(credit_amt),0) > 0.90
   AND AVG(EXTRACT(EPOCH FROM (debit_ts - credit_ts))/60) < 30;

-- 2. DORMANT THEN BURST: the strongest single Indian mule signal
SELECT a.account_id, a.last_active_before, COUNT(t.*) AS burst_txns
FROM accounts a JOIN txns t ON t.account_id = a.account_id
WHERE a.last_active_before < now() - interval '90 days'
  AND t.ts > now() - interval '48 hours'
GROUP BY 1,2 HAVING COUNT(t.*) >= 5;

-- 3. SHARED DEVICE ACROSS UNRELATED ACCOUNTS
SELECT device_id, COUNT(DISTINCT account_id) AS n_accounts,
       ARRAY_AGG(DISTINCT account_id) AS accounts
FROM sessions WHERE ts > now() - interval '30 days'
GROUP BY device_id HAVING COUNT(DISTINCT account_id) >= 4;

-- WHAT TO CHECK
-- [ ] tune thresholds on YOUR data. 0.90 and 30 minutes are
--     starting points, not findings.
-- [ ] shared device >= 4 will surface families and shared phones.
--     It is a REVIEW trigger, not a block.
-- [ ] run these as batch features feeding the real-time model,
--     not inside the request path. They are too slow for <50ms.

The national rails

MuleHunter.AI, DPIP, the I4C Suspect Registry and CPFIR are all indirect. You reach them through your sponsor bank or regulated partner, not through an API you sign up for.

What to ask your sponsor bank, specifically:

  • Which national signals do you consume, and can any of them reach us as a feature?
  • What is the latency on a suspect-registry match — real time, or overnight batch?
  • When you flag one of our accounts, how do we hear, and how fast?
  • What is the unfreeze path, and how long does it take?
Watch out

That last question matters more than it sounds. Courts have been pushing back on account freezing, and the module’s guidance is to freeze the amount via lien rather than the account. If your sponsor bank freezes whole accounts and has no fast unfreeze path, that becomes your customer complaint and your conduct problem.

Cost per unit

Fraud tooling — tiers by category

Verified May 2026
Signal layers — entry
$99–$500/month, usually with free tiers. Fingerprint offers ~1,000 API calls/month free, paid from ~$99.
SEON Starter
≈ $699/month for ~2,500 API calls and 50 rules. Case management and AML sit on higher tiers. No free tier; sales-led.
Scoring platforms — mid-market
$2,000–$10,000/month (Sift, Sardine class).
Enterprise platforms
From ≈ $50,000/year; six-figure floors common (Kount, Forter, Feedzai).
Guarantee models
0.6–1.5% of protected GMV. They take the loss, you pay a percentage.
Self-built velocity + rules
Infrastructure only. A Redis instance and a week of engineering catches a surprising share of first-wave fraud.
Note

The comparison that actually decides this is not vendor against vendor. It is the tool’s cost against the fraud it prevents, net of the genuine customers it blocks. A platform that stops ₹40 lakh of fraud and disrupts ₹4 crore of genuine volume is not a good purchase at any price.

AdvancedShip it. Failure modes, thresholds and evidence.

Best combinations

CombinationWorks because
Hard rules (<1ms) → velocity (<25ms) → model (<15ms)Cheapest checks first. Most blocks never reach the model, keeping the latency budget intact.
Signal layer + your own rules engineYou buy evidence you cannot collect and keep the decision. Cheapest route to real detection.
Scoring platform + browser-layer signalsCovers the client-side blind spot that consortium data cannot see.
Batch graph features as columns in a real-time tree modelGraph computation is too slow for the request path; precomputed features are not.
GNN embeddings + gradient boostingThe ensemble catches materially more than either alone — see the module.
Step-up ladder instead of block/allowConverts would-be false positives into mild friction rather than lost customers.

Combinations that conflict

  • Two scoring platforms. You are paying twice for one decision and will trust neither.
  • Graph queries inside the request path. Blows the latency budget; precompute.
  • Trusting a client-supplied device ID. Resolve server-side or the signal is attacker-controlled.
  • Blocking on device sharing. Normal in India. Review trigger, not a rule.
  • Buying a guarantee model to avoid building anything. It caps loss; it does not give you the data or the judgement.

Three recommended builds

Strong and expensive

Build: Enterprise scoring platform with case management, plus a browser-layer signal provider, plus a guarantee model on the highest-risk segment.

Use when: volume is high, losses are material, and you need a defensible answer for a regulator or a board tomorrow.
Cost shape: $50k/year floor plus signal layer plus a percentage of protected volume.
Trade: the model is theirs. You will struggle to explain a specific block, and tuning goes through their team.

Strong and reasonable — the default

Build: Device signal layer → your own velocity counters in Redis → your own rules → a gradient-boosted model on your labels → batch graph features → step-up ladder rather than block/allow.

Use when: you have engineers and fraud is a core risk rather than a checkbox.
Cost shape: a few hundred dollars a month for signals, plus infrastructure.
Trade: you own detection quality — which is the point, because the labels you accumulate are the asset.

Note

Build in this order: velocity counters first, then hand-written graph features, then a model, then GNN embeddings if the volume justifies it. Velocity alone catches a surprising share of the first wave, and it is a week of work.

Strong and lean

Build: Open FingerprintJS or a per-call signal API → Redis velocity → explicit rules → manual review queue → SQL graph queries nightly.

Use when: pre-scale, low volume, proving what your fraud actually looks like before buying against a guess.
Cost shape: near zero beyond infrastructure and review time.
Trade: higher analyst load and no consortium view. Acceptable at low volume; it stops scaling once review hours exceed the cost of a platform.

Watch out

Start lean deliberately. Buying a platform before you know your own fraud patterns means tuning someone else’s thresholds against a threat you have not characterised. Three months of your own labels makes every subsequent procurement conversation a different one.

What next

  • AML — a mule account is both a fraud case and an AML case. Same data, different obligation, and the two teams need one shared view of the account.
  • Payments — a dispute is where a fraud decision meets money movement, and the evidence pack you assemble comes from here.
  • Customer operations — a blocked genuine customer becomes a support contact within minutes. Design that conversation before you turn the rules on.
  • Governance — the fraud model, the vendor score and the rules engine are all models under the RBI draft. Inventory, tier, kill switch, fallback.
Note

And the operational habit that matters most: tag every escalation and every reversal with a reason. Fraud labels arrive late, incompletely and with bias, so the ones you capture deliberately are worth far more than the ones that arrive on their own.

Sources

Every figure, rule and date on this page, and where to check it. Entries are typed so you can see which numbers are primary-sourced and which are industry reporting — they are not equivalent, and treating them as if they were is how a confident wrong number gets repeated.

  1. officialRBI directions on digital payment security — the authentication and customer liability framework. www.rbi.org.in
  2. officialNPCI — UPI dispute resolution and the chargeback mechanism. www.npci.org.in
  3. vendorDevice intelligence and fraud vendor pricing — per-check and per-session rates.
  4. industryMule account and fraud typology reporting — the behavioural signals described in the detection section.

Checked May 2026. Pricing and draft regulation move; the date is part of the claim.

Ask an AI about this page

Opens your assistant with this page as the source, and a question rather than a summary. It will ask what you are building before it answers.

Nothing is sent from here. The link carries only this page’s title and address.