Most indexers give you event logs. SQD gives you logs, internal calls, delegate calls, and state diffs together, the full execution footprint of a transaction. The hops a log-only feed cannot see, internal value and storage writes, are exactly the ones an investigation cares about. SQD is the data layer beneath your KYT or screening stack, not the screening itself.
A log is written only when a contract's code chooses to emit one. Native value moving emits no Transfer log, value moved by a contract mid-execution emits no log, and a contract can change a balance by writing storage directly with no event at all. Those three paths are exactly the ones used to obscure a flow of funds, so monitoring built on logs alone cannot follow them. The complete footprint, the top-level call, every internal hop, every emitted event, and every storage change, is onchain already; the cost is in reading it back as one joined record.
The gap is measurable. Filtering transactions by recipient looks like it captures everything that touched an address, but it misses every internal call that reached it through another contract. Over 20 Ethereum blocks (19,000,000 to 19,000,020), the WETH contract was the top-level recipient of 29 transactions but appeared in 2,370 internal-call traces:
The fix is to query traces, not transactions. This filter catches an address whether it received or sent value, at any depth, and joins each hop back to its transaction:
traceAddress places each hop in the call tree; callValue is the value moved; callCallType separates a call from a delegatecall. Traces carry a transactionIndex, not a hash, so the query joins the transaction to tie each hop to one.
The hardest movements to follow leave no value-bearing call at all: a contract that maintains an internal balance ledger and moves funds by writing a storage slot. A state diff records which slots a transaction changed, with the previous and next value, the lowest-level evidence of what a transaction did. One real row that comes back, a USDC balance moving:
Decoded, that is a 500 USDC transfer recorded as a storage write. Follow callValue through the traces and nothing moves here, because a token transfer carries no ETH, so the amount lives only in this diff. State diffs ride on a transactions query, the only filter that joins traces, logs, and diffs together for a transaction's complete footprint. The full walkthrough is in the compliance data guide.
The onchain record: logs, traces, and state diffs for a transaction, decoded and joined under one hash, across 225+ networks from genesis. Streamed into your own store via the Squid or Pipes SDK, ready to feed an AML, KYT, or screening system as structured, timestamped records.
Attribution (linking an address to a real-world entity), risk scoring, sanctions lists, and Travel Rule message exchange. Onchain data shows what an address did, not who controls it. Chainalysis, Elliptic, and TRM Labs add attribution and risk scoring on top of the onchain record, and that screening is only as good as how complete the record is, which is what the traces and state diffs above make complete.
Every internal call, delegate call, and CREATE, not just the top-level transaction. When funds route through four intermediate contracts, all four hops are traces you follow by callTo and callFrom; a transactions-only view sees only the first.
See exactly which storage slots changed and their before and after values. Reconstruct flows that bypass Transfer events entirely, an internal-ledger contract that moves value by writing storage directly, which event-only indexers are blind to.
The same query shape runs on 225+ networks. Following funds onto another chain is a one-line dataset change, not a separate integration per chain, with full history from genesis.
Structured, timestamped, decoded records, every field typed, every timestamp in UTC, streamed into your own store via the Squid or Pipes SDK. Feed them to an AML, KYT, or screening system; attribution and risk scoring stay with those tools.
The transactions are all onchain and public. What a log-only feed leaves out, internal value, delegate calls, and storage writes, is exactly what an investigation needs, and reading it back is where the work is.
See this on your own contracts
Tell us the chains and contracts you care about, and we will show you the query that returns them.
Cryptographic proofs verify the onchain data you have, not whether it is complete. Why proof-based validation misses whole classes of logs, shown with Polygon state-sync, and how to query the full set.
Structural checks prove a dataset is well-formed, not complete. The reconciliation method that finds missing rows: count against an independent source, escalate granularity from days to the record. Worked live with Portal and Dune.
Bitcoin inputs and outputs are first-class in the same declarative query shape, so you trace UTXO flows from sender to recipient without running a node.
How an agent triages a wallet, follows the trace, and cites block-level evidence at each hop, with an investigation envelope that names the next step.
Transaction traces, state diffs, attribution data, and the chain-of-custody requirements regulated entities work with. What goes into a Travel Rule submission.
Swaps, liquidations, and the internal calls a log-only feed misses.
Decoded events and traces streamed into the warehouse you already run.
Pre-decoded onchain data for agents, over MCP or plain HTTP.
Address-keyed history: transfers, native and internal value, NFT moves.
Mints, transfers, and marketplace sales, decoded from one log stream.
Private Portal. Dedicated. Validated. Managed. Tell us what you're building, we'll show you what it looks like on SQD.