> For the complete documentation index, see [llms.txt](https://docs.j.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.j.tools/tools/wallets/multi-sender.md).

# Multi Sender

Last updated: June 2026 · Solana mainnet

[Multi Sender](https://j.tools/en/tools/multi-sender) sends one token, SOL or an SPL token, to up to 1000 recipient wallets in a single run on Solana mainnet. It runs from your browser wallet, no code needed, and shows a flat platform fee before you sign. Paste or upload your list, pick how each address gets its amount, review the summary, and send. It is built for airdrops, batch payouts, and presale or test distributions where repeating manual transfers would take all day.

{% hint style="warning" %}
**About fees.** Every action has two costs: the Solana **network fee** paid to validators, and the **J Tools platform fee**. The platform fee always shows in the app before you confirm, and nothing is charged until you sign. Fees can change over time, so trust the in-app summary rather than a number you saw once.
{% endhint %}

## When to use this

* You are running an airdrop or a community and reward distribution. Working from a holder list? The [Airdrop to holders](/guides/airdrop-to-holders.md) guide walks the full flow.
* You need batch payouts to many wallets at once.
* You are handing out presale or test allocations from a fixed list.
* You want to send one token to a known set of recipients instead of clicking through transfers one by one.

If you need different tokens going to different wallets in the same job, use [Many to Many](/tools/wallets/many-to-many.md). To pull funds in from many wallets instead of pushing them out, use [Batch Collector](/tools/wallets/batch-collector.md). Not sure what an SPL token is? The [glossary](/getting-started/glossary.md) has a quick definition, and [SPL vs Token-2022](/concepts/spl-vs-token2022.md) covers the two standards Multi Sender handles.

## Before you start

* A connected wallet ([how to connect](/getting-started/quick-start.md)), or your own imported wallet if you sign with a private key.
* Enough balance to cover every recipient amount plus the platform fee, the network fee, and account rent for any new SPL recipients.
* For an SPL token: the token's mint address, picked with the built-in token selector. Your sending wallet must already hold that token.
* Your list of recipient addresses, ready to paste, upload as CSV, or add by hand.

{% hint style="info" %}
For SOL, each recipient amount has to be at least the rent-exempt minimum shown in the tool. Anything smaller cannot create a fresh recipient account, so the tool blocks it.
{% endhint %}

## Step by step

{% stepper %}
{% step %}

### Pick the currency

Choose **SOL** or **SPL Token**. For an SPL token, select the mint and the page reads your balance from the active wallet. Opening the tool with a `?token=` link fills the mint in for you and switches to SPL automatically.
{% endstep %}

{% step %}

### Add your recipients

Open the Import Wallet terminal to paste addresses or upload a CSV. Each line is either `recipient` or `recipient,amount`. You can also use **Add Row** to type addresses in by hand. Up to 1000 recipients per run.
{% endstep %}

{% step %}

### Set the amounts

Open **Advanced Send Settings** and choose a mode: Equal, Random, Random Range, or Percentage. Enter a total (Equal and Percentage) or a min and max (Random). Amounts fill across the editable rows on their own, no Apply button. The **Max** helper fills the largest total you can actually send. Any row you edited by hand stays as you left it.
{% endstep %}

{% step %}

### Clean up the list

If the list has problems, use **Clean up list** to drop invalid, duplicate, and self-address rows. These block the send, so clearing them is required before you can run.
{% endstep %}

{% step %}

### Review the summary

The summary shows total recipients, total amount, the platform fee, the network fee, account rent for any new SPL recipients, what recipients receive, and the total leaving your wallet. Read it before you commit.
{% endstep %}

{% step %}

### Send to all

Click **Send to All**. With a connected wallet, the run pre-simulates, then asks you to sign the transactions in chunks. With a private-key sender, transfers run server-side, one signature per recipient.
{% endstep %}

{% step %}

### Track and retry

Each row shows pending, success, or failed, with a signature and a Solscan link. Failed rows can be retried: **Send** only re-sends rows that have not succeeded yet, so a delivered row is never charged twice. Download a CSV receipt when the run is done.
{% endstep %}
{% endstepper %}

[**Open Multi Sender in the app →**](https://j.tools/en/tools/multi-sender)

{% hint style="info" %}
**About wallet warnings.** Some tools sign more than one thing in a single step, for example creating a token and its metadata together. Phantom can show a caution banner for these multi-step transactions. The banner is expected here and does not mean something is wrong. Read what you are signing, then approve.
{% endhint %}

## Multi Sender vs sending transfers one by one

|                    | Multi Sender                                         | Manual transfers                      |
| ------------------ | ---------------------------------------------------- | ------------------------------------- |
| Recipients per run | Up to 1000 from a CSV or paste                       | One wallet at a time                  |
| Setup              | No code, runs in your browser wallet                 | Repeat the same flow by hand          |
| Time               | Usually under a minute to queue                      | Hours for a big list                  |
| Amounts            | Equal, Random, Range, or Percentage filled for you   | Type every amount yourself            |
| Custody            | You sign in your own wallet, keys never leave it     | Same, but no batching                 |
| Fee                | A flat platform fee shown before you sign            | Network fee per transfer, no tool fee |
| Mistakes           | Duplicates and self-sends cleaned out before the run | Easy to fund the wrong address twice  |

## The options, explained

| Field              | What it does                                                                                                                                                                                                                                                       |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Token type         | Send native SOL or an SPL token. Toggle between **SOL** and **SPL Token**.                                                                                                                                                                                         |
| Token mint         | The SPL mint address, required only for SPL sends. Pick it with the token selector, or let a `?token=` link fill it.                                                                                                                                               |
| Recipients         | Your list of address and amount targets, from 1 to 1000. Every address must be a valid Solana pubkey and every amount above zero.                                                                                                                                  |
| Distribution mode  | How per-recipient amounts get worked out. Equal splits a total evenly. Random gives each row a random absolute amount between min and max. Random Range works the same way over a range. Percentage splits a total by weight inside a min and max percentage band. |
| Sender private key | Used only on the private-key path, for self-custody users entering their own key. The connected-wallet path uses your wallet adapter and never touches a raw key.                                                                                                  |

{% hint style="info" %}
The amount modes only write numbers into your rows. You can still hand-edit any single row after filling, and the summary recalculates on the fly.
{% endhint %}

## If something goes wrong

* **Send is blocked by invalid rows.** Invalid, duplicate, or self-address rows stop the run. Duplicates would double-pay and self-sends just waste fees, so run **Clean up list** first.
* **Amount too small (SOL).** Each SOL recipient needs at least the rent-exempt minimum shown in the tool to create its account. Raise the per-address amount.
* **Not enough balance.** Sending more than the wallet holds is caught up front, for both SOL and SPL, so a run never fails halfway through.
* **A few rows failed.** Network hiccups happen mid-run. Hit **Send** again and only the non-success rows go out.

For the full list, see the [Error codes reference](/reference/error-codes.md).

## FAQ

<details>

<summary>How many wallets can I send to at once?</summary>

Up to 1000 recipients in a single run. For a connected wallet, the work is split into chunks that you approve in your wallet; the private-key path sends one transfer per recipient.

</details>

<details>

<summary>Why does my SPL run sign several smaller transactions?</summary>

SPL transfers are capped at a handful of recipients per transaction and each recipient gets an idempotent account-create instruction. That keeps each batch reading as a normal airdrop instead of tripping a wallet's "could be malicious" warning. It is the safe shape, not a bug.

</details>

<details>

<summary>Will a failed row charge me twice?</summary>

No. Retrying only re-sends rows that have not succeeded. Anything already delivered is skipped, so you never pay for the same recipient twice.

</details>

<details>

<summary>Can I send different tokens to different wallets?</summary>

Not here. Multi Sender pushes one token to the whole list. For per-wallet token and amount pairs, use [Many to Many](/tools/wallets/many-to-many.md).

</details>

<details>

<summary>Does J Tools hold my funds or keys?</summary>

No. You sign in your own wallet, or with your own key on the private-key path, and the transfers go straight from your wallet to the recipients.

</details>

## Related tools

{% content-ref url="/pages/eyvl1w0Ri5KEBHvrUAxz" %}
[Many to Many](/tools/wallets/many-to-many.md)
{% endcontent-ref %}

{% content-ref url="/pages/7CPBHR61Y6akMdkeSBGW" %}
[Batch Collector](/tools/wallets/batch-collector.md)
{% endcontent-ref %}

{% content-ref url="/pages/o5eO6abVdoCCB4WkfKVR" %}
[Holder Booster](/tools/boost/holder-booster.md)
{% endcontent-ref %}

{% content-ref url="/pages/nHTziE15NKeVLAQMnxv5" %}
[Relay Transfer](/tools/wallets/relay-transfer.md)
{% endcontent-ref %}

{% hint style="warning" %}
**About multi-wallet mode.** This mode works with private keys you import into the page. Only use wallets you can treat as disposable, and rotate them after you are done. For everything else, J Tools stays non-custodial: you sign in your own wallet, and we never ask for its key.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.j.tools/tools/wallets/multi-sender.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
