Short answer: Run a sprint. On Zealy a sprint is a leaderboard with a start date and an end date, so the XP it ranks is earned inside that window rather than accumulated forever. That is the one mechanism in the product that pays people for being active now instead of for having joined once. Zealy then decides who won and records which address to pay. It does not move the tokens, and it cannot attach an NFT at all — the reward field says so itself: NFT rewards are not yet available.
What this post will not do: hand you a filter that does not exist. You cannot ask Zealy for "members who claimed something in the last 30 days" and get a list. And it will not tell you how to send an NFT through Zealy, because there is no NFT reward to send. What it can do for the NFT half is get you a defensible list of recipients — the sprint decides who, and the minting and sending happen in your own tooling.
Disclosure: Zealy publishes this and Zealy sells the product being described. Every Zealy behaviour below was read out of the Zealy codebase rather than out of Zealy's own documentation, which turned out to be wrong in several places. Every external number carries its source at the point it appears.
Last verified: 15 August 2026.
Why "reward my active members" is harder than it sounds
Most token distributions pay for a snapshot of the past and then watch the tokens leave. In an academic study of nine airdrops, across most protocols the median recipient made a single token transfer, and the median gap between their first and last was zero days. Rewarding activity instead means paying for behaviour inside a window you set.
That study is "Airdrops: Giving Money Away Is Harder Than It Seems" by Johnnatan Messias, Aviv Yaish and Benjamin Livshits, covering nine protocol distributions. One transfer and no elapsed time is not a member you acquired. It is a queue you paid to stand in front of you once.
The usual response is to filter harder before you send, which works expensively and late. That approach, and what Optimism and LayerZero got for it, is the subject of how to run an airdrop that doesn't get farmed.
There is a cheaper version of the same idea. Instead of distributing to everyone and then subtracting the people you did not want, define a window, publish what earns credit inside it, and pay the ranking that comes out. Nobody has to be removed, because nobody was ever on the list for free.
You cannot filter Zealy members by recent activity
Zealy's member table filters on exactly thirteen columns: id, name, role, join date, Discord handle and ID, TikTok username, X username, X follower count, X ID, email, country and ETH address. Join date is the only date. There is no last-active filter, no last-claim filter, and no XP-in-the-last-30-days filter.
This surprises people, so it is worth being exact about how far it goes. The members page gives you the list above. XP is not even on it — XP is shown as a column but computed after the page of members has already been fetched, which is why it can be neither filtered nor sorted on. The public API is thinner still: search, roles, ids, joinedAfter, joinedBefore and a sort. Zealy's analytics do chart active users over time, but a chart is an aggregate. Zealy will tell you how many people were active last week and will not hand you their names.
Sorting by XP does not rescue you either, because a member's XP is a standing total rather than anything scoped to a period. A member who farmed hard in March and has not opened your questboard since still outranks someone who has claimed something every week this month. Sorting your community by XP sorts it by history.
So the honest statement of the constraint: on Zealy today, "active" is not a property of a member you can query. It is a property of a period of time you define.
The mechanism that works on Zealy: a sprint
A Zealy sprint is a leaderboard with a start date and an end date, counting XP from claims made inside that window on the quests the sprint includes. The ranking is a list of who was active during the period you chose. Members with zero sprint XP are excluded from the payout automatically.
That last detail does more than it looks. The dormant half of your community is not filtered out by a rule you wrote; it is absent from the result because it did nothing in the window. You get the filter you wanted as a side effect of the shape of the thing.
One caveat, because it decides whether you can call a sprint a clean measurement: XP an admin granted by hand inside the window counts toward the sprint too, alongside claims. If you hand out bonus XP, you are adjusting the same number the payout is computed from.
Sprints pay in one of two ways, and both are worth understanding before you pick a number.
Proportional. Each member receives floor(pool × their sprint XP ÷ total sprint XP). Take a 10,000-token pool, 250,000 XP across everyone eligible, and a member who earned 4,000 of it: their share is 160 tokens. Every share rounds down, so the payouts can sum to slightly less than the pool. Note that if you also set a reward zone, the total in that denominator is recomputed over the people inside the zone only — so adding a cutoff raises everyone's share as well as shortening the list.
Tiered. You define rank ranges, each taking a percentage of the pool, split evenly inside the range. Ranks 1–10 might take 40% between them and ranks 11–50 another 20%. You can define up to 50 tiers, and they can neither overlap nor leave a gap between ranges. Tiered pays position rather than effort, which is what you want when the point is a visible race.
On top of either, the reward zone is a hard top-N cutoff. Set it to 200 and rank 201 gets nothing, no matter how much XP they earned. A sprint has no raffle mode — payout is by rank and XP, so if you want randomness you are looking at a quest reward method rather than a sprint.
Communities have been running exactly this shape for years. Bandzaï described a sprint with almost 600,000 $BZAI and Zaï NFTs for the top 200 leaderboard players. CoinW ran a Top 50 leaderboard with a top reward of 100 USDT. Alphaday put the top 10 performers on its leaderboard in line for a share of a $300 prize pool in ETH. ShimmerSea offered 5,500 USDT and 404 special Lumi NFTs to get people testing every part of its protocol. All four case studies are from 2023, and all four are reward zones with a date attached.
One of them makes the NFT point for me. Bandzaï's prize was tokens and NFTs for a top-200 zone. The sprint picks the 200. Delivering the NFTs to them was, and still is, the project's own job — which brings us to what Zealy will and will not put in someone's hands.
What Zealy actually sends, reward type by reward type
Zealy's data model carries seven reward types and the quest editor offers six: XP, Discord role, Zaps, USDC, token, and a custom "other". USDC is the only one that lands by itself. Token rewards are recorded rather than sent, and NFT rewards are not available in the product today.
| Reward | In the quest editor? | Who actually moves it |
|---|---|---|
| XP | Yes | Zealy, inside Zealy |
| Zaps | Yes | Zealy, inside Zealy |
| Discord role | Yes | The Zealy bot, asynchronously; a member with no linked Discord never receives one |
| USDC | Yes | Zealy, automatically on a successful claim, out of a balance you pre-fund |
| Token | Yes | You. Zealy records the winner and the address to pay |
| Custom "other" | Yes | You, by whatever means you described |
| NFT | No | Nobody. The field reads NFT rewards are not yet available |
The NFT row is the one to read twice. Zealy's data model still carries an NFT reward type and Zealy did once mint NFTs through an external service on Polygon behind a feature flag. In the product you use today, the NFT reward field renders a single string telling you it is not available, and everything behind it is switched off. Any guide that shows you how to attach an NFT reward to a Zealy quest is describing something that is not there.
Token rewards work, with a division of labour that is easy to misread. Zealy decides who won and writes a pending row holding the winner and their verified address. Then you send from your own wallet and paste the transaction hash back in — there is a bulk action that stamps one hash across every pending winner at once, which is how you settle a top-200 sprint without 200 copy-pastes. Zealy supports more than twenty network identifiers for this, two of which are testnets.
Where Zealy stops and the community starts, for a token reward. USDC is the exception — it is credited automatically.
Two consequences follow, and neither is in the marketing copy. Zealy holds no signer for token rewards, so the community pays the gas. And Zealy does not currently verify on-chain that the right amount reached the right address. The single-winner form checks that the transaction ID at least has a valid shape; the bulk action that stamps one hash across every pending winner only checks that you typed something. The hash is a record of your claim to have paid, not a proof of payment. If your community is large enough for that distinction to matter, keep your own reconciliation.
USDC is the exception that behaves the way people expect a reward to behave. You top up a balance, each quest locks funds against it, and a successful claim credits the member automatically. The USDC accrues as a Zealy-side balance and is withdrawn to the member's linked Polygon wallet. Point people at the withdrawal screen for the current terms rather than promising them a net figure in your campaign brief.
What recipients owe on any of this is a separate question with real consequences, and earning crypto without buying any covers the recipient side.
Zealy vs Galxe on getting the reward out the door
Galxe ships an NFT reward type and executes token raffles on-chain. Zealy does neither: NFT rewards are disabled and token rewards are recorded, not sent. The counterpoint is that Galxe's on-chain raffle charges the user a gas fee, and Galxe's custom rewards are distributed by the project, the same as Zealy's tokens.
| Zealy | Galxe | |
|---|---|---|
| NFT as a reward type | Not available; the field says NFT rewards are not yet available | Supported. Galxe lists its rewards as "Points, OAT, NFT, Custom Rewards, Mystery Boxes, Tokens, and Discord Roles" and says it "supports NFT rewards on any compatible blockchain network" |
| Token distribution | Zealy records the winner and address; the project sends | "Token Raffles" operate on-chain, while "Token FCFS" remains off-chain without triggering a transaction |
| Who pays gas | The project, from its own wallet | For raffle-mode token rewards, "requiring users to pay a gas transaction fee in G tokens on the Gravity network" |
| Custom rewards | The project delivers, same as tokens | "The project is responsible for distributing these rewards, which will be handled outside of Galxe" |
Galxe quotes are from its published reward documentation, linked in the table header.
Read the trade honestly. If what you need is an NFT arriving in a wallet as the direct output of finishing a quest, Galxe does that and Zealy does not, and no amount of Zealy sprint design substitutes for it. If what you need is a distribution where the recipients pay nothing and touch no chain to receive, Zealy's USDC path does that and an on-chain raffle does not. Both platforms leave custom rewards on the project's desk, so nobody has solved the general case.
How to run a sprint payout on Zealy, step by step
Set the sprint dates first, because the window is the filter. Choose proportional or tiered payout and a reward zone. When the sprint closes, export the leaderboard or the reward winners to get wallet addresses, send from your own wallet, then paste the transaction hash back into Zealy.
1. Decide what the window is measuring. Sprint XP comes from claims made between the start and end dates, so the quests you publish inside that window are the definition of "active" you are paying for. If you want depth rather than clicks, weight the XP that way before the sprint opens, not after. Creating a sprint covers the setup.
2. Pick proportional or tiered. Proportional rewards volume of effort and produces a long tail of small payouts. Tiered concentrates value at the top and produces a race. A reward zone of a few hundred keeps the payout list a size you can actually settle by hand.
3. Gate the quests, not the members. There is no member allowlist on Zealy, so the way you keep a sprint honest is with quest conditions. Zealy accepts seven condition types — completing another quest, level, Discord role, date, holding an NFT, X follower count, and X account age — combined with AND or OR. Level conditions accept "above" and "below" only, and NFT gating is Polygon-only. The conditions documentation lists these, though it currently says six.
4. Choose the reward method per reward. Reward methods are all, first-come-first-served, raffle, top and vote, and they are set per reward rather than per quest. First-come-first-served and raffle each cap at 1,000 winners, top also caps at 1,000, and vote has no upper bound. A raffle draw is a random ordering of successful claims, and it needs either a claim limit or a closing date to be valid.
5. Export the right file. The members export gives you userId, name, role, XP, join date and ban status, and no wallet address. Addresses come from the leaderboard export or the reward-winners export — though the reward-winners file emits an Ethereum address column specifically, so a Solana or TON community should take the leaderboard export instead. Pulling the members list and wondering where the wallets went is the most common wasted hour in this whole workflow.
6. Send, then record. Pay from your wallet, paste the hash, use the bulk action if the winner list is long. Publish the hash to your community as well — since Zealy does not verify it on-chain, your members verifying it is the check that exists. Rewards documentation covers the reward setup itself.
The parts that will bite you
Zealy has no member allowlist, no token-balance gate, and no on-chain check that your payout transaction did what you say it did. Resetting the leaderboard is destructive and moves a live sprint's start date. The members export contains no wallet address. Each of these has a workaround, and none of them is obvious.
The leaderboard reset is the one that costs real money. Resetting wipes manual XP grants, zeroes every quest's claim counter, and — if a sprint is running — pulls that sprint's start date forward to the moment you reset. Half your sprint's history can disappear from a button that reads like housekeeping. Finish sprints before you reset, or do not reset at all.
The missing gates shape what you can promise. You cannot upload a list of addresses and restrict a quest to them, and a token-balance condition is not something you can set even though the concept exists in the codebase. So "holders only" is not a Zealy sprint you can configure; NFT holding on Polygon is the closest available gate.
Level gating deserves its own warning. You gate on level, not on raw XP, and only above or below a level. Level thresholds come from a fixed global curve that is identical in every Zealy community, so a "level 5 and above" tier means the same amount of accumulated XP in your community as in everyone else's. Design tiers knowing you are not setting the thresholds — how to run a crypto ambassador program works through building named ranks around that constraint.
None of this makes the sprint a bad answer. It makes it a specific one: Zealy is good at deciding who deserves the reward and unromantic about moving it. If you go in expecting a distribution engine, you will be annoyed. If you go in expecting a very precise scoreboard with an export button, you will get exactly that, and the sending is thirty minutes of your own wallet.
