# EVM Wallet Intelligence & Token Portfolio Scraper (Multi-Chain) (`scrapers_lat/evm-wallet-intelligence-scraper`) Actor

Multi-chain EVM wallet intelligence for crypto AML, portfolio and airdrop research. Native balance + USD, ENS, ERC-20/721/1155 holdings, tx counters, scam/contract/verified flags and history across Ethereum, Base, Optimism, Arbitrum, Polygon, Gnosis.

- **URL**: https://apify.com/scrapers\_lat/evm-wallet-intelligence-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / 1,000 wallet intelligence results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![EVM Wallet Intelligence & Token Portfolio Scraper (Multi-Chain)](https://scrapers.lat/banners/evm-wallet-intelligence-scraper.png)](https://apify.com/scrapers_lat/evm-wallet-intelligence-scraper)

## EVM Wallet Intelligence & Token Portfolio Scraper (Multi-Chain)

Here is one real result, with every field the actor returns for an address:

```json
{
  "recordType": "address",
  "chain": "ethereum",
  "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
  "ensName": "vitalik.eth",
  "isContract": true,
  "isScam": false,
  "isVerified": true,
  "contractName": null,
  "nativeSymbol": "ETH",
  "balanceNative": 6.635339380601434,
  "balanceWei": "6635339380601433797",
  "balanceUsd": 12468.73,
  "exchangeRateUsd": 1879.14,
  "transactionsCount": 78385,
  "tokenTransfersCount": 403188,
  "gasUsageCount": 1209976841,
  "erc20Count": 6663,
  "nftCount": 1249,
  "topTokens": [
    {
      "symbol": "WHITE",
      "name": "WhiteRock",
      "type": "ERC-20",
      "contractAddress": "0x9cdf242Ef7975D8c68D5C1F5B6905801699b1940",
      "tokenId": null,
      "balance": 10000000000,
      "balanceUsd": 386100
    },
    {
      "symbol": "MOODENG",
      "name": "MOO DENG",
      "type": "ERC-20",
      "contractAddress": "0x28561B8A2360F463011c16b6Cc0B0cbEF8dbBcad",
      "tokenId": null,
      "balance": 30002309167.968834,
      "balanceUsd": 141010.85
    },
    {
      "symbol": "KNCL",
      "name": "Kyber Network Crystal Legacy",
      "type": "ERC-20",
      "contractAddress": "0xdd974D5C2e2928deA5F71b9825b8b646686BD200",
      "tokenId": null,
      "balance": 700008.531373792,
      "balanceUsd": 74196.7
    }
  ],
  "creatorAddress": null,
  "creationTxHash": null,
  "firstActivity": "2026-08-13T12:04:11.000000Z",
  "lastActivity": "2026-08-14T09:45:59.000000Z",
  "balanceUpdatedAtBlock": 25766384,
  "observedAt": "2026-08-16T08:23:03.236Z",
  "error": null
}
```

Multi-chain EVM wallet and address intelligence for crypto compliance and AML, portfolio analytics, and airdrop or holder research. Give it one or more EVM addresses and a chain, and it returns the native balance (with USD value), the ENS name, the full ERC-20 / ERC-721 / ERC-1155 token portfolio, transaction and token-transfer counters, scam / contract / verified flags, and optional full transaction history. Most tools give you a bare balance on one chain; this actor gives you the token portfolio, risk flags, ENS and USD valuation across six chains.

**📥 [Input](https://apify.com/scrapers_lat/evm-wallet-intelligence-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/evm-wallet-intelligence-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/evm-wallet-intelligence-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/evm-wallet-intelligence-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Chains-Ethereum%20%7C%20Base%20%7C%20Optimism%20%7C%20Arbitrum%20%7C%20Polygon%20%7C%20Gnosis-627EEA)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Supported chains](#supported-chains)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Transaction rows](#transaction-rows)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

For each EVM address you provide, the actor returns one enriched intelligence record:

- **Native balance**: balance as a number, the exact value in wei, and the USD value when a price is available.
- **Identity**: primary ENS name, whether the address is a smart contract, and its contract name when known.
- **Risk flags**: `isScam` (flagged by the explorer), `isVerified` (verified contract source), and `isContract`.
- **Token portfolio**: count of distinct ERC-20 tokens and of ERC-721 / ERC-1155 holdings, plus a `topTokens` list (up to 25) with each token symbol, name, type, contract address, balance and USD value where available, sorted by value.
- **Activity**: total transaction count, total token-transfer count, cumulative gas usage, and a first / last activity window derived from the fetched transactions.
- **Provenance**: for contracts, the creator address and creation transaction hash, plus the block at which the balance was last updated.

Turn on **Include Transaction History** to also get one row per transaction, each with its direction (sent or received relative to the queried address), native value, fee, decoded method, timestamp, block number, status and counterparty.

### Supported chains

Set the **Chain** input to one of: `ethereum`, `base`, `optimism`, `arbitrum`, `polygon`, `gnosis`. All addresses in a run are looked up on the selected chain. The native coin symbol in the output reflects the chain (ETH, POL, xDAI).

### Quickstart

1. Paste one EVM address into **EVM Address**, or a list into **EVM Addresses**.
2. Choose the **Chain** (default `ethereum`).
3. Leave **Include Token Holdings** on for the portfolio, and optionally turn on **Include Transaction History**.
4. Click **Start**. Results stream into the dataset and can be exported as JSON, CSV or Excel.

### Input reference

| Field | Type | Required | Description | Example |
|-------|------|----------|-------------|---------|
| `address` | string | one of address/addresses | A single EVM address (`0x` + 40 hex). | `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045` |
| `addresses` | array | one of address/addresses | A list of EVM addresses to analyze in one run. | `["0xd8dA...6045"]` |
| `chain` | string | no | Which chain to query: ethereum, base, optimism, arbitrum, polygon, gnosis. Default `ethereum`. | `base` |
| `includeTokenHoldings` | boolean | no | Include the ERC-20/721/1155 portfolio and top-tokens list. Default `true`. | `true` |
| `includeTransactions` | boolean | no | Also emit one row per transaction for each address. Default `false`. | `false` |
| `maxTransactionsPerAddress` | integer | no | Cap on transactions fetched per address when history is included. Default `100`. | `100` |
| `maxAddresses` | integer | no | Maximum addresses to process this run. Free accounts are capped at 10. | `100` |
| `proxyConfiguration` | object | no | Optional proxy settings. Not required (the data source is open). | `{"useApifyProxy":false}` |

### Output reference

One row per address (`recordType: "address"`):

| Field | Type | Description |
|-------|------|-------------|
| `chain` | string | Chain the address was queried on. |
| `address` | string | The EVM address. |
| `ensName` | string | Primary ENS / name-service domain, or `null`. |
| `isContract` | boolean | Whether the address is a smart contract. |
| `isScam` | boolean | Whether the explorer flagged the address as scam. |
| `isVerified` | boolean | Whether the contract source is verified. |
| `contractName` | string | Contract or token name, when known. |
| `nativeSymbol` | string | Native coin symbol for the chain (ETH, POL, xDAI). |
| `balanceNative` | number | Native balance as a number. |
| `balanceWei` | string | Raw native balance in wei (exact). |
| `balanceUsd` | number | Native balance valued in USD when a price is available. |
| `exchangeRateUsd` | number | USD price per native coin used for valuation. |
| `transactionsCount` | number | Total transactions for the address. |
| `tokenTransfersCount` | number | Total token-transfer events involving the address. |
| `gasUsageCount` | number | Cumulative gas used across transactions. |
| `erc20Count` | number | Number of distinct ERC-20 tokens held. |
| `nftCount` | number | Number of distinct ERC-721 and ERC-1155 holdings. |
| `topTokens` | array | Top holdings `[{symbol,name,type,contractAddress,tokenId,balance,balanceUsd}]`, sorted by value. |
| `creatorAddress` | string | Creator address (contracts only). |
| `creationTxHash` | string | Creation transaction hash (contracts only). |
| `firstActivity` / `lastActivity` | string | First and last transaction time seen in the fetched sample. |
| `balanceUpdatedAtBlock` | number | Block at which the native balance was last updated. |
| `observedAt` | string | When the record was collected. |
| `error` | string | Error message, or `null`. |

### Transaction rows

When **Include Transaction History** is on, each address is followed by transaction rows (`recordType: "transaction"`):

| Field | Description |
|-------|-------------|
| `hash` | Transaction hash. |
| `direction` | `sent`, `received` or `other` relative to the queried address. |
| `valueNative` | Native value transferred in the transaction. |
| `feeNative` | Transaction fee in native coin. |
| `method` | Decoded contract method name, when available. |
| `timestamp` | Transaction time. |
| `blockNumber` | Block number of the transaction. |
| `status` | Transaction status (ok / error). |
| `counterparty` | The other party relative to the queried address. |

### Run via API and CLI

```bash
apify call scrapers_lat/evm-wallet-intelligence-scraper \
  --input='{"addresses":["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"],"chain":"ethereum","includeTokenHoldings":true}'
```

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~evm-wallet-intelligence-scraper/runs?token=YOUR_TOKEN" \
  -H "content-type: application/json" \
  -d '{"addresses":["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"],"chain":"base"}'
```

### Fetch results

```bash
curl "https://api.apify.com/v2/acts/scrapers_lat~evm-wallet-intelligence-scraper/runs/last/dataset/items?token=YOUR_TOKEN&clean=true&format=json"
```

Swap `format=json` for `csv` or `xlsx` to download a spreadsheet.

### Billing and limits

This actor is billed pay per result:

- **Wallet intelligence result** at $0.012 per row. Every address record and every transaction row counts as one result.
- **Transaction history add-on** at $0.008, charged once per address whose transaction history is successfully fetched (only when **Include Transaction History** is on and the fetch returns at least one transaction).

You are never charged for a failed lookup: an invalid or unreadable address produces an error row with no charge. Free Apify accounts are capped at 10 addresses per run. Set a spend limit in the run options and the actor stops emitting billable rows once the limit is reached.

### FAQ and troubleshooting

**Which chains are supported?** Ethereum, Base, Optimism, Arbitrum, Polygon and Gnosis. Select one per run with the **Chain** input; all addresses in that run are looked up on it.

**How is USD value calculated?** The native balance is multiplied by the explorer exchange rate at the moment of the run. When no rate is available, `balanceUsd` and `exchangeRateUsd` are `null`. ERC-20 tokens with a known price also carry a `balanceUsd`.

**Why is `firstActivity` recent for a very old, very busy address?** The activity window is derived from the transactions fetched for the address. For addresses with tens of thousands of transactions, the most recent ones are read, so the window reflects recent activity. Increase **Max Transactions Per Address** to read deeper history.

**Are balances accurate?** Yes. Balance, counters and token holdings come directly from on-chain state at the moment of the run. The exact native balance is also returned in wei as a string so large values keep full precision.

**Do I need a proxy or an API key?** No. The actor reads public on-chain data and needs no key. A proxy is optional.

**Can I query many addresses at once?** Yes. Provide a list in **EVM Addresses**; each returns its own intelligence record on the selected chain.

# Actor input Schema

## `address` (type: `string`):

A single EVM address (0x followed by 40 hex characters), for example 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045. Use the Addresses field for multiple.

## `addresses` (type: `array`):

A list of EVM addresses to analyze in one run. Each address returns one enriched intelligence record.

## `chain` (type: `string`):

Which EVM chain to query. All addresses in a run are looked up on this chain.

## `includeTokenHoldings` (type: `boolean`):

When on (default), include ERC-20/721/1155 portfolio: token counts and a top-tokens list with balances and USD value where available.

## `includeTransactions` (type: `boolean`):

When on, also emit one row per transaction for each address (hash, direction, value, fee, method, counterparty). Charged as a separate add-on per address whose history is fetched.

## `withAiRisk` (type: `boolean`):

When on, use AI to turn each wallet's on-chain data (balance, holdings, counters, flags, ENS) into a concise 2-3 sentence risk and profile summary (whale, active DeFi user, likely contract, holds flagged tokens, dormant). Uses AI and is billed only when a usable assessment is produced. Disabled for free Apify accounts.

## `maxTransactionsPerAddress` (type: `integer`):

Cap the number of transactions fetched per address when transaction history is included. Higher values fetch deeper history but take longer.

## `maxAddresses` (type: `integer`):

Maximum number of addresses to process in this run. Free Apify accounts are capped at 10 per run.

## `proxyConfiguration` (type: `object`):

Optional proxy settings. The data source is open, so a proxy is not required, but a residential proxy can improve reliability under heavy load.

## Actor input object example

```json
{
  "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
  "chain": "ethereum",
  "includeTokenHoldings": true,
  "includeTransactions": false,
  "withAiRisk": false,
  "maxTransactionsPerAddress": 100,
  "maxAddresses": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
    "maxAddresses": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/evm-wallet-intelligence-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
    "maxAddresses": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/evm-wallet-intelligence-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
  "maxAddresses": 100
}' |
apify call scrapers_lat/evm-wallet-intelligence-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/evm-wallet-intelligence-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/YaHL32UBbMpQSbOn8/builds/WSPXHKlstpsY4IDO2/openapi.json
