Aquileo | Gabcast | Best Apps to Earn Real Money
As seen on
Reddit YouTube TikTok
🌟 Sarah from Texas earned $47 yesterday with Bigcash
💰 Mike from Florida cashed out $23 via PayPal today
🎉 Jessica from California claimed her $15 bonus in 2 minutes
✅ David from New York earned $31 testing apps this week
🌟 Sarah from Texas earned $47 yesterday with Bigcash
NEW
Welcome back.
View app →

🎁 Sign Up Bonus Apps

These apps give you a bonus just for signing up — free money before you even start.

More Apps
No apps match your filters. Try adjusting your search.

App

Install on your phone.

QR Code
Scan to install on your phone
iPhone Camera · Android Google Lens
Free install · ready in 30 seconds
'; } return '
' + iconLetter(app.name) + '
'; } function starsHTML(rating, size) { const full = Math.round(rating); const empty = 5 - full; const sz = size || ''; return '' + '\u2605'.repeat(full) + '\u2606'.repeat(empty) + ' ' + rating + ''; } // ========== GEO PERSONALIZATION ========== var geoConfig = { US: { symbol: '$', name: 'the US', high: '50+', med: '15-50', low: '15', hero: '300+' }, GB: { symbol: '£', name: 'the UK', high: '40+', med: '12-40', low: '12', hero: '250+' }, CA: { symbol: 'CA$', name: 'Canada', high: '65+', med: '20-65', low: '20', hero: '400+' }, AU: { symbol: 'AU$', name: 'Australia', high: '75+', med: '22-75', low: '22', hero: '450+' }, DE: { symbol: '€', name: 'Germany', high: '45+', med: '14-45', low: '14', hero: '280+' }, FR: { symbol: '€', name: 'France', high: '45+', med: '14-45', low: '14', hero: '280+' }, IT: { symbol: '€', name: 'Italy', high: '45+', med: '14-45', low: '14', hero: '280+' }, IE: { symbol: '€', name: 'Ireland', high: '45+', med: '14-45', low: '14', hero: '280+' }, CH: { symbol: 'CHF', name: 'Switzerland', high: '50+', med: '15-50', low: '15', hero: '300+' }, AT: { symbol: '€', name: 'Austria', high: '45+', med: '14-45', low: '14', hero: '280+' }, NG: { symbol: '₦', name: 'Nigeria', high: '20K+', med: '5K-20K', low: '5K', hero: '100K+' }, IN: { symbol: '₹', name: 'India', high: '4K+', med: '1K-4K', low: '1K', hero: '25K+' }, PH: { symbol: '₱', name: 'the Philippines', high: '2.5K+', med: '800-2.5K', low: '800', hero: '15K+' }, MX: { symbol: 'MX$', name: 'Mexico', high: '900+', med: '270-900', low: '270', hero: '5K+' }, BR: { symbol: 'R$', name: 'Brazil', high: '250+', med: '80-250', low: '80', hero: '1.5K+' }, ZA: { symbol: 'R', name: 'South Africa', high: '900+', med: '270-900', low: '270', hero: '5K+' }, NZ: { symbol: 'NZ$', name: 'New Zealand', high: '80+', med: '24-80', low: '24', hero: '480+' } }; var geo = geoConfig['US']; // default function setGeo(country) { geo = geoConfig[country] || geoConfig['US']; var loc = document.getElementById('geoLocation'); var cur = document.getElementById('geoCurrency'); if (loc) loc.textContent = 'in ' + geo.name + ' made'; if (cur) cur.textContent = geo.symbol; } function earningLabel(e) { if (e === 'HIGH') return geo.symbol + geo.high + '/mo'; if (e === 'MED') return geo.symbol + geo.med + '/mo'; return 'Under ' + geo.symbol + geo.low + '/mo'; } function earningBadge(e) { if (e === 'HIGH') return geo.symbol + geo.high + 'per month'; if (e === 'MED') return geo.symbol + geo.med + 'per month'; return '<' + geo.symbol + geo.low + 'per month'; } function earningClass(e) { if (e === 'HIGH') return 'high'; if (e === 'MED') return 'med'; return 'low'; } function tagHTML(tag) { if (!tag || tag === 'REDDIT') return ''; if (tag === 'NEW') return 'NEW'; if (tag === 'HOT') return 'HOT'; if (tag === 'BEST') return 'BEST'; return '' + tag + ''; } function typeClass(t) { return { Skill: 'type-skill', Reward: 'type-reward', Survey: 'type-survey', 'Test Apps': 'type-testing' }[t] || 'type-reward'; } function platformLabel(p) { var s = (p || '').toLowerCase(); var hasIOS = /ios|iphone|both/.test(s); var hasSamsung = /samsung|galaxy/.test(s); var hasAndroid = !hasSamsung && /android|both/.test(s); var parts = []; if (hasIOS) parts.push('iOS'); if (hasSamsung) parts.push('Samsung'); if (hasAndroid) parts.push('Android'); if (parts.length === 0) return p || 'iOS + Android'; if (parts.length === 1) return parts[0] + ' Only'; return parts.join(' + '); } function getTierOrder(t) { return { S:1, A:2, B:3, C:4 }[t] || 5; } function getEarningOrder(e) { return { HIGH:1, MED:2, LOW:3 }[e] || 4; } function getTypeOrder(t) { return { 'Test Apps':1, Skill:2, Reward:3, Survey:4 }[t] || 5; } function localizeBonus(bonus) { if (!bonus || bonus === '-' || bonus === 'Varies') return bonus; var match = bonus.match(/^\$(\d+\.?\d*)/); if (match && geo.symbol !== '$') { var usd = parseFloat(match[1]); var rates = { '£':0.8, 'CA$':1.35, 'AU$':1.55, '€':0.92, 'CHF':0.88, '₦':1500, '₹':83, '₱':56, 'MX$':17, 'R$':5, 'R':18, 'NZ$':1.65 }; var rate = rates[geo.symbol] || 1; var local = Math.round(usd * rate); return geo.symbol + local; } return bonus; } function ctaText(app) { var b = localizeBonus(app.bonus); if (app.cta) return app.cta; if (app.type === 'Skill') return 'Play & Win Cash'; if (b !== '-' && b !== 'Varies' && b.charAt(0) === '$') return 'Get ' + b + ' Bonus'; if (app.type === 'Skill') return 'Play & Win Cash'; if (app.type === 'Test Apps') return 'Get Paid to Test'; if (app.type === 'Survey') return 'Take Surveys for Cash'; if (app.type === 'Passive') return 'Earn Passively'; if (app.earning === 'HIGH') return 'Cash Out Today'; return 'Get Paid Now'; } /* ---- begin se_cta_patch ---- */ ;(function(){ if (typeof ctaText !== 'function') return; var _orig = ctaText; ctaText = function(app) { var en = _orig(app); var L = window.__seLang; if (!L || !window.CTA_I18N || !window.CTA_I18N[L]) return en; var d = window.CTA_I18N[L]; var m = en.match(/^Get (.+) Bonus$/); if (m) return (d['Get $X Bonus'] || en).replace('$X', m[1]); return d[en] || en; }; })(); /* ---- end se_cta_patch ---- */ function categoryMatch(app) { if (currentCategory === 'all') return true; if (currentCategory === 'games') return app.type === 'Skill' || app.gaming === true; if (currentCategory === 'surveys') return app.type === 'Survey'; if (currentCategory === 'passive') return (app.type === 'Reward' || app.type === 'Passive') && !app.gaming; if (currentCategory === 'testing') return app.type === 'Test Apps'; if (currentCategory === 'cash') return app.type === 'Cash Advance'; return true; } function categoryCount(cat) { return appData.filter(a => { if (cat === 'all') return true; if (cat === 'games') return a.type === 'Skill' || a.gaming === true; if (cat === 'surveys') return a.type === 'Survey'; if (cat === 'passive') return (a.type === 'Reward' || a.type === 'Passive') && !a.gaming; if (cat === 'testing') return a.type === 'Test Apps'; if (cat === 'cash') return a.type === 'Cash Advance'; return true; }).length; } // ========== QUICK FILTERS ========== function renderQuickFilters() { const filters = [ { key: 'all', label: 'All Apps' }, { key: 'games', label: 'Win Cash Playing' }, { key: 'surveys', label: 'Surveys' }, { key: 'passive', label: 'Earn Rewards' }, { key: 'testing', label: 'Test Apps' }, { key: 'cash', label: 'Cash Advance' } ]; document.getElementById('quickFilters').innerHTML = filters .filter(f => f.key === 'all' || f.key === currentCategory || categoryCount(f.key) > 0) .map(f => '' ).join(''); } // ========== FILTER & SORT ========== function getFilteredData() { let data = appData.filter(categoryMatch); if (currentPlatform === 'ios') data = data.filter(a => /ios|iphone|both/i.test(a.platform || '')); if (currentPlatform === 'android') data = data.filter(a => /android|both/i.test(a.platform || '')); if (currentPlatform === 'samsung') data = data.filter(a => /samsung|galaxy|android|both/i.test(a.platform || '')); if (searchQuery) { const q = searchQuery.toLowerCase(); data = data.filter(a => a.name.toLowerCase().includes(q) || a.type.toLowerCase().includes(q) || a.notes.toLowerCase().includes(q) ); } data.sort((a, b) => { let valA, valB; switch (sortField) { case 'name': valA = a.name.toLowerCase(); valB = b.name.toLowerCase(); break; case 'tier': valA = getTierOrder(a.tier); valB = getTierOrder(b.tier); break; case 'type': valA = getTypeOrder(a.type); valB = getTypeOrder(b.type); break; case 'platform': valA = a.platform; valB = b.platform; break; case 'earning': valA = getEarningOrder(a.earning); valB = getEarningOrder(b.earning); break; case 'bonus': valA = (a.bonus === '-' || a.bonus === 'Varies') ? 0 : parseFloat(a.bonus.replace('$','')); valB = (b.bonus === '-' || b.bonus === 'Varies') ? 0 : parseFloat(b.bonus.replace('$','')); break; default: valA = a.order; valB = b.order; } if (valA valB) return sortDir === 'asc' ? 1 : -1; return 0; }); // iOS + Samsung: move Solitaire Cash to position right after Branded if ((currentPlatform === 'ios' || currentPlatform === 'samsung') && sortField === 'order' && sortDir === 'asc') { var scIdx = data.findIndex(function(a) { return a.name === 'Solitaire Cash'; }); if (scIdx > -1) { var sc = data.splice(scIdx, 1)[0]; var brIdx = data.findIndex(function(a) { return a.name === 'Branded'; }); if (brIdx > -1) { data.splice(brIdx + 1, 0, sc); } else { data.splice(scIdx, 0, sc); } } } // Desktop demote: push QR/mobileOnly apps to bottom for desktop visitors if (currentPlatform === 'all' && sortField === 'order' && sortDir === 'asc') { var nonQR = data.filter(function(a) { return !a.qr && !a.mobileOnly; }); var qrApps = data.filter(function(a) { return a.qr || a.mobileOnly; }); data = nonQR.concat(qrApps); } return data; } // ========== RENDER SPOTLIGHT ========== function renderSpotlight(app) { const section = document.getElementById('spotlightSection'); if (!app) { section.innerHTML = ''; return; } const url = getAppUrl(app.name, 'spotlight'); section.innerHTML = '
' + '' + (app.earningText || earningBadge(app.earning)) + '' + '
#1 Pick
' + '
' + '
' + (app.thumbnail ? '' + app.name + '' : iconLetter(app.name)) + '
' + '
' + '
' + (app.displayName || app.name) + '
' + starsHTML(app.rating, 'runner-stars') + '
' + '
' + '
' + app.notes + '
' + '
' + '' + app.type + '' + '' + platformLabel(app.platform) + '' + (app.tag === 'NEW' ? 'NEW' : '') + '
' + '
' + 'Min $' + (app.cashout ' + 'PayPal: ' + app.paypal + '' + (app.bonus !== '-' && app.bonus !== 'Varies' ? '' + (localizeBonus(app.bonus).charAt(0) === '$' && app.type !== 'Skill' && localizeBonus(app.bonus).indexOf('/') === -1 ? localizeBonus(app.bonus) + ' bonus' : localizeBonus(app.bonus)) + '' : '') + '
' + (app.qr ? '
Scan to download ' + app.name + 'Scan to download
' : '') + '
42 people claimed this today
' + '' + ctaText(app) + ' →' + '
'; } // ========== RENDER RUNNERS ========== function renderRunners(apps) { const section = document.getElementById('runnerSection'); if (!apps.length) { section.innerHTML = ''; return; } section.innerHTML = '
' + apps.map((app, i) => { const url = getAppUrl(app.name, 'runner-up'); return '
' + '' + (app.earningText || earningBadge(app.earning)) + '' + '
#' + (i + 2) + ' Pick
' + '
' + '
' + (app.thumbnail ? '' + app.name + '' : iconLetter(app.name)) + '
' + '
' + '
' + (app.displayName || app.name) + '
' + starsHTML(app.rating, 'runner-stars') + '
' + '
' + '
' + app.notes + '
' + '
' + '' + app.type + '' + '' + platformLabel(app.platform) + '' + (app.tag && app.tag !== 'REDDIT' ? '' + tagHTML(app.tag) + '' : '') + (app.bonus !== '-' ? '' + (localizeBonus(app.bonus).charAt(0) === '$' && app.type !== 'Skill' && localizeBonus(app.bonus).indexOf('/') === -1 ? localizeBonus(app.bonus) + ' bonus' : localizeBonus(app.bonus)) + '' : '') + '
' + (app.qr ? '
Scan to download ' + app.name + 'Scan to download
' : '') + '' + ctaText(app) + ' →' + '
'; }).join('') + '
'; } // ========== RENDER APP GRID ========== function renderGrid(data) { const grid = document.getElementById('appGrid'); const btn = document.getElementById('showAllBtn'); if (!data.length) { grid.innerHTML = ''; btn.classList.add('hidden'); return; } const limit = showAll ? data.length : Math.min(6, data.length); grid.innerHTML = data.map((app, i) => { const url = getAppUrl(app.name); const hidden = (!showAll && i >= 6) ? ' hidden-card' : ''; return ''; }).join(''); if (data.length > 6 && !showAll) { btn.classList.remove('hidden'); btn.textContent = 'View all ' + (data.length + 3) + ' apps'; } else { btn.classList.add('hidden'); } } // ========== RENDER TABLE ========== function renderTable(data) { const tbody = document.getElementById('tableBody'); if (!data.length) { tbody.innerHTML = ''; return; } tbody.innerHTML = data.map(app => { const url = getAppUrl(app.name); const tierClass = 'tier-row-' + app.tier.toLowerCase(); return '' + '
' + '
' + (app.thumbnail ? '' + app.name + '' : iconLetter(app.name)) + '
' + '
' + '' + (app.displayName || app.name) + ' ' + tagHTML(app.tag) + '' + '' + '\u2605'.repeat(Math.round(app.rating)) + '\u2606'.repeat(5 - Math.round(app.rating)) + ' ' + app.rating + '' + '
' + '
' + '' + app.type + '' + '' + earningLabel(app.earning) + '' + '' + (app.bonus !== '-' ? '' + localizeBonus(app.bonus) + '' : '-') + '' + '' + platformLabel(app.platform) + '' + '' + ctaText(app) + '' + ''; }).join(''); } // ========== RENDER ALL ========== function render() { const data = getFilteredData(); const spotlight = data[0] || null; const runners = data.slice(1, 3); const gridData = data.slice(3); const allData = data; renderSpotlight(spotlight); renderRunners(runners); if (currentView === 'card') { renderGrid(gridData); document.getElementById('appGrid').style.display = ''; document.getElementById('tableView').classList.add('hidden'); } else { renderTable(allData); document.getElementById('appGrid').style.display = 'none'; document.getElementById('showAllBtn').classList.add('hidden'); document.getElementById('tableView').classList.remove('hidden'); // Hide spotlight/runners in table view document.getElementById('spotlightSection').style.display = 'none'; document.getElementById('runnerSection').style.display = 'none'; } if (currentView === 'card') { document.getElementById('spotlightSection').style.display = ''; document.getElementById('runnerSection').style.display = ''; } // Browse title const browseTitle = document.getElementById('browseTitle'); const browseCount = document.getElementById('browseCount'); if (currentView === 'card') { browseTitle.innerHTML = 'More Apps (' + gridData.length + ' more)'; } else { browseTitle.innerHTML = 'All Apps (' + allData.length + ')'; } // No results document.getElementById('noResults').classList.toggle('visible', data.length === 0); } // ========== EVENT LISTENERS ========== // Quick filters document.getElementById('quickFilters').addEventListener('click', function(e) { const btn = e.target.closest('.qf-btn'); if (!btn) return; currentCategory = btn.dataset.cat; showAll = false; renderQuickFilters(); render(); }); // Platform toggle document.querySelector('.platform-toggle').addEventListener('click', function(e) { const btn = e.target.closest('.toggle-btn'); if (!btn) return; this.querySelectorAll('.toggle-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); currentPlatform = btn.dataset.platform; showAll = false; render(); }); // Set active platform button on load if (currentPlatform !== 'all') { document.querySelectorAll('.platform-toggle .toggle-btn').forEach(b => { b.classList.toggle('active', b.dataset.platform === currentPlatform); }); } // View toggle document.querySelector('.view-toggle-wrap').addEventListener('click', function(e) { const btn = e.target.closest('.toggle-btn'); if (!btn) return; this.querySelectorAll('.toggle-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); currentView = btn.dataset.view; render(); }); // Search var searchInput = document.getElementById('searchInput'); var searchClear = document.getElementById('searchClear'); searchInput.addEventListener('input', function() { searchQuery = searchInput.value.trim(); searchClear.classList.toggle('visible', searchQuery.length > 0); showAll = false; render(); }); searchClear.addEventListener('click', function() { searchInput.value = ''; searchQuery = ''; searchClear.classList.remove('visible'); showAll = false; render(); }); // Mobile search toggle document.getElementById('searchToggle').addEventListener('click', function() { document.getElementById('searchWrapper').classList.toggle('mobile-open'); }); // Show all document.getElementById('showAllBtn').addEventListener('click', function() { showAll = true; render(); }); // Table sorting document.querySelectorAll('.sortable').forEach(function(th) { th.addEventListener('click', function() { var field = th.dataset.sort; if (sortField === field) { sortDir = sortDir === 'asc' ? 'desc' : 'asc'; } else { sortField = field; sortDir = 'asc'; } document.querySelectorAll('.sortable').forEach(function(h) { h.classList.remove('sort-active'); h.querySelector('.sort-arrow').innerHTML = '◆'; }); th.classList.add('sort-active'); th.querySelector('.sort-arrow').innerHTML = sortDir === 'asc' ? '▲' : '▼'; render(); }); }); // Theme toggle document.getElementById('themeBtn').addEventListener('click', function() { var html = document.documentElement; var current = html.getAttribute('data-theme'); var next = current === 'light' ? 'dark' : 'light'; html.setAttribute('data-theme', next); this.innerHTML = next === 'light' ? '☀' : '☾'; localStorage.setItem('bmg-theme', next); }); // Load saved theme (default light) var savedTheme = localStorage.getItem('bmg-theme') || 'dark'; document.documentElement.setAttribute('data-theme', savedTheme); document.getElementById('themeBtn').innerHTML = savedTheme === 'light' ? '☀' : '☾'; // ========== NEWSPAPER THEME: FORCE FULL WIDTH ========== (function() { var wrapper = document.querySelector('.bmg-wrapper'); if (!wrapper) return; var el = wrapper.parentElement; while (el && el !== document.body && el !== document.documentElement) { el.style.setProperty('max-width', '100%', 'important'); el.style.setProperty('width', '100%', 'important'); el.style.setProperty('padding-left', '0', 'important'); el.style.setProperty('padding-right', '0', 'important'); el.style.setProperty('margin-left', '0', 'important'); el.style.setProperty('margin-right', '0', 'important'); el.style.setProperty('overflow', 'visible', 'important'); el = el.parentElement; } })(); // ========== ICON BACKGROUND ========== (function() { var strip = document.getElementById('iconBgStrip'); if (!strip) return; var thumbs = appData.filter(function(a) { return a.thumbnail; }).map(function(a) { return a.thumbnail; }); var numRows = 3; var html = ''; for (var r = 0; r '; }); } html += '
' + rowImgs + '
'; } strip.innerHTML = html; })(); // ========== QR MODAL (desktop only) ========== (function() { var modal = document.getElementById('qrModal'); var modalImg = document.getElementById('qrModalImg'); var modalIcon = document.getElementById('qrModalIcon'); var modalTitle = document.getElementById('qrModalTitle'); var closeBtn = document.getElementById('qrModalClose'); if (!modal) return; // Move modal to document.body so position:fixed always works (WordPress themes can break it) document.body.appendChild(modal); // Build set of QR-enabled app names var qrApps = {}; appData.forEach(function(a) { if (a.qr) qrApps[getAppUrl(a.name)] = a; }); // Intercept CTA clicks on desktop document.addEventListener('click', function(e) { if (window.innerWidth -1 ? '&' : '?') + 'subId5=email&aff_sub5=email&sub5=email&s5=email&clickref5=email'; var hasBonus = app.bonus && typeof app.bonus === 'string' && app.bonus.charAt(0) === '$'; var subject = hasBonus ? 'Your ' + app.name + ' install link (' + app.bonus + ' bonus)' : 'Install ' + app.name + ' on your phone'; var bodyOpen = hasBonus ? 'Tap below to install ' + app.name + ' and claim your ' + app.bonus + ' bonus:' : 'Tap below to install ' + app.name + ':'; var body = bodyOpen + '\n\n' + emailUrl + '\n\nTakes 30 seconds.'; emailBtn.href = 'mailto:?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body); } (function(){ var meta = document.getElementById('qrModalMeta'); var sub = document.getElementById('qrModalSubtitle'); var bonusEl = document.getElementById('qrModalBonus'); if (meta) { var rawPlat = (app.platform || '').toLowerCase(); var pIOS = /ios|iphone|both/.test(rawPlat); var pSamsung = /samsung|galaxy/.test(rawPlat); var pAndroid = !pSamsung && /android|both/.test(rawPlat); var parts = []; if (pIOS) parts.push('iPhone'); if (pSamsung) parts.push('Samsung'); if (pAndroid) parts.push('Android'); var plat = parts.length ? parts.join(' & ') : (app.platform || 'iPhone'); var ratingHtml = app.rating ? '\u2605' + app.rating + '\u00B7' : ''; meta.innerHTML = ratingHtml + '' + plat + '\u00B7Free'; } if (sub) { var hook = (app.notes || '').split(/\. /)[0]; if (hook && !/\.$/.test(hook)) hook = hook + '.'; sub.textContent = hook || 'Install on your phone.'; } if (bonusEl) { var bv = (app.bonus || '').toString().trim(); if (bv && bv.charAt(0) === '$') { bonusEl.innerHTML = 'Welcome Bonus' + bv + ''; bonusEl.hidden = false; } else { bonusEl.hidden = true; } } var badgesEl = document.getElementById('qrModalBadges'); if (badgesEl) { var bPlat = (app.platform || '').toLowerCase(); var bIOS = /ios|iphone|both/.test(bPlat); var bSamsung = /samsung|galaxy/.test(bPlat); var bAndroid = !bSamsung && /android|both/.test(bPlat); var chips = []; if (bIOS) chips.push('App Store'); if (bSamsung) chips.push('Galaxy Store'); if (bAndroid) chips.push('Google Play'); if (!chips.length) chips.push('App Store'); badgesEl.innerHTML = chips.map(function(c){ return '✓ ' + c + ''; }).join(''); } var scanHelpEl = document.getElementById('qrModalScanHelp'); if (scanHelpEl) { var scanParts = []; if (bIOS) scanParts.push('iPhone Camera'); if (bSamsung) scanParts.push('Samsung Camera or Google Lens'); else if (bAndroid) scanParts.push('Android Google Lens or Camera'); scanHelpEl.textContent = scanParts.length ? scanParts.join(' · ') : 'Open your phone camera'; } var scanMainText = document.getElementById('qrModalScanMainText'); if (scanMainText) { if (bSamsung && !bIOS && !bAndroid) scanMainText.textContent = 'Scan with your Samsung phone'; else if (bIOS && !bSamsung && !bAndroid) scanMainText.textContent = 'Scan with your iPhone camera'; else if (bAndroid && !bIOS) scanMainText.textContent = 'Scan with your Android phone'; else if (bIOS && bSamsung) scanMainText.textContent = 'Scan with your iPhone or Samsung phone'; else scanMainText.textContent = 'Scan to install on your phone'; } var quoteEl = document.getElementById('qrModalQuote'); if (quoteEl) { var q = app.redditQuote; if (q && q.text) { var u = q.user ? '— u/' + String(q.user).replace(/^u\//, '') : ''; quoteEl.innerHTML = '“' + q.text + '”' + (u ? '' + u + '' : ''); quoteEl.hidden = false; } else { quoteEl.hidden = true; } } })(); modal.classList.add('active'); document.body.style.overflow = 'hidden'; }); function closeModal() { modal.classList.remove('active'); document.body.style.overflow = ''; } closeBtn.addEventListener('click', closeModal); modal.addEventListener('click', function(e) { if (e.target === modal) closeModal(); }); document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && modal.classList.contains('active')) closeModal(); }); })(); // ========== RENDER BONUS SECTION ========== function renderBonusSection() { var bonusApps = appData.filter(function(a) { return a.bonus !== '-' && a.bonus !== 'Varies' && !a.excludeFromBonus; }).sort(function(a, b) { var valA = parseFloat(a.bonus.replace('$', '')); var valB = parseFloat(b.bonus.replace('$', '')); return valB - valA; // highest bonus first }); // Platform-specific bonus inserts: Solitaire Cash on Samsung // Both labeled 'Win $100' and positioned right before Current function _bonusInsertBefore(targetName, sourceName, overrides) { var src = appData.find(function(a) { return a.name === sourceName; }); if (!src) return; if (bonusApps.some(function(a) { return a.name === sourceName; })) return; var clone = Object.assign({}, src, overrides || {}); var tIdx = bonusApps.findIndex(function(a) { return a.name === targetName; }); if (tIdx > -1) bonusApps.splice(tIdx, 0, clone); else bonusApps.unshift(clone); } if (currentPlatform === 'samsung') _bonusInsertBefore('Current', 'Solitaire Cash', { bonus: 'Win $100' }); var grid = document.getElementById('bonusGrid'); var section = document.getElementById('bonusSection'); if (!bonusApps.length) { section.style.display = 'none'; return; } grid.innerHTML = bonusApps.map(function(app) { var url = getAppUrl(app.name, 'bonus-card'); return '' + '' + (app.displayName || app.name) + '' + '
' + '
' + (app.displayName || app.name) + '
' + '
' + (localizeBonus(app.bonus).charAt(0) === '$' && app.type !== 'Skill' && localizeBonus(app.bonus).indexOf('/') === -1 ? localizeBonus(app.bonus) + ' bonus' : localizeBonus(app.bonus)) + '
' + (app.bonusDescription ? '
' + app.bonusDescription + '
' : '') + '
' + '
' + '
'; }).join(''); } // ========== GEO FILTER + INIT ========== (function() { function doRender() { renderQuickFilters(); renderBonusSection(); render(); } window._userCountry = ''; // ---- Dynamic rankings bootstrap (Phase 2, pulls MMG's /offer-rankings.json) ---- window._rankingsData = null; var _rankingsPromise = fetch('https://www.mymillennialguide.com/offer-rankings.json', { cache: 'no-store' }) .then(function(r) { return r.ok ? r.json() : null; }) .then(function(j) { window._rankingsData = j; return j; }) .catch(function() { return null; }); function applyRankings(apps, country) { var ranks = window._rankingsData; if (!ranks || !ranks.rankings) return; var fallbackMap = (ranks.meta && ranks.meta.fallback_regions) || {}; var order = ranks.rankings[country]; if (!order || !order.length) order = ranks.rankings[fallbackMap[country] || 'US']; if (!order || !order.length) return; var rankMap = {}, metaMap = {}; order.forEach(function(item, i) { var key = (item.app || '').toLowerCase().trim(); rankMap[key] = i + 1; metaMap[key] = { rank: i + 1, delta: item.delta, trend: item.trend, badge: item.badge, revenue: item.revenue, conversions: item.conversions, score: item.score }; }); apps.forEach(function(app) { var key = (app.name || '').toLowerCase().trim(); if (rankMap[key] !== undefined) { app.order = rankMap[key]; app.__dynamicMeta = metaMap[key]; } }); } // Filter by device platform (Samsung-aware: hide Samsung-only apps from non-Samsung Android users) var ua = navigator.userAgent || ''; var isIOS = /iPhone|iPad|iPod/i.test(ua); var isAndroid = /Android/i.test(ua); var isSamsung = isAndroid && /SM-|SamsungBrowser|Samsung/i.test(ua); if (isIOS) { appData = appData.filter(function(a) { var p = (a.platform || '').toLowerCase(); return /ios|iphone|both/.test(p); }); } else if (isSamsung) { appData = appData.filter(function(a) { var p = (a.platform || '').toLowerCase(); return /android|both|samsung|galaxy/.test(p); }); } else if (isAndroid) { // Non-Samsung Android: hide Samsung-only apps (no generic Android support) appData = appData.filter(function(a) { var p = (a.platform || '').toLowerCase(); return /android|both/.test(p); }); } else { // Desktop / unknown — hide apps that only track on mobile (e.g. MobileXpression) appData = appData.filter(function(a) { return !a.mobileOnly; }); } // Render immediately — no waiting for geo API doRender(); // Then fetch geo in background and re-filter var _allApps = appData.slice(); function applyGeoAndRender(country) { country = country.trim().toUpperCase(); window._userCountry = country; if (typeof setGeo === 'function') setGeo(country); if (country.length === 2) { appData = _allApps.filter(function(a) { if (a.excludeGeo && a.excludeGeo.indexOf(country) !== -1) return false; if (!a.geo) return true; if (a.geo.split(',').indexOf(country) === -1) return false; if (a.excludeStates && window._userState && a.excludeStates.indexOf(window._userState) !== -1) return false; return true; }); _rankingsPromise.then(function() { applyRankings(appData, country); // Device-aware swap removed 2026-05-07 — Solitaire no longer expected at JSON #1, swap was breaking order doRender(); }); } } fetch('https://freeipapi.com/api/json/') .then(function(r) { if (!r.ok) throw new Error('freeipapi failed'); return r.json(); }) .then(function(data) { window._userState = (data.regionCode || '').toUpperCase(); applyGeoAndRender(data.countryCode || ''); }) .catch(function() { fetch('https://api.country.is/') .then(function(r) { if (!r.ok) throw new Error('country.is failed'); return r.json(); }) .then(function(data) { applyGeoAndRender(data.country || ''); }) .catch(function() { _rankingsPromise.then(function() { applyRankings(appData, 'US'); doRender(); }); }); }); })(); // ========== EXIT INTENT POPUP (Testerup-eligible: US/CA/GB/CH/DE/AT) ========== (function() { if (window.innerWidth ' + '' + '$50+per month' + '
#1 Pick
' + '
' + 'Bigcash' + '
' + '
Bigcash
' + '
\u2605\u2605\u2605\u2605\u2605 4.9
' + '
' + '
' + '
Play games, complete tasks, and earn real cash. $15 signup bonus. Fast PayPal payouts.
' + '
' + 'Test Apps' + 'iOS + Android' + '$15 bonus' + '
' + '
42 people claimed this today
' + 'Get $15 Now →' + '' + '
'; document.body.appendChild(popup); document.addEventListener('mouseout', function(e) { if (shown || !isEligible()) return; if (e.clientY 0.7) { base += Math.floor(Math.random() * 3) + 1; el.textContent = base; } }); }, 8000); setTimeout(function() { document.querySelectorAll('.live-count-num').forEach(function(el) { el.textContent = base; }); }, 100); })(); // ========== WELCOME BACK ========== (function() { var KEY = 'gabcast-visited'; var DISMISS_KEY = 'gabcast-wb-dismissed'; var lastVisit = localStorage.getItem(KEY); var now = Date.now(); localStorage.setItem(KEY, now); var NEW_APP = { addedAt: 0 }; var wb = document.getElementById('welcomeBack'); var closeBtn = document.getElementById('welcomeClose'); if (closeBtn && wb) { closeBtn.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); wb.style.display = 'none'; try { localStorage.setItem(DISMISS_KEY, String(NEW_APP.addedAt)); } catch(_) {} }); } if (lastVisit && wb) { var lastVisitTime = parseInt(lastVisit); var daysSince = Math.floor((now - lastVisitTime) / 86400000); var dismissedFor = parseInt(localStorage.getItem(DISMISS_KEY) || '0'); if (daysSince >= 1 && lastVisitTime ' + '
' + '
Bigcash · #1 Pick
' + '
$15 bonus · fast PayPal payouts
' + '
' + '' + (window.innerWidth ' + ''; document.body.appendChild(bar); var closeBtn = bar.querySelector('.mobile-sticky-close'); if (closeBtn) { closeBtn.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); bar.style.transition = 'transform 0.3s ease-in, opacity 0.3s ease-in'; bar.style.transform = 'translateY(110%)'; bar.style.opacity = '0'; sessionStorage.setItem('mm_sticky_dismissed', '1'); setTimeout(function() { if (bar.parentNode) bar.parentNode.removeChild(bar); }, 350); }); } var shown = false; window.addEventListener('scroll', function() { if (shown) return; if (window.scrollY > 600) { bar.classList.add('show'); shown = true; } }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function(){ tryInit(0); }); } else { tryInit(0); } })();