Create Multiple Campaigns
Everything you need to know to create multiple campaigns in batch on Merkl
While Merkl Studio is ideal for creating single campaigns, Merkl also provides tooling for campaign creators who need to create multiple campaigns at once.
This guide covers all available methods, from the visual Batch Studio interface to programmatic API approaches.
All methods involve working with campaign configurations - whether you're using Studio, API templates, or building configurations from scratch.
Global Settings
When creating multiple campaigns in a batch, certain parameters are shared across all campaigns:
Fixed Parameters (cannot be modified per campaign):
- Reward Token: The token used for rewards across all campaigns
- Reward Chain: The chain where rewards will be distributed
- Campaign Manager: The address managing the campaigns
Customizable Parameters (can be modified per campaign):
- Campaign Dates: Start and end timestamps can be customized individually for each campaign
These global settings apply to all methods described below, whether using Batch Studio or the API.
Best Practices
Before diving into the specific methods, here are some general best practices for creating multiple campaigns:
- Keep batches under ~20 campaigns to avoid transaction size issues on most chains
- When reusing configurations from existing campaigns, pay attention to blacklists that may be inherited. Review and update them as needed for your new campaigns
Method 1: Using Batch Studio (Recommended) ⭐
Access: https://studio.merkl.xyz/batch
The Batch Studio provides an interface for creating multiple campaigns at once.
Global Settings (orange zone on the interface) correspond to the Global Settings described above. The reward token, reward chain, and campaign manager are fixed at the batch level and cannot be modified per campaign. Campaign dates can be customized individually for each campaign.

Workflow
1. Add Campaigns (green zone on the interface)
Use protocol templates (e.g., "Aave Borrow", "Uniswap V3") from the search bar, search by campaign ID or creator address, or import a JSON file with pre-configured campaigns.
- Protocol templates: Search by protocol name (e.g., "Aave", "Uniswap") to see all available campaign types for that protocol. Each template contains a complete base configuration with core parameters pre-filled. When you select a template, a popup appears asking you to fill in the required fields, including reward distribution method and protocol-specific fields such as pool address (for DEX pools), market address (for lending protocols), or token weights (for CLAMM).
- Campaign ID or Creator Address: Search by existing campaign ID or creator address to import a complete campaign configuration. Use Edit settings (blue zone on the interface) to customize any parameters, including campaign dates per campaign within your batch.
- Import JSON: Import a JSON file with pre-configured campaigns.
2. Configure & Customize
In the blue zone on the interface, define the number of tokens to distribute for each campaign. Click Edit settings for advanced configuration on any campaign, notably to modify campaign dates per campaign if you want different timeframes within your batch.
3. Review & Launch
Click Review Batch to verify your configuration, then Launch Batch (EOA wallets) or Download Payload (Safe wallets). Once you have a payload, refer to Create a Campaign from a Multisig or Gnosis Safe for execution instructions.
Method 2: Using Campaign Configurations
This method is the programmatic equivalent of Batch Studio, using the Merkl API exclusively. It allows you to generate a campaign payload using full campaign configurations.
1. Retrieve Campaign Configurations
Use this endpoint to retrieve campaign configurations from existing campaigns.
2. Adjust Parameters
Modify the parameters in the configurations according to your needs. Refer to the campaign configuration documentation for details on available parameters.
Before generating your payload, you can preview how your campaigns will appear using the campaign preview endpoints to validate your configurations and catch potential issues early.
3. Generate the Payload
Use this endpoint to generate your Safe-compatible transaction payload.
In the request body, provide your configurations as a JSON array:
[{
"distributionChainId": 56,
"campaignId": "0xcadb252f36c79aacbd6c96ce2af6cee374c2b0a0929ef6878525bee24987ed5e",
"amount": "5000000000000000000000000",
"computeChainId": 56,
"creator": "0x67C06896Efb9Ce0A14C32B597Fa8bAa3f2659e7D",
"startTimestamp": 1763636400,
"rewardToken": "0xEdBeBe204Ef070B6880E07A28b55edc7748C24BA",
"distributionMethodParameters": {
"distributionMethod": "DUTCH_AUCTION",
"distributionSettings": {}
},
"campaignType": 18,
"endTimestamp": 1764068400,
"blacklist": [],
"whitelist": [],
"forwarders": [],
"targetToken": "0x5029f49585D57ed770D2194841B5A0bE06BFc2ED"
}]
For additional encoding options to create your campaigns onchain (direct transaction data, single campaign encoding, etc.), see the encoding and decoding documentation.
If you need help or encounter issues, contact us on Discord.