From Fraud Alert to Defensible Action: Building an Agentic Fraud Investigation System with TigerGraph A developer built an agentic fraud investigation system on TigerGraph 4.2.5 (Savanna) that combines a temporal knowledge graph, GraphRAG, and deterministic policy controls to convert suspicious transaction alerts into auditable next-best actions. The system uses a dedicated FraudInvestigation graph with 9 vertex types and 18 relationship types, and was benchmarked on the IEEE-CIS dataset of 590,742 transactions in the TigerGraph × Hacker House Goa fraud investigation challenge. The developer reports that an LLM-orchestration experiment clarified where a model does and does not belong in the investigation pipeline. How we combined a temporal knowledge graph, GraphRAG, agentic investigation, and deterministic policy controls to turn suspicious transactions into auditable next-best actions. Every fraud team already has a way to generate alerts — a risk model scores a transaction, a rule fires, a customer calls in. That part is not the hard problem anymore. The hard problem starts one step later: given an alert, what do you actually look at, when do you have enough to act, what do you do if you don't, and what are you allowed to do once you decide? Those four questions are what our system for the TigerGraph × Hacker House Goa fraud investigation challenge is built around. This post covers the architecture, temporal safety, GraphRAG, the deterministic decision authority, a real benchmark case HHG-014 , and what an actual LLM-orchestration experiment told us about where a model does and doesn't belong here. Every number below comes from the repository, not from memory. The challenge dataset IEEE-CIS, anonymized, 590,742 transactions with a risk score in place of a label makes the temptation obvious: train a classifier, threshold the score, done — not what the challenge asks for, and not what a fraud analyst does. An analyst who opens a flagged transaction doesn't output fraud: 0.83 . They ask: is this card connected to anything else I should worry about? Do I have enough to act, or do I need to check with the customer first? The output isn't a probability — it's a decision about what happens next, and who has to sign off on it. Our system answers that question, not the classification one: it investigates the transaction's neighborhood, gathers evidence, decides whether that evidence is sufficient, and — only under fixed policy — recommends an action with an approval route. A single transaction row tells you an amount, a channel, a merchant category. It does not tell you that the device behind it was used by eleven other customers last month, or that its device profile matches one that funded a confirmed-fraud case three months ago. Those facts only exist as relationships : Customer owns Card, Card made Transaction, Transaction came from Device, Device seen on other Cards, other Cards belong to other Customers. Fraud rings are almost never visible in one row — they're visible in the shape of the graph around it. We built one graph, FraudInvestigation , on TigerGraph 4.2.5 Savanna , separate from the pre-existing Transaction Fraud graph — the code refuses to run against anything else by construction the graph name is checked and hard-fails otherwise . The schema has 9 core vertex types and 18 relationship types each with an automatic reverse edge : CREATE VERTEX: Customer, Card, Transaction, DeviceProfile, EmailDomain, BillingRegion, ClosedCase, FI Case, TextChunk CREATE EDGE: OWNS / OWNED BY Customer - Card MADE / MADE BY Card - Transaction NEXT / PREV Transaction - Transaction FROM DEVICE / DEVICE OF Transaction - DeviceProfile SEEN ON / SEEN BY DeviceProfile - Card PURCHASER EMAIL, RECIPIENT EMAIL - EmailDomain BILLED IN Transaction - BillingRegion CLOSED ON CARD, CLOSED ON CUSTOMER, CLOSED INVOLVES, CLOSED CONNECTED TO ClosedCase - ... CASE ON CARD, CASE TXN, CASE CONNECTED TO, CASE CITES DEVICE, SIMILAR CASE FI Case - ... DESCRIBES TextChunk - ClosedCase / FI Case To be precise about the division of labor: TigerGraph stores the connected facts and answers traversal queries. It does not reason about fraud. Every query fi shared devices , fi connected entities , fi card history , fi prior cases , fi txn context , fi customer history , fi text chunks returns raw, time-bounded neighborhoods and counts. Interpreting them happens entirely in application code src/fraud tools/ , src/agent/ . The graph answers "what's connected to what, as of when"; it doesn't decide anything. One detail worth calling out: fi shared devices hub-gates by design. A device profile shared by an implausible number of customers a null/default fingerprint, say is never expanded — it's reported separately as a skipped hub , so one ubiquitous device can't pull half the customer base into every investigation. FRAUD SIGNAL │ ▼ ┌───────────────────┐ │ Agent Trigger │ └─────────┬─────────┘ │ ▼ ┌────────────────────────┐ │ TigerGraph │ │ │ │ Customer ↔ Card │ │ Card ↔ Transaction │ │ Transaction ↔ Device │ │ Identity / Email / │ │ Billing Region / Cases │ └───────────┬────────────┘ │ ▼ ┌────────────────────────┐ │ GraphRAG │ │ │ │ Prior Cases │ │ Fraud Patterns │ │ Policies & Rules │ └───────────┬────────────┘ │ ▼ ┌────────────────────────┐ │ Investigation Agent │ │ │ │ Evidence gathering │ │ Evidence synthesis │ │ Uncertainty assessment │ │ Tool selection │ └───────────┬────────────┘ │ ┌────────┴────────┐ │ │ More evidence? Sufficient? │ │ ▼ ▼ Controlled evidence Next-Best request Action │ ▼ ┌──────────────────┐ │ Policy Authority │ │ │ │ Actions │ │ Approval routes │ │ Safety gates │ └────────┬─────────┘ │ ▼ Case Record Evidence + Findings Decision + Actions | Layer | Responsibility | |---|---| | TigerGraph | Connected entity storage; answers whitelisted, time-bounded traversal queries. No fraud reasoning. | | GraphRAG | Retrieves prior closed cases, fraud-pattern text, and policy rules as context — text retrieval, not traversal. | | Investigation Agent | Orchestrates tool calls, synthesizes evidence, assesses whether it's sufficient. | | Policy Authority | A fixed decision matrix — evidence in, verdict/action/route out. No model in this layer. | | Case Record | The auditable output: an FI Case graph vertex plus the full decision trail. | as of design A benchmark case is scored on what an investigator could have known at the moment it opened — not what happened afterward, and not which closed cases were labeled after the fact. If the agent could see the future, the evaluation would be meaningless. Every graph query in this system takes a required INT as of parameter with no default value , and filters on edge epoch , never on a stored "current" flag: CREATE OR REPLACE QUERY fi shared devices VERTEX