Merkl | Blog

How to Build a Point Program with Merkl

Written by Pablo | Jun 20, 2025 9:52:59 AM
Merkl is best known as a platform distributing token rewards — typically used to incentivize users for specific onchain or offchain actions.

But Merkl isn’t limited to token distribution!

Its indexing capabilities and powerful computation engine can just as easily be used to build points systems, giving teams full flexibility to track user behavior and assign points across multiple protocols and chains — just like Etherlink and Puffer have done.

So how exactly do you launch a points program with Merkl? Let’s break it down.



Merkl = onchain indexing + token distribution

 

Merkl excels at two things:

  • Indexing onchain activities across chains (50+) and protocols (200+)
  • Distributing rewards accurately, at scale

These two pillars can work together or independently — and many protocols take advantage of that flexibility:

  • Liquidity mining programs typically use both features: Merkl tracks user activity and distributes tokens accordingly
  • Airdrops use Merkl's reward distribution functionality without relying on its indexing.
  • Points systems, like the ones we’ll explore here, often rely only on Merkl’s indexing power.

 

While Merkl is capable of handling complex reward setups like Uniswap v4 liquidity provision, it also offers robust capabilities to track onchain activities such as LP positions, lending, or protocol usage — enabling the creation of sophisticated points campaigns based on this data.

 

Two ways to build a points program

 

There are two main setups for running points programs with Merkl:

  • Tokenized points — where points are represented by non-transferable ERC20 tokens.
  • Non-tokenized points — where Merkl is used purely for indexing.

Let’s dive into each setup.

 

Tokenized points (ERC20, non-transferable)

In this setup, points are issued as ERC20 tokens but configured to be non-transferable. From Merkl’s perspective, this is just like running a standard token reward campaign.

How does it work?

  • Whitelist Merkl’s Creator and Distributor contracts so we can distribute your points
  • Create your campaigns using Merkl’s standard process — define multipliers, reward rates, and which onchain actions to track
  • Users interact onchain as usual and can claim their non-transferable points via their Merkl’s dashboard

If you later choose to airdrop a token based on points, simply map your airdrop distribution to user point balances. Just be sure to exclude Merkl’s distributor contract, which may still hold unclaimed tokens.

With this setup, you benefit from all of Merkl’s default features — including leaderboards and public campaign visibility in the frontend. Merkl can even assign an estimated value to your points directly within the interface, so users see estimated APR values when farming.

This is a straightforward way to leverage Merkl’s full stack while retaining control over the transferability of your points.

 

Non-tokenized points (pure indexing)

In this case, points are most likely accounted for in an offchain database that you control. This means that Merkl cannot mint points for you, it can just run computations based on onchain activity. Here you simply need to define the logic, Merkl tracks user actions, and you use the results however you like.

How it works:

1. Create a campaign using test tokens to launch computation

Merkl will give you some mock tokens on a chain of your choice (like Gnosis Chain). You'll then be able to use these tokens to create campaigns that effectively track what you’re interested in rewarding with your points (e.g providing liquidity in a pool).

You can setup these campaigns to mirror your intended logic (e.g., “1 mock token per $1,000 deposited”). Note that campaigns can be created in a fully programmatic way through easy scripts.

The campaigns you’re creating with this will effectively distribute mock tokens, but these won’t be visible to your users and users do not need to claim rewards. As explained above, Merkl cannot mint points for you, rather you need to parse the results of these campaigns to know how to allocate your rewards.

2. Get the results via Merkl’s API

Use Merkl’s API to retrieve the list of eligible addresses as well as their relative contribution to the pool or the protocol that you are tracking. Reward amounts are expressed in mock token units.

  • Retrieve all campaigns created by your address: https://api.merkl.xyz/v4/campaigns?creatorAddress=<YOUR_ADDRESS>&test=true

(e.g. https://api.merkl.xyz/v4/campaigns?creatorAddress=0xA9DdD91249DFdd450E81E1c56Ab60E1A62651701&test=true)

  • Get the reward breakdown in mock token units for all the campaigns you created: https://api.merkl.xyz/v4/rewards?chainId=<ID OF THE CHAIN WHERE THE TEST TOKEN IS>&campaignId=<YOUR_CAMPAIGN_ID>&test=true

(e.g. https://api.merkl.xyz/v4/rewards?chainId=100&campaignId=0x83adc24c9644324beebd26e6e2a7b9ffc14ce40d1d7cde309854ef79c9485c4c&test=true)

Please note that the rewards endpoint is paginated — be sure to fetch all pages using: &page=<NUMBER>

3. Normalize and customize

The mock token units (points) can be renormalized to fit your specific needs.

For example, if you create one campaign that distributes 1 point per $1,000 deposited in a protocol, and another campaign that does the same for a different protocol, you can apply different multipliers as needed when allocating points to your users.

If you want to apply a 5× multiplier for the second protocol afterwards, you can simply mint 5x more points to recipients of this campaign — if address A has earned 1 mock token in reward from the second campaign, you can assign 5 points to that address.

This approach offers complete control over point allocation, allowing you to exclude certain campaigns, selectively boost rewards for specific users, or customize the system however you like.

 
4. Display points on your own UI

In this setup, you are responsible for displaying points on their own UI. However, you can easily build a leaderboard or dashboard using the data from Merkl’s mock campaigns via the Merkl API as seen above.

 

Advanced features to supercharge your program 

 

Merkl offers advanced tools that make building complex point systems easier and more powerful:

Forwarders

Merkl features a system called forwarders: when the recipient address in a Merkl campaign belongs to a protocol recognized by Merkl, the rewards are automatically distributed to the users of that protocol — not to the protocol itself.

For example, if a stablecoin issuer wants to reward users of its token, including LPs on Pendle and lenders on Morpho, it only needs to create one campaign. Merkl will automatically recognize and attribute points to those indirect users.

Check if forwarding is supported when rewards are accruing to an address via: https://api.merkl.xyz/docs#tag/node

If you want to apply dedicated points multipliers for holders of these stablecoins, you can blacklist protocols (e.g. here Pendle and Morpho) in the main campaign and create separate campaigns on top of all these underlying protocols. However, this isn’t always necessary, as the main campaign’s rewards endpoint provides detailed reasons explaining how points were accumulated.

Referrals

You can add a referral system to any point program. Merkl can help you reward both referrers and referees with custom multipliers — e.g., “10% boost on points earned.”

 

Wrapping Up

 

Whether you're running a gamified community engagement campaign or want to analyze onchain activity across multiple chains and protocols, Merkl gives you the flexibility to do it your way.

  • Want fast setup and Merkl UI? Use tokenized points.
  • Want full control and custom logic? Go with non-tokenized points.

Merkl’s infrastructure lets you scale reward programs across ecosystems, and adapt point logic exactly to your needs.

 

Ready to launch your own points campaign?

Head to Merkl Studio and get started — or reach out for support on creating your first campaign.