Batch many ERC-20 and NFT transfers on Starknet into a single transaction, from a CSV file. Fewer signatures, less gas, no scripting.
Non-custodial: the app builds a client-side multicall and your wallet signs it. There is no backend and no custom contract — transfers go directly from your wallet to each receiver.
Comma-separated, with a mandatory header row using these exact columns:
| column | meaning |
|---|---|
token_type |
erc20 or nft |
token_address |
Starknet address of the token contract |
receiver |
Starknet address of the recipient |
amount |
human-readable amount (1 = 1 token, not base units); used for erc20 |
id |
NFT token id (for nft rows); leave blank for erc20 |
token_type,token_address,receiver,amount,id
erc20,0x049d3657...,0x0123abc...,100,
erc20,0x049d3657...,0x0456def...,250.5,
nft,0x07f8a2b1...,0x0789aaa...,1,42See public/example.csv.
- Wallet:
@starknet-start/reacton top ofget-starknet(wallet-standard) — auto-discovers every installed Starknet wallet. - Amounts: each ERC-20's
decimalsis read on-chain and used to convert the human-readable amount to base units. - Execution: all rows become one multicall (
transferfor ERC-20, ERC-721transferFromfor NFTs), submitted as a single all-or-nothing transaction. - Network: mainnet only.
The whole CSV is sent as one transaction, so very large files can exceed Starknet's per-tx limits. Split the CSV if a transaction fails to estimate.
npm install
npm run dev # local dev server (base path "/")
npm run build # production build to dist/
npm run previewFor local builds without the GitHub Pages base path: VITE_BASE=/ npm run build.
Pushing to main triggers .github/workflows/deploy.yml, which builds and publishes dist/ to GitHub Pages. Enable Settings → Pages → Source: GitHub Actions once.
This is a community tool. Verify recipients and amounts before signing — transfers are irreversible.