Blockchain Scanner Scraper
Pricing
from $1.00 / 1,000 records
Blockchain Scanner Scraper
Read on-chain data across Ethereum, Base, Polygon, Arbitrum, Optimism, zkSync, Celo, Bitcoin and Solana in one schema: address balance, transaction history, token balances and transfers. Export data, run via API, schedule and monitor runs, or integrate with other tools.
Pricing
from $1.00 / 1,000 records
Rating
5.0
(1)
Developer
Public Money
Maintained by ApifyActor stats
1
Bookmarked
4
Total users
3
Monthly active users
8 hours ago
Last modified
Categories
Share
Every block explorer has its own API, its own key and its own field names, so covering nine chains means nine integrations. This Actor reads them all through one input and returns one schema: address balance and activity, transaction history, token balances and transfers, or token metadata, with nativeBalance meaning the same thing whether the chain is Ethereum, Bitcoin or Solana.
What it does
- Covers nine chains through one schema: Ethereum, Base, Polygon, Arbitrum, Optimism, zkSync, Celo, Bitcoin and Solana. Switch the chain input and your parsing code does not change.
- Five routes on the same input:
addressfor a balance summary,transactionsfor history,tokenBalancesandtokenTransfersfor token activity, andtokenfor contract metadata. - Resolves ENS names into
ensDomainNamewhere the chain supports them, so a record is readable without a lookup. - Flags whether an address is a contract or a wallet in
isContract, which changes how you should read every other field. - Values token holdings in USD in
valueUsdwhere a price is available, not just in token units. - Caps work per address with Max items per address, so one busy wallet cannot consume the whole run.
Use cases
| You need to | How this Actor does it |
|---|---|
| Watch a treasury across chains | Pass the same address with each chain and compare nativeBalance |
| Audit a wallet's token holdings | Use the tokenBalances route and read valueUsd |
| Follow the money out of an address | Use the transactions route and read to, value and method |
| Tell a contract from a wallet | Read isContract before you interpret a balance |
| Track token transfers for a project | Use the tokenTransfers route on the project treasury |
| Feed an on-chain research agent | Call the Actor over MCP and let the model pass the address it found |
Quick start
- Click Try for free.
- Pick a Chain:
ethereum,base,polygon,arbitrum,optimism,zksync,celo,bitcoinorsolana. - Pick a Route:
addressfor a balance summary,transactions,tokenBalances,tokenTransfers, ortokenfor contract metadata. - Add your addresses, one per line, in that chain's own format. An Ethereum address on Bitcoin will fail.
- Click Start. Rows appear within seconds.
- Export as JSON, CSV, Excel or XML, or read the dataset over the API.
Input
| Field | Type | Default | What it controls |
|---|---|---|---|
chain | string | ethereum | Which of the nine chains to read |
route | string | address | What to return: balance summary, transactions, token balances, token transfers or token metadata |
addresses | array | empty | Addresses to read, in the chosen chain's own format |
maxItemsPerAddress | integer | 100 | Caps rows per address, so one busy wallet cannot consume the run |
maxItems | integer | 0 | Caps how many records are written. 0 writes them all |
{"chain": "ethereum","route": "address","addresses": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"],"maxItemsPerAddress": 100}
Output
One dataset item per address on the address route, and one per transaction, balance or transfer on the others. The dataset has four views, one per route, so the console shows the right columns for what you asked for.
| Field group | Fields |
|---|---|
| Always | status, route, chainTitle, address, url |
| Address route | nativeSymbol, nativeBalance, transactionCount, tokenTransferCount, isContract, ensDomainName |
| Transactions route | hash, timestamp, from, to, value, fee, method |
| Token routes | tokenSymbol, tokenName, tokenAddress, amount, valueUsd |
| Timing | validFrom, scrapedAt |
{"status": "ok","route": "address","chainTitle": "Ethereum","address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","ensDomainName": "vitalik.eth","nativeSymbol": "ETH","nativeBalance": 4821.4409,"transactionCount": 1842,"tokenTransferCount": 9214,"isContract": false,"validFrom": "2026-09-06T05:30:00.000Z","url": "https://etherscan.io/address/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}
Integrations
Run it over the API and get the rows back in one call:
curl -X POST "https://api.apify.com/v2/acts/publicmoney~blockchain-scanner-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"chain": "ethereum", "route": "address", "addresses": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"], "maxItemsPerAddress": 100}'
From Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("publicmoney/blockchain-scanner-scraper").call(run_input={"chain": "ethereum", "route": "address", "addresses": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"], "maxItemsPerAddress": 100})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["validFrom"])
Give an AI agent the Actor over MCP:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=publicmoney/blockchain-scanner-scraper"}}}
Schedules run it on any cron, webhooks fire when a run finishes, and platform integrations push the dataset to Google Sheets, Slack, Airtable, Zapier or your own endpoint.
Cost
Pay per event, so you pay for records rather than compute time.
| Event | Free tier | Top volume tier |
|---|---|---|
| Record with data | $0.002 | $0.0007 |
| Actor start | $0.00005 per GB | Same |
A record that returned no data is published as a failure row and is never charged. Six volume tiers apply, so the per-record price falls with monthly volume.
Troubleshooting
| Issue | Solution |
|---|---|
An address returns failed | The address format does not match the chain. Bitcoin, Solana and the EVM chains all use different formats, so check the chain input. |
ensDomainName is missing | The address has no ENS name, or the chain does not support ENS. Only the EVM chains resolve names. |
valueUsd is missing on a token | No price is available for that token. The token amount is still exact. |
| One address dominates the run | Lower Max items per address. A treasury with a hundred thousand transfers will otherwise fill the dataset. |
| The transactions route returns fewer rows than the explorer shows | Max items per address caps it, and the default is 100. Raise it for a full history. |
FAQ
Do I need an Etherscan API key?
No. This Actor reads the explorers for you, so there is no key per chain to register, rotate or keep under a free-tier limit. You need an Apify token to call the Actor over the API.
Which chains are supported?
Nine: Ethereum, Base, Polygon, Arbitrum, Optimism, zkSync, Celo, Bitcoin and Solana. The field names are the same on all of them, which is the point of the Actor.
Why is one schema across chains useful?
Because nativeBalance, transactionCount and isContract mean the same thing on every chain here. Writing against nine explorer APIs means nine sets of field names and nine sets of pagination rules.
Can it read a contract's internal calls or logs?
No. The routes cover address summaries, transactions, token balances and transfers, and token metadata. Decoded logs and internal calls are not read.
Does it return historical balances?
No, balances are current. Transaction history is historical and each row carries its own timestamp, so you can reconstruct a balance over time from the transfers.
Do I need a block explorers API key?
No. You need an Apify token to call the Actor over the API. No block explorers credential is involved anywhere.
Can I get this data in Python?
Yes, with the apify-client package as shown above. It returns parsed JSON, so there is no HTML or response handling on your side.
Can I get the data into Excel or Google Sheets?
Yes. Export the dataset as XLSX or CSV, or connect the Google Sheets integration so each run appends to a sheet.
Can an AI agent call this Actor?
Yes. Add it to an MCP client with the config above and the model can request what it needs on its own. Every record is flat JSON with named fields, so no post-processing is needed.
Is it legal to scrape block explorers?
Blockchain data is public by design and this Actor reads public explorers, so there is nothing gated here. Addresses are pseudonymous rather than anonymous, so if you link one to a named person you are handling personal data and your own privacy obligations apply. Take your own legal advice for your use case.
Changelog
- 0.0.2 Added the token metadata route, ENS resolution and USD valuation of token balances.
- 0.0.1 First release. Address, transaction and token routes across nine chains.
Feedback
Found a field block explorers publishes that this Actor misses, or an input it rejects? Open an issue on the Issues tab with the input and what you expected. A daily test runs every Actor in the fleet against live sources, so parser fixes ship fast.