Crypto source of funds and wealth checks
What it is
A crypto source of funds check traces where a client’s onchain money came from, and a source of wealth check uses the same history to show how the client built up what they hold; both belong to enhanced due diligence.
Banks and wealth platforms run them when a client arrives with crypto, because the onboarding file has to show that the funds have a legitimate origin before the client can move them in.
Goldsky gathers the full transfer history of the wallets the client declares and records your risk provider’s rating with its inputs; checking the client’s identity, and judging whether their explanation holds up, stay with your providers and your compliance team.
You can gather the wallet history two ways: load it into your own database with a one-time Turbo Pipelines job, or pull each wallet’s transfers from the Feeds transfers API when the case needs them.
Who it’s for
Global banks, private banks and wealth platforms, crypto-native banks and the transaction monitoring vendors they work with.
How a crypto source of funds check works
The diagram follows one client from declaring their wallets at onboarding to your team’s judgment on whether the history explains their funds. Your setup may differ.
Ways to gather wallet history for a source of funds check
A one-time pipeline job writes decoded history into tables you query, including events from any contract the client used; the transfers API returns one wallet’s native and token transfers each time your code calls it.
- Best for
- Long histories queried in your own database
- What you run
- The destination: your database, queue or bucket, or a Postgres database Goldsky hosts
- What you write
- Pipeline YAML and SQL; TypeScript transforms when needed
- Where your data lives
- In your own database or systems
- How results reach you
- Pushed to you
- Best for
- One client at a time, pulled when a case opens
- Products
- Feeds
- What you run
- Nothing; you call an endpoint and keep what you need
- What you write
- REST requests
- Where your data lives
- Hosted by Goldsky
- How results reach you
- Returned when you call
| Usual setupOption 1: Load history into your database | Option 2: Wallet transfers API | |
|---|---|---|
| Best for | Long histories queried in your own database | One client at a time, pulled when a case opens |
| Products | TurboCompose | Feeds |
| What you run | The destination: your database, queue or bucket, or a Postgres database Goldsky hosts | Nothing; you call an endpoint and keep what you need |
| What you write | Pipeline YAML and SQL; TypeScript transforms when needed | REST requests |
| Where your data lives | In your own database or systems | Hosted by Goldsky |
| How results reach you | Pushed to you | Returned when you call |
Collect the wallets the client says hold their funds
The check can only trace money in wallets you know about, so it starts with the client’s own list.
The client declares each wallet and the chain it’s on, and proves they control it, for example by signing a message. A wallet they leave off the list is history you never see, so ask where the funds sit today and where they sat before.
Verify the client’s identity
A source of funds check explains one person’s or company’s money, so you need to know who they are first.
Your identity verification provider checks the client against your onboarding policy. Tracing funds for someone whose identity hasn’t been confirmed produces a file that can’t be tied to anyone.
Load and decode the wallets’ full history
Handled by Goldsky TurboThe origin of the funds is in the transfers that brought them into the declared wallets, often years back.
Every transfer in and out of each wallet has to be loaded from the first block, with token amounts and the contracts involved turned into readable fields (decoded). Raw records your team can’t read are evidence nobody can review.
Turbo Pipelines can run a one-time job over a decoded dataset such as
Decode contract events (opens in a new tab)erc20_transfers, filtered to the client’s addresses, and decode other contracts’ events fromraw_logswith_gs_log_decode(). The job writes to your database and exits once it reaches the block you set.Rate the risk of where the funds came from
A transfer history shows which wallets paid the client, but not whether those wallets belong to an exchange, a mixer or a sanctioned party.
Your risk provider rates the wallets that sent funds in, using its own attribution of who controls them. Send it the counterparties from the history you gathered, so the rating and the history describe the same transfers.
Keep the rating with the history it describes
Handled by Goldsky ComposeThe file has to show which answer the provider gave about which transfers, on which day.
Each request and response is stored with the case, and a failed call is retried without paying for an answer you already have. A rating pasted into a note can’t be traced back to the question that produced it.
With Goldsky, a Compose task sends the counterparties to your risk provider through
Make auditable calls with fetch (opens in a new tab)ctx.fetch, and the run log keeps the URL and response of each call. The task can save the rating to a collection keyed on the case.Judge whether the history explains the funds
The check ends with a person deciding whether the client’s story and the chain agree.
Your compliance team compares the history and the rating with what the client says, such as early purchases on an exchange or the sale of a business. Where they don’t line up, the team asks the client for more before onboarding goes ahead, and records why it accepted or declined.
What to know about loading wallet history into your database
- Goldsky runs the job; you own the database it writes to and every query your team runs on it.
- The job stops at the block you set, so a later deposit needs a new run or a live pipeline.
- You choose the columns, so decoded events from other contracts can sit beside plain transfers.
- Totals over the counterparties and periods in the client’s story, and matching transfers to that story, are queries you write in your database.
Collect the wallets the client says hold their funds
The check can only trace money in wallets you know about, so it starts with the client’s own list.
The client declares each wallet and the chain it’s on, and proves they control it, for example by signing a message. A wallet they leave off the list is history you never see, so ask where the funds sit today and where they sat before.
Verify the client’s identity
A source of funds check explains one person’s or company’s money, so you need to know who they are first.
Your identity verification provider checks the client against your onboarding policy. Tracing funds for someone whose identity hasn’t been confirmed produces a file that can’t be tied to anyone.
Pull each wallet’s transfer history
Handled by Goldsky FeedsThe origin of the funds is in the transfers that brought them into the declared wallets.
The request has to cover every wallet, every chain it’s on and the whole period the client describes, including tokens with no market price. A window that starts too late or leaves tokens out hides the transfers the check is meant to find.
Feeds returns one wallet’s native and ERC-20 transfers across chains from its transfers endpoint, each with its counterparty and USD value at transfer time. Set
Read the transfers endpoint reference (opens in a new tab)include_unknown_price=trueso transfers of tokens with no price source aren’t left out.Rate the risk of where the funds came from
A transfer history shows which wallets paid the client, but not whether those wallets belong to an exchange, a mixer or a sanctioned party.
Your risk provider rates the wallets that sent funds in, using its own attribution of who controls them. Send it the counterparties from the history you gathered, so the rating and the history describe the same transfers.
Keep the rating with the history it describes
The file has to show which answer the provider gave about which transfers, on which day.
Store the transfer response, the provider’s request and its answer together with the case. If the history is pulled again later, values and rows can differ, so the copy your team judged is the one to keep.
Judge whether the history explains the funds
The check ends with a person deciding whether the client’s story and the chain agree.
Your compliance team compares the history and the rating with what the client says, such as early purchases on an exchange or the sale of a business. Where they don’t line up, the team asks the client for more before onboarding goes ahead, and records why it accepted or declined.
What to know about using a wallet transfers API
- Your code pulls each wallet when a case needs it, and nothing is kept unless you store it.
- The response covers native and token transfers in a fixed shape, without other contract events.
- USD values are worked out at request time and can change later, so save what your team relied on.
- A transfer undone by a reorg stops appearing in responses with no flag, so record the block of each one you use.
What you control
- Your team
- Collect the wallets the client says hold their funds
- Judge whether the history explains the funds
- Your providers
- KYC/KYB provider
- Screening provider
Security and deployment
- SOC 2 Type IIIndependently audited security controls.
- Dedicated infrastructureSingle-tenant options for production workloads.
- Data residencyCloud, on-premises or co-located.
More use cases that monitor transactions
- Compliance monitoringScreen wallets and transfers, watch for misuse of your assets and feed your AML and surveillance tools.
- Securities surveillanceScreen wallets and transfers, watch for misuse of your assets and feed your AML and surveillance tools.
- Crypto wallet screening and sanctions dataFlag transfers that touch sanctioned or high-risk addresses.
- Secondary-market sanctions sweeps for token issuersScreen every holder and transfer of your stablecoin, not only your direct customers.
- Data for crypto AML transaction monitoringFeed complete transfer data to AML tools with lineage from the chain to the case.
- Unauthorized tokenization monitoringFind tokens that claim to represent your security without your consent.
- Smart contract and wallet monitoringWatch your contracts and wallets for attacks and unexpected changes.
- Blockchain forensics data feedGive investigators full history and traces across chains.
- VASP and counterparty due diligence dataProfile a VASP, issuer or counterparty by its onchain exposure before onboarding it and while the relationship lasts.
- Token listing due diligence for exchangesCheck a token’s supply, holders, liquidity and risky links before an exchange lists it, and after.
- Crypto scam and money mule detection dataFlag payments to scam-linked wallets and customer accounts that act as money mules.
- Crypto wallet monitoringGet an alert when a watched wallet makes a large transfer, crosses a balance limit, wakes after dormancy or pays an unknown counterparty.
- Address poisoning detectionFlag the zero-value, dust and fake-token transfers that lookalike addresses plant in a user’s history, and warn before anyone pays one.
- Onchain supervisory monitoring for regulatorsGive examiners one view of licensed firms’ onchain activity to test against what the firms report.
Run a crypto source of funds check with Goldsky
We’ll map it to your systems and show you what Goldsky runs, so your team builds the product, not the pipelines underneath it.