Publisher guide

Offerwall setup guide

This guide explains how to create an offerwall, send visitors to it, track the right user, customize the design, and reward users safely after offers are completed.

This guide is written for the current offerwall builder. Older offerwalls you already created still work, but new offerwalls use the newer setup and embed options.

Quick start

1

Create a new offerwall from Tools, then choose one of the starter templates.

2

Set the public headline, instructions, point name, and points per $1.00 payout.

3

Pass your own user ID with ?subid=USER_ID, or enable the username prompt if you cannot pass subid from your site or app.

4

Copy the direct link, iframe code, script code, or Android code from Get Code.

5

Set up your publisher postback before sending real users so your system can reward completed offers.

6

Test the offerwall, confirm the layout on desktop and mobile, then review Statistics and Postback Logs after traffic starts.

How the offerwall works

An offerwall shows visitors a list of offers they may complete for points, coins, gems, cash, or another reward name you choose.

CPAlead selects eligible offers based on the visitor, offer rules, device, country, and current offer availability. Desktop users normally see desktop-safe offers. Mobile users can also see app install offers when eligible.

When a visitor starts an offer, the offer opens with tracking values attached. If the advertiser later confirms that the required action was completed, CPAlead records the conversion and can send your publisher postback.

The advertiser controls the final completion signal. If the advertiser does not send a valid signal, the offerwall cannot confirm the reward.

Create and configure the wall

The internal title is for your dashboard. The public headline and instructions are shown to visitors.

The currency name is the reward label visitors see, such as Points, Coins, Gems, Credits, or Robux. The points per $1.00 payout setting controls how the offer payout is converted into the reward amount shown on the wall.

The default Reward Wall logo can be left in place or replaced with your own safe HTTPS image URL. SVG files, localhost URLs, and private network URLs are blocked.

Dating offers can be disabled if they do not fit your audience. Other offer eligibility is handled by CPAlead based on offer rules and visitor context.

Ways to send visitors to the offerwall

Use the Get Code option on your Tools page after the wall is created. The code modal gives you several safe ways to use the same offerwall.

A direct link is simplest. An iframe keeps the wall inside your site. The script option opens the wall from your own button. Android code opens the wall from an app screen.

Whichever option you use, include subid whenever possible so rewards and history can be matched to the correct visitor.

User IDs and the username prompt

The best setup is to add your own user ID, wallet ID, or session reference to the offerwall URL as subid. Example: ?subid=USER123.

The subid value is stored with the click and returned in your publisher postback. This is how your system knows which visitor should receive the reward.

If your website or app cannot add subid to the link, you can enable the option that asks visitors for a username before showing offers. That value is used as the visitor reference for reward history and postback crediting.

The username prompt is not a login system. It does not prove account ownership. It is only a fallback way to collect a visitor reference when you cannot pass subid yourself.

Rewarding users with postbacks

The offerwall can display offers immediately, but your site or app still needs a reward process.

A publisher postback is the server-to-server notification CPAlead sends to your endpoint after a qualifying offer conversion is recorded.

Your reward system should use the postback to find the visitor by subid, store the lead ID so duplicate notifications do not double-credit the user, and then add the correct points or reward.

Never reward only because a visitor clicked an offer or says they finished it. Reward from the postback signal so your ledger matches completed conversions.

Design and customization

Start from one of the light or dark templates, then change the title, instructions, logo, points, HTML, and CSS.

Advanced Options lets you edit the layout HTML, offer card HTML, and custom CSS separately. You can copy the AI prompt and code into your chat assistant, ask it for changes, and paste each returned section back into the builder.

Only approved placeholders are allowed. Required placeholders must stay in place so the offer list, offer links, privacy panel, terms panel, points balance, history, filters, and modal behavior continue to work.

JavaScript, script tags, event attributes, external stylesheets, forms, iframes, unsafe links, unsafe image sources, and CSS resource loading are removed or blocked for safety.

Test before sending traffic

Preview both desktop and mobile sizes in the builder.

Open the public wall link from Get Code and make sure the logo, points, categories, search, sorting, offer modal, Privacy, and Terms sections look correct.

Test your postback endpoint before sending real users. A working offerwall without a working postback can lead to users completing offers without receiving rewards in your app or website.

After traffic starts, check Statistics and Postback Logs to confirm clicks and conversions are being tracked as expected.

Embed examples

Replace YOUR_SLUG with the slug from your Get Code modal and replace USER123 with your own visitor ID.

Direct link

Use this when you want to send visitors to the hosted reward wall page.

https://www.cpalead.com/wall/YOUR_SLUG?subid=USER123

Iframe embed

Use this when the wall should appear inside your own page.

<iframe src="https://www.cpalead.com/wall/YOUR_SLUG?subid=USER123" width="100%" height="760" style="border:0;" loading="lazy"></iframe>

Button script

Use this when you want your own button to open the wall.

<script src="https://www.cpalead.com/offerwall-v2.js?bid=YOUR_SLUG"></script>
<button type="button" onclick="cpld_run()">Open rewards</button>

Android app

Use this pattern when an Android app opens the hosted wall in a browser tab or web view.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.cpalead.com/wall/YOUR_SLUG?subid=USER123"));
startActivity(intent);

Important placeholders

Advanced templates must keep the required placeholders. These are the most important ones publishers usually edit around.

Placeholder
Description
{{ offer_list }}
Renders the full list of available offers.
{{ featured_offers }}
Renders the featured offer strip.
{{ offer.link }}
Required offer card link. Without this, visitors cannot start offers.
{{ offer.image }}
Required offer image placeholder.
{{ offer.title }}
Offer title shown to visitors.
{{ offer.description }}
Short offer description shown to visitors.
{{ offer.points }}
Converted reward amount shown on the card.
{{ offer.currency }}
Your reward currency name, such as Points or Gems.
{{ points_balance }}
Shows the visitor reward balance area.
{{ history_panel }}
Shows visitor reward history when available.
{{ privacy_panel }}
Shows the default privacy text.
{{ terms_panel }}
Shows the default completion and reward terms.

Best practices

  • Tell visitors exactly what reward they can earn and what they need to do.
  • Pass subid from your own logged-in user system whenever possible.
  • Keep your postback endpoint fast. It should return a normal HTTP 2xx response quickly.
  • Store lead IDs and ignore duplicates so retries do not double-credit users.
  • Do not encourage VPN use, fake information, repeat completions, or misleading traffic.
  • Make your reward value realistic. High conversion rates come from clear offers and fair rewards, not from confusing users.
  • Review offer performance regularly and use Manage Offers if you need to block an offer that does not fit your audience.

Troubleshooting

Visitors see offers but do not receive rewards in my app.

Check that your publisher postback is saved, reachable, returns HTTP 2xx, and uses subid to find the correct visitor.

My postback does not know which user to credit.

Pass ?subid=YOUR_USER_ID in the wall URL. If you cannot pass subid, enable the username prompt as a fallback.

The iframe is too short or has extra scrolling.

Increase the iframe height, use width="100%", and test desktop and mobile page layouts.

The preview does not change after editing HTML or CSS.

Click Apply design changes to preview after editing advanced code. This lets the builder clean the code before rendering it.

A visitor completed an offer but no reward arrived.

Rewards depend on the advertiser sending a valid completion signal. Check Postback Logs first. If no conversion signal arrived, the wall cannot confirm the action.

My custom design was changed after saving.

The safety cleaner removes unsafe HTML, JavaScript, external CSS, unsupported placeholders, and risky image or link sources.