Skip to main content
Everything here happens at walletlink.social with no code. The API covers the same ground programmatically, with one difference noted under scan depth.

Getting addresses in

Three routes, equivalent once the lookup starts.

Upload a file

CSV or Excel. Drop it anywhere on the page.

Paste a list

Any text holding addresses. They are picked out of whatever surrounds them.

Import a contract

Give a contract address, get its holders. Pro and Unlimited.

Files

A CSV or .xlsx is scanned for a wallet column, and any balance or value column is detected automatically and used for priority scoring. Other columns come along unchanged and appear in the export, so a list arriving with a tier or a cohort label leaves with it.

Pasting

Addresses are extracted by pattern, so a block of text with addresses scattered through it works as well as a clean list. Duplicates are removed.

Contract import

Both NFT collections and token contracts are supported, on every network we cover: Ethereum, Base, Robinhood Chain, Arbitrum, Polygon, Optimism and BNB Chain.
A holder list can be truncated. Token holder lists in particular come from an index with its own ceiling, and when a result fills that ceiling exactly we say so rather than implying the list is complete. Treat a truncation warning as real: the collection has more holders than you are looking at.

How many addresses per lookup

The cap is per lookup, not per month or per lifetime. There is no cumulative quota on any plan.

Choosing how hard to look

Before starting, pick Fast or Deep scan. Deep is the default and finds the most; fast answers from the walletlink index alone and returns in seconds. The estimate on screen follows the choice. Scan depth covers what each one reads and when the cheaper answer is the right one.

Keeping the result

A lookup is saved to your history by default, and you can name it while it runs. An unnamed lookup is still saved; the name is there so you can find it again among twenty others. Turn saving off for a one-off, and export before you leave the page: nothing is kept.

Growing a saved lookup

On Unlimited, a saved lookup is a living list rather than a snapshot.
  • Add addresses to it later. They are resolved and merged into the existing result rather than starting a separate one, so a holder list that grows stays in one place.
  • See what is new since you last opened it. The index gains identities every day, so a wallet that resolved to nothing in March may resolve now. Rows that gained an identity since your last visit are marked NEW when you reopen the lookup, which means a list you ran once keeps paying out without you re-running anything.
On other plans a saved lookup is a fixed record: you can open it, rename it, and export it, but its contents do not change.

Getting results out

CSV

Every column, every row, sorted by priority score. Your original columns are preserved alongside the resolved identities.

Handle list

Just the handles, in the shape an X list import expects.
Priority score ranks by holdings weighted by Farcaster reach, so the top of a CSV export is the part of your list worth contacting first. It is calculated on the paid plans.

Reaching people directly

Unlimited accounts can send Farcaster direct messages to the resolved list from inside the app, without exporting first. This needs a Farcaster API key of your own, which the app stores only if you ask it to. X has no equivalent: there is no API route for messaging an arbitrary handle, so the handle list export is the path there.

Going the other way

Reverse lookup takes an X handle or a Farcaster username and returns the wallets attached to that person. It is on the front page for Pro and Unlimited accounts, and it answers the question that comes up most often before a campaign: does this person already hold our token. Results are capped at 100 and ordered by Farcaster reach, matching the API.