# Solana Wallet Intelligence & SPL Token Portfolio Scraper (`scrapers_lat/solana-wallet-intelligence-scraper`) Actor

Solana on-chain wallet intelligence for crypto AML, portfolio and airdrop research. SOL balance, SPL token holdings, NFT count, account owner program, transaction activity, first/last seen and derived activity signals. Multi-address batch, keyless.

- **URL**: https://apify.com/scrapers\_lat/solana-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.48 / 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/actors/running/actors-in-store.md#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

[![Solana Wallet Intelligence & SPL Token Portfolio Scraper](https://scrapers.lat/banners/solana-wallet-intelligence-scraper.png)](https://apify.com/scrapers_lat/solana-wallet-intelligence-scraper)

## Solana Wallet Intelligence & SPL Token Portfolio Scraper

Turn any list of Solana addresses into clean, structured wallet intelligence: SOL balance, SPL token and NFT holdings, account metadata, and transaction activity, ready for AML/compliance screening, portfolio analytics, and airdrop or holder research.

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

```json
{
  "recordType": "address",
  "address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
  "isValid": true,
  "exists": true,
  "solBalance": 10750010.54904024,
  "lamports": "10750010549040240",
  "accountOwnerProgram": "11111111111111111111111111111111",
  "executable": false,
  "rentEpoch": "18446744073709552000",
  "tokenCount": 2902,
  "nftCount": 133,
  "topTokens": [
    {
      "mint": "DxDxKQ6gfcTxQfQ8JGJ5NaJPeEokqVxohETaqZwBmtGS",
      "uiAmount": 20031000000000000,
      "decimals": 1,
      "program": "spl-token"
    },
    {
      "mint": "BWLpedFLhCpxym3adgAKc4LeVSmWD8m2x4WyHHX8WUTx",
      "uiAmount": 20000000000000000,
      "decimals": 2,
      "program": "spl-token-2022"
    }
  ],
  "txCountSampled": 25,
  "firstSeen": "2026-08-15T15:31:10.000Z",
  "lastSeen": "2026-08-16T12:32:12.000Z",
  "lastError": false,
  "errorRate": 0,
  "isActive": true,
  "aiRiskProfile": null,
  "observedAt": "2026-08-16T15:23:26.620Z",
  "error": null
}
```

Give it one address or thousands. Every wallet returns one enriched row with balances decoded into clean numbers, holdings counted and summarized, and derived activity signals you can filter on immediately. This completes the scrapers.lat web3 wallet-intelligence suite alongside the Bitcoin and EVM wallet intelligence scrapers.

### What you get

- **SOL balance decoded** into a ready-to-use number plus the exact raw lamport value as a string, so you never lose precision on large balances.
- **SPL token portfolio**: a count of fungible tokens held with a positive balance, plus a top-tokens list (mint, uiAmount, decimals, program) across both the Token and Token-2022 programs.
- **NFT count** from a heuristic on zero-decimal, single-supply token accounts.
- **Account metadata**: the owning program, whether the account is an executable program, and rent epoch, so you can tell wallets from smart contracts and programs at a glance.
- **Activity signals**: sampled transaction count, first-seen and last-seen timestamps, most-recent-error flag, error rate, and an `isActive` flag for recent activity.
- **Batch by design**: pass many addresses in one run and get one row each.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `address` | string | A single Solana address (base58, 32-44 chars). |
| `addresses` | array | A list of Solana addresses to analyze in one run. |
| `includeTokenHoldings` | boolean | Include the SPL token/NFT portfolio (default on). |
| `includeTransactions` | boolean | Emit one row per transaction signature per address (paid add-on). |
| `withAiRisk` | boolean | Add an AI risk & profile assessment per wallet (paid add-on). |
| `maxSignatures` | integer | How many recent signatures to sample for activity metrics (default 100). |
| `maxTransactionsPerAddress` | integer | Cap on transaction rows emitted per address for the history add-on (default 100). |
| `maxAddresses` | integer | Maximum addresses per run. Free Apify accounts are capped at 10. |
| `proxyConfiguration` | object | Optional proxy settings (not required). |

### Output

| Field | Description |
| --- | --- |
| `address` | The Solana address (base58). |
| `isValid` | Whether the address is a valid base58 Solana address. |
| `exists` | Whether the account exists on-chain. |
| `solBalance` | SOL balance as a number (lamports / 1e9). |
| `lamports` | Raw lamport balance as an exact string. |
| `accountOwnerProgram` | The program that owns the account. |
| `executable` | Whether the account is an executable program. |
| `rentEpoch` | Epoch at which the account next owes rent. |
| `tokenCount` | Number of SPL fungible token holdings with a positive balance. |
| `nftCount` | Number of NFT holdings (heuristic). |
| `topTokens` | Top holdings by uiAmount: mint, uiAmount, decimals, program. |
| `txCountSampled` | Number of transaction signatures sampled. |
| `firstSeen` / `lastSeen` | Earliest/most recent sampled signature time (ISO). |
| `lastError` | Whether the most recent sampled transaction failed. |
| `errorRate` | Fraction of sampled signatures that failed. |
| `isActive` | Whether the wallet shows recent activity. |
| `aiRiskProfile` | Optional AI risk & profile assessment when the add-on is on. |
| `observedAt` | When this record was collected (ISO). |
| `error` | Error message, if any. |

Transaction add-on rows add `signature`, `blockTime`, `slot`, `success`, `feeLamports`, `memo`, and `confirmationStatus`.

### Use cases

- **Crypto AML & compliance screening**: profile Solana wallets by balance, holdings, activity window, and error rate as part of KYT/KYB and transaction-monitoring workflows.
- **Portfolio analytics**: decode SOL and SPL token positions into clean numbers for dashboards, accounting, and treasury reporting.
- **Airdrop and holder research**: batch-check thousands of addresses for balances, token/NFT holdings, and activity to size and target airdrops or snapshot holders.
- **Wallet due diligence**: distinguish active wallets, dormant accounts, and on-chain programs before transacting or listing.
- **On-chain data enrichment**: append Solana wallet intelligence to CRM, risk, or research datasets keyed by address.

### Billing

This actor is priced pay-per-event:

- **Wallet intelligence result** ($0.012): charged once per enriched address record, and once per transaction row when the transaction history add-on is enabled. Invalid addresses return an unbilled error row.
- **Transaction history add-on** ($0.008): charged once per address whose signature history is successfully fetched, only when `includeTransactions` is on and the fetch is non-empty.
- **AI risk & profile add-on** ($0.012): charged once per address, only when a usable AI assessment is produced. Requires `withAiRisk` and is disabled for free Apify accounts.

Free Apify accounts are capped at 10 addresses per run. The actor never charges on failure and stops emitting billable results once your configured spend limit is reached.

# Actor input Schema

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

A single Solana wallet/account address (base58, 32-44 chars), for example 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM. Use the Addresses field for multiple.

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

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

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

When on (default), include the SPL token portfolio: fungible token count, NFT count, and a top-tokens list (mint, uiAmount, decimals) across the Token and Token-2022 programs.

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

When on, also emit one row per transaction signature for each address (signature, blockTime, success, slot, fee, memo). 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 (SOL balance, token/NFT counts, activity) into a concise 2-3 sentence AML risk and profile summary (whale, active, dormant, likely program/contract). Billed only when a usable assessment is produced. Disabled for free Apify accounts.

## `maxSignatures` (type: `integer`):

How many recent transaction signatures to sample per address for activity metrics (txCountSampled, firstSeen/lastSeen, error rate) in the base record.

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

Cap the number of transaction signatures emitted per address when the transaction history add-on is enabled.

## `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": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
  "includeTokenHoldings": true,
  "includeTransactions": false,
  "withAiRisk": false,
  "maxSignatures": 100,
  "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": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
    "maxAddresses": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/solana-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": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
    "maxAddresses": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/solana-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": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
  "maxAddresses": 100
}' |
apify call scrapers_lat/solana-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/solana-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/UDacj8BSwsIZldvcd/builds/9bvRMtG5fP8Engaxk/openapi.json
