Key takeaways

  • Start with Integration status on your app's Integration tab: broken links and failed postbacks cost more than anything else and are the quickest to fix.
  • Reports, Performance grouped by Countries, Devices, Offers, and Sub IDs shows whether the problem is your audience, your placement, or a single traffic source.
  • A stingy conversion rate does more than look poor: offers whose reward rounds to 0 are not shown at all, so your wall gets smaller.

Why are my offerwall earnings low?

Low offerwall earnings usually come from one of three places: a technical fault (failing links, a changing user ID, refused postbacks), a reach problem (users who never find the wall or are blocked from it), or a mismatch (countries and devices with few offers, a stingy reward rate, a slow season). Work through the 11 checks below in order. Each names the Sharklio dashboard screen to open and the fix.

To estimate what your traffic should earn, read How much can you earn with an offerwall?. For users who give up halfway through offers, read Why users start offers but don’t finish. Every report column is explained in How to read your dashboard and reports.

The 11 checks at a glance

Use a date range of at least 30 days. The test user owner-test is never counted, so an app with only test visits shows nothing.

CheckTypical symptomWhere to look
1. Integration and postbacksVisits fail, or users say rewards never arriveApps, your app, Integration tab, Integration status
2. User ID“Missing user ID” page, rewards on the wrong accountCheck a link; Reports, Conversions
3. PlacementFew active users compared with your own user countApp page: Active users; Performance by Sub IDs
4. Currency rateLow clicks per visitor, small offers missingCurrency tab calculator
5. Country mixPlenty of clicks, low EPCPerformance by Countries
6. Device mixDesktop clicks that rarely convertPerformance by Devices
7. Offer fill in small countriesUsers say the wall is emptyOffers page, Country and Device filters
8. VPN blocksUsers report “VPN detected” or “Network not supported”Support messages; Active users
9. Age and audienceClicks with almost no conversions on any offerPerformance by Offers
10. SeasonalityA drop with no change on your sideDashboard cards; Offers page statuses
11. Reversal rateEarnings shrink after they were creditedPerformance, Reversed; Reports, Chargebacks

Checks 1 and 2: integration faults

1. Failed links, undelivered postbacks, and signature errors

Where to look: open Apps, click your app, and go to the Integration tab. At the top, Integration status shows a badge (All set, Needs attention, or how many checks are done) and one row each for Offerwall link, Users reached your offerwall, Postback, and, if you use them, Offers API and Mobile SDK. Read the notes under each row. “Some offerwall links failed in the last 7 days”, or a note such as “12 visits failed in the last 7 days: 9 with a wrong or missing hash”, means users saw an error page instead of offers. On the Postback row, “Your server did not accept the last postback” means users completed offers but your server never credited them. The bar above the tabs also shows the last 24 hours: delivered and failed postbacks.

A failed postback does not lower what you earn on that conversion, but it costs you the next ones: a user who sees no coins rarely starts another offer.

Fix:

  • For link errors, click Check a link and paste a link your site made for a real user. The checker says exactly what is wrong, for example that the hash was made with the postback secret key instead of the link hash salt, or with plain SHA-256 instead of HMAC-SHA256 (the method described in RFC 2104), and shows the expected link.
  • For postbacks, open Reports, Postbacks, set Result to Not delivered, and read your server’s HTTP code or No answer under each row. A 403 often means your handler rejected our hash: check that you hash the transaction ID, user ID, reward, and status exactly as received, with the postback secret key. Then use Send a test postback, and resend the real events as shown in How to resend a failed postback.
  • With the Mobile SDK, “none opened the offerwall” means your app creates sessions but never passes the token on.

The full pre-launch routine is in How to test your app before launch, and the error table is on the Testing and troubleshooting docs page.

2. User ID problems

Where to look: the Users reached your offerwall row counts visits “without a valid user ID”. Paste a real link into Check a link: it flags a user_id that is empty (often because the user was not signed in when the link was made), URL-encoded twice, has a + that turned into a space, has characters that are not allowed, or looks like an email address. In Reports, Conversions, search for a few users and check that the same person always appears under the same ID.

Fix: build the link only for signed-in users, and use a random ID that never changes for that person, on every device. A session ID or an email address breaks the history: My offers shows one person’s offers under several IDs, and rewards land on an ID your site no longer knows. Encode the value once, for example with JavaScript’s encodeURIComponent, which turns + into %2B and @ into %40. Allowed characters are letters, numbers, and . _ @ : + - up to 100 characters.

Checks 3 and 4: users who never see the offers

3. Wall placement and visibility

Where to look: your app’s page shows four numbers for the last 30 days above the tabs: Active users (users who opened this offerwall), Monetized users (users with at least one credited result), Clicks, and Earnings. Compare Active users with your own count of monthly active users. If, say, 5,000 people use your site each month and 150 opened the wall (sample figures), placement is your problem, not the offers. In Integration status, the note under Users reached your offerwall splits users by integration, for example Offerwall and Floating button.

Fix: add sub1 to each entry point (menu, store screen, balance page) and compare them in Reports, Performance, grouped by Sub IDs; the sub ID docs show the format. Then move the wall to where users need your currency. Offerwall placement has the patterns, and on a website the floating Earn button adds a second entry point on every page.

4. A currency rate that is too stingy

Where to look: open the Currency tab. The calculator shows Conversion rate × Split to user = Your user gets, plus what an offer paying $0.050, $0.370, and $2.500 gives. The field hint under Reward rounding says it plainly: offers that would give 0 are not shown.

Illustrative example: a rate that empties the wall

An app sets 10 Coins per $1, a 50% split, and Whole numbers. An offer that pays $0.08 gives 0.4 Coins, which rounds to 0, so that offer disappears from the wall. One that pays $0.37 shows 2 Coins, which looks like nothing next to a 500-coin item. At 1,000 Coins per $1 and a 100% split, the same offers show 80 and 370 Coins. Sample figures only.

Fix: price your currency against what users can buy with it, so an average offer covers a real share of a popular item. Use Up to 3 decimals if your currency is worth a lot per unit. How to set your virtual currency exchange rate walks through the numbers, and the virtual currency calculator lets you try them before you save.

Checks 5 to 7: audience and offer mismatch

5. Country mix

Where to look: Reports, Performance, Countries. Sort by Clicks to see where your users are, then by EPC (earnings per click) to see what each country is worth. A wall with most clicks from countries that advertisers pay little for earns little per click, however good the setup.

Fix: you cannot change where your users live overnight, but you can stop judging the wall by one total. Track EPC per country, and focus your promotion on the countries that convert. Background on why countries pay so differently is in Tier 1, 2 and 3 countries explained, and How country and device mix change earnings goes deeper.

6. Device mix

Where to look: Reports, Performance, Devices, which splits results into Desktop, Android, and iPhone or iPad. Many offers are mobile apps and games, so a desktop-heavy audience often sees fewer offers and converts less. For context, StatCounter’s platform market share data put mobile at about 59% of worldwide web traffic in September 2026 (checked on October 29, 2026), so a site with mostly desktop users is leaving most offers out of reach.

Fix: make it easy to open the same wall on a phone after signing in there, with the same user ID. If you have a mobile app, the Android, iOS, Unity, Flutter, and React Native integrations put the wall where those offers live.

7. Offer fill in small countries

Where to look: open Offers in the sidebar, choose your app, and set the Country filter to one of your top countries and the Device filter to your main device. The summary line above the list counts the offers that match. Then set Status to Hidden: offers you hid earlier are not on your wall either. Offers marked Needs approval run only once your access request is approved.

Fix: show offers you hid without a strong reason, click Request access on offers that need approval and fit your audience, and tell users in small markets that the selection depends on their country. New offers show up on your wall automatically. How to choose which offers your users see covers Hide and Show, and What is fill rate? explains the idea.

Checks 8 and 9: users who cannot or should not complete offers

8. Users on VPNs being blocked

Where to look: the wall blocks VPNs, proxies, Tor, and data center networks, and shows the user a page titled VPN detected, Proxy detected, Tor detected, or Network not supported. Users who change country also see Location changed, and offers pause for a day. These users never reach the offers, so they are not counted as Active users and add no clicks. Your clues are support messages that quote those titles, and a gap between people who clicked your Earn link and Active users. Testing from a VPN or cloud server shows you the same page; that is not a fault.

Fix: tell users before they open the wall that VPNs and proxies must be off. The block page has a Try again button and a link to the connection help page, which walks users through switching to home Wi-Fi or mobile data. Do not try to work around the block: offers cannot track users through these networks, and the rewards would be lost. VPN or proxy detected on the offerwall covers the user side.

9. Age and audience fit

Where to look: your dashboard has no age data, so look at behavior. In Reports, Performance, Offers, a wall where many users click but almost no offer converts often has an audience that cannot finish the steps, or has no reason to want your currency. The Terms require end users to be at least 16, with a parent’s or guardian’s permission under 18, and an offer, an advertiser, or local law can set a higher age.

Fix: keep the wall behind a sign-in and away from users under 16. If your audience is mostly young, the wall is the wrong tool. Offerwall age rules has the details.

Checks 10 and 11: timing and quality

10. Seasonality and offer supply

Where to look: each Dashboard card compares your range with the period before. Compare the same weeks in Reports, Performance, Daily, and check whether your clicks fell (your users) or your EPC fell (the offers). On the Offers page, Not running means an offer is paused for now, for example because its budget or a daily limit is used up, and Cap reached means it returns tomorrow.

Advertisers plan spend around events: Google Ads even has seasonality adjustments for short events where advertisers expect big conversion rate changes. Offer supply on any wall moves with that spending.

Fix: judge changes on a month or more, and compare like with like. To lift a quiet period from your side, a time-limited bonus raises user rewards for set dates without changing your base rate; see Offerwall bonus events.

11. The reversal rate

Where to look: Reports, Performance shows Reversed, the earnings taken back by chargebacks in the period, next to Earnings. Reports, Chargebacks lists each reversed conversion with its totals (Chargebacks, Amount, Users) and the reason when one was given. In Conversions, set Status to Reversed and look for patterns: one sub ID, one country, or a handful of users.

Fix: reversals that cluster on a few users or one source usually mean multiple accounts or fake sign-ups. Take the reward back on the reversal postback, and close the gaps: Stop multi-accounting and VPN abuse covers the controls, and What is a reversal rate? shows how to measure it.

Every check above uses screens you already have

Sharklio is a pay-per-result affiliate network, and every publisher app gets Integration status, Performance by country, device, offer, and sub ID, Conversions and Chargebacks lists, and the Reporting API. See how the wall works, or get in touch if a number still does not add up.

Frequently asked questions

Why does my offerwall have clicks but no conversions?

Check Integration status for failed postbacks first, then Performance by Devices and Countries. Usually the offers do not fit your users’ devices or countries, users give up on long offers, or results are still pending.

Why did my offerwall earnings drop suddenly?

A sudden drop with no change on your side is often a broken link or postback after a site update, so look at Integration status. If that shows All set, compare clicks and EPC by day and country to see whether fewer users came or offers paid less.

Do users blocked for using a VPN show up in my reports?

No. Users stopped by a VPN, proxy, Tor, or data center block never reach the offers, so they are not counted as Active users and add no clicks.

Will a higher conversion rate increase my earnings?

What you earn per conversion does not change, but more currency per offer can make offers worth the effort and brings back offers whose reward rounded to 0. Raise it only as far as your own economy allows.

Can I get more offers for my country?

Offers depend on each user’s country and device, and new offers appear on your wall automatically. Check that you have not hidden offers, and request access to offers marked Needs approval that fit your audience.