EVM Wallet Scraper — Balances, Tokens, Transactions, Risk Flags avatar

EVM Wallet Scraper — Balances, Tokens, Transactions, Risk Flags

Pricing

from $5.00 / 1,000 address analyzeds

Go to Apify Store
EVM Wallet Scraper — Balances, Tokens, Transactions, Risk Flags

EVM Wallet Scraper — Balances, Tokens, Transactions, Risk Flags

Wallet & contract intelligence for Ethereum, Base, Arbitrum, Optimism, Polygon, Gnosis, ZKsync, Scroll and more: balances, ERC-20 holdings with USD value (spam filtered), recent transactions with counterparties, token transfers, internal txs, NFTs, balance history, risk flags. ENS names accepted.

Pricing

from $5.00 / 1,000 address analyzeds

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Wallet Intel — EVM wallet & contract scraper (16 chains, no API key)

Give it wallet or contract addresses (or ENS names) and get one clean JSON per address: native balance and USD value, ERC-20 holdings with prices (spam filtered), activity counters, recent transactions with direction and labelled counterparties, token transfers, internal transactions, NFTs, 90-day balance history and a deterministic list of risk flags. Works on Ethereum, Base, Arbitrum, OP Mainnet, Polygon, Gnosis, ZKsync, Scroll, Celo, Unichain, Soneium, Mode, Ink, World Chain and two testnets via the public Blockscout API. No API key, no proxy, no browser.

Built for AI agents and back-office automations that must answer "who is this address and what does it do?" in one call.

Use cases

  • Counterparty due diligence — before paying or accepting an invoice in crypto: balance, age, activity, explorer scam flag, exchange labels, proxy/EIP-7702 delegation.
  • KYT-lite monitoring — schedule a daily run on your treasury or customer wallets with sinceDate = yesterday to get only new transactions and token transfers.
  • Payment reconciliationincludeTokenTransfers + tokenFilter = USDC contract: "did wallet X receive ≥ 500 USDC since Monday?"
  • Portfolio snapshottotalPortfolioUsd, top tokens by value, spam removed; run across your 200 wallets on Base in one batch.
  • Lead scoring / airdrop eligibility — flag whales, fresh wallets, dormant wallets, NFT collections held.
  • Contract intel — verified? proxy type, implementations, creator and creation tx, who calls it most (top counterparties).

Input

FieldTypeDefaultNotes
addressesstring[]— (required)0x addresses or ENS names (vitalik.eth). Duplicates removed. Invalid values yield a found:false item.
chainenumbaseSee Reference → Chains. Aliases: eth, mainnet, arb, op, matic, xdai.
recentTxLimitint 0–20010Recent native transactions per address (pages of 50).
txDirectionall / from / toallfrom = signed by the address (outgoing), to = incoming.
sinceDatedateKeep only txs / token transfers / internal txs on or after this date (UTC). Paging stops early → cheaper runs.
untilDatedateUpper bound (UTC).
includeTokensbooltrueERC-20 balances with USD value, sorted by value. Auto-skipped for large contracts (tokensSkipped:true).
tokensLimitint 1–50050Max tokens kept per address.
minTokenUsdnumber0Drop positions worth less than this.
hideSpamTokensbooltrueDrop explorer-flagged scams and unpriced airdrop-lure tokens (URLs, "claim", "visit"…). Count in spamTokenCount.
includeTokenTransfersboolfalseRecent ERC-20/721/1155 transfers with direction, counterparty, USD value, likelySpam.
tokenTransfersLimitint 0–20025
tokenTransferTypeall / ERC-20 / ERC-721 / ERC-1155all
tokenFilterstring[][]Only transfers of these token contracts.
includeInternalTransactionsboolfalseValue-carrying internal calls (DEX payouts, bridge deliveries).
internalTxLimitint 0–20025
includeNftsboolfalseNFT collections held (first 50) with counts and sample image.
includeBalanceHistoryboolfalseDaily native balance, last ~90 days (only days with changes).
counterpartiesLimitint 0–5010Size of topCounterparties (ranked by interactions within the fetched transactions).
fieldsstring[][]Keep only these top-level fields (address, chain, found, error, fetchedAt always kept).
requestDelayMsint 0–5000150Politeness delay before each explorer request.

All original inputs (addresses, chain, recentTxLimit, includeTokens) keep their meaning.

Reference

Chains

chainNetworkChain IDNativeExplorer
ethereumEthereum mainnet1ETHeth.blockscout.com
baseBase8453ETHbase.blockscout.com
arbitrumArbitrum One42161ETHarbitrum.blockscout.com
optimismOP Mainnet10ETHexplorer.optimism.io
polygonPolygon PoS137POLpolygon.blockscout.com
gnosisGnosis Chain100xDAIgnosis.blockscout.com
zksyncZKsync Era324ETHzksync.blockscout.com
scrollScroll534352ETHscroll.blockscout.com
celoCelo42220CELOcelo.blockscout.com
unichainUnichain130ETHunichain.blockscout.com
soneiumSoneium1868ETHsoneium.blockscout.com
modeMode34443ETHexplorer.mode.network
inkInk57073ETHexplorer.inkonchain.com
worldchainWorld Chain480ETHworldchain-mainnet.explorer.alchemy.com
sepoliaEthereum Sepolia (testnet)11155111ETHeth-sepolia.blockscout.com
base-sepoliaBase Sepolia (testnet)84532ETHbase-sepolia.blockscout.com

Other Blockscout instances (e.g. Zora, Linea, Mantle) did not answer the public v2 API at the time of writing and are therefore not offered.

Flags (flags[])

FlagMeaning
not_found_on_chainAddress unknown to the explorer on this chain.
flagged_scam_by_explorerBlockscout is_scam / non-ok reputation.
unverified_contractContract without verified source code.
proxy_contractUpgradeable proxy (see proxyType, implementations).
eoa_with_delegated_code_eip7702Wallet that delegated code via EIP-7702 (smart-account features).
no_outgoing_transactions / fresh_wallet_under_5_txsVery young wallet.
inactive_over_180d / dormant_over_1yNo recent activity (wallets only).
near_zero_balance / whale_over_1m_usdPortfolio size (native + tokens, USD).
high_failed_tx_share≥ 30 % of fetched transactions failed (wallets only).
labeled_exchangeExplorer tag names a CEX.
labeled_high_riskTag mentions sanctions/OFAC/hack/exploit/phishing/drainer.

Flags are a triage checklist, not a verdict.

Frequently used token contracts

TokenBaseEthereum
USDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA029130xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
USDT0xdAC17F958D2ee523a2206206994597C13D831ec7
WETH0x42000000000000000000000000000000000000060xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

Examples

1. Vet a counterparty before paying (Base)

{ "addresses": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"], "chain": "base", "recentTxLimit": 25, "includeTokens": true, "counterpartiesLimit": 10 }

2. Daily monitor: what happened since yesterday on our treasury wallets (Ethereum)

{ "addresses": ["treasury.mycompany.eth", "0x…"], "chain": "ethereum", "recentTxLimit": 200, "sinceDate": "2026-09-12", "includeTokenTransfers": true, "tokenTransfersLimit": 200, "includeInternalTransactions": true, "includeTokens": false }

3. Did the customer pay in USDC? (Base)

{ "addresses": ["0xCustomerWallet…"], "chain": "base", "recentTxLimit": 0, "includeTokens": false, "includeTokenTransfers": true, "tokenTransferType": "ERC-20", "tokenFilter": ["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"], "sinceDate": "2026-09-08" }

4. Portfolio snapshot for 100 wallets, only positions ≥ $50, compact output

{ "addresses": ["0x…", "0x…"], "chain": "arbitrum", "recentTxLimit": 0, "tokensLimit": 100, "minTokenUsd": 50, "fields": ["nativeBalance", "nativeUsd", "totalTokenUsd", "totalPortfolioUsd", "tokens", "flags"] }

5. Contract intel: who calls this contract and is it upgradeable?

{ "addresses": ["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"], "chain": "base", "recentTxLimit": 100, "txDirection": "to", "includeTokens": false, "counterpartiesLimit": 25 }

Output

One item per input address (trimmed real example, Base):

{
"query": "vitalik.eth",
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"chain": "base", "chainId": 8453, "nativeSymbol": "ETH",
"explorerUrl": "https://base.blockscout.com/address/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"found": true,
"isContract": true, "isVerifiedContract": true, "proxyType": "eip7702",
"implementations": [{ "address": "0x5A7FC11397E9a8AD41BF10bf13F22B0a63f96f6d", "name": "AmbireAccount7702" }],
"ensName": "vitalik.eth", "tags": [], "isScam": false, "reputation": "ok",
"nativeBalance": 3.1287, "nativeUsd": 7896.08, "nativePriceUsd": 2523.71,
"txCount": 51, "txCountIsLowerBound": true, "tokenTransferCount": 51, "internalTxCount": 51,
"tokenCount": 2575, "tokenCountShown": 50, "spamTokenCount": 89, "tokensSkipped": false, "tokenListPartial": false,
"totalTokenUsd": 19145.92, "totalPortfolioUsd": 27042.0,
"tokens": [{ "symbol": "TRUE", "name": "True", "contract": "0x21CF…", "decimals": 18, "balance": 1066680, "priceUsd": 0.0139, "usdValue": 14802.9, "holdersCount": 24836, "reputation": "ok" }],
"lastSeen": "2026-08-10T13:00:47.000000Z",
"recentWindow": { "txs": 10, "direction": "all", "sentNative": 0.0, "receivedNative": 0.0, "feesNative": 0.00002, "failedTxs": 0, "uniqueCounterparties": 1 },
"recentTransactions": [{ "hash": "0x1234…", "timestamp": "2026-08-10T13:00:47.000000Z", "direction": "out", "counterparty": "0x…", "counterpartyLabel": "PublicResolver", "valueNative": 0, "method": "setContenthash", "status": "ok", "feeNative": 0.0000277 }],
"tokenTransfers": [], "internalTransactions": [], "nftCollections": [], "balanceHistory": [],
"topCounterparties": [{ "address": "0x…", "label": "Deterministic Deployer", "txCount": 13, "sentNative": 0, "receivedNative": 0, "lastSeen": "2026-07-19T20:43:47.000000Z" }],
"flags": ["eoa_with_delegated_code_eip7702"],
"warnings": [],
"source": "blockscout", "sourceUrl": "https://base.blockscout.com/api/v2/addresses/0xd8dA…", "fetchedAt": "2026-09-12T23:32:44.398Z"
}
FieldDescription
query, address, ensNameInput value, resolved checksum address, ENS primary name if any.
found, errorfalse + reason when the address is unknown/invalid (no per-item charge).
isContract, isVerifiedContract, contractName, proxyType, implementations, creator, creationTxHashContract facts. proxyType: "eip7702" = wallet with delegated code.
tags, isScam, reputationExplorer labels (public tags, Kleros/OLI metadata) and scam status.
nativeBalance, nativeUsd, nativePriceUsdNative coin balance and USD value.
txCount, txCountIsLowerBoundTransactions signed by the address. Blockscout computes counters lazily; when it returns 0 for an active address the actor reports 51 with txCountIsLowerBound:true ("50+").
tokenTransferCount, internalTxCount, gasUsedActivity counters.
tokens[], tokenCount, tokenCountShown, spamTokenCount, totalTokenUsd, totalPortfolioUsdERC-20 holdings. tokenListPartial:true when the full list timed out and the top-N-by-value fallback was used.
firstSeen, lastSeenFrom fetched transactions (firstSeen only when the whole history fits).
recentWindowSummary of fetched transactions: counts, native sent/received, fees, failures, unique counterparties.
recentTransactions[]direction in/out/self, counterparty + counterpartyLabel, value, method, status, fee, createdContract.
tokenTransfers[]Token, amount, USD value, direction, counterparty, likelySpam.
internalTransactions[], nftCollections[], balanceHistory[]Optional extras.
topCounterparties[]Most frequent counterparties with labels and flows.
flags[]See Reference.
warnings[]Sub-requests that failed/timed out for this address (item is still delivered).

Use it from code / agents

curl -X POST "https://api.apify.com/v2/acts/yadroo~wallet-intel/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"addresses":["vitalik.eth"],"chain":"base","recentTxLimit":25}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/wallet-intel').call({ addresses: ['vitalik.eth'], chain: 'base' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient(token)
run = client.actor("yadroo/wallet-intel").call(run_input={"addresses": ["vitalik.eth"], "chain": "base"})
items = client.dataset(run["defaultDatasetId"]).list_items().items

MCP: add https://mcp.apify.com to Claude / Cursor / any MCP client and call the yadroo/wallet-intel tool with the same JSON input.

Pricing

Pay per event: $0.001 per run start + $0.005 per analyzed address. Every dataset item counts, including found:false rows for invalid inputs. A typical due-diligence run on 10 addresses costs $0.051; a daily monitor over 100 wallets costs $0.501 per day. Batch addresses to amortize the start fee.

Limits & FAQ

  • Rate limits — Blockscout public APIs are generous but shared; the actor sleeps requestDelayMs between calls and retries 429/5xx with exponential backoff. Raise the delay if you see 429 warnings.
  • Freshness — live explorer data (seconds behind the chain). Prices are the explorer's (CoinGecko-backed), refreshed every few minutes.
  • Huge wallets/contracts — full token lists of whales can time out; the actor falls back to a paginated, value-sorted list (tokenListPartial:true). Token balances are skipped for non-EOA contracts (tokensSkipped:true) because router/pool balance lists are enormous.
  • Counters — Blockscout computes some counters lazily; see txCountIsLowerBound.
  • Errors — network/explorer failures on sub-requests never drop an address: the item is delivered with warnings[]. Invalid chains or dates fail the run immediately with a clear message.
  • Roadmap — ERC-20 approval/allowance audit, per-token PnL, more Blockscout chains as they expose the v2 API.

Made by Yadroo. Siblings: base-token-intel · ens-resolver · dexscreener-tokens · bitcoin-mempool · sanctions-screen · domain-intel