If you own an AMEX card, you can add a bunch of offers to the card in this link: https://global.americanexpress.com/offers/eligible
There are many offers, and they change all the time. Instead of clicking "Add to card" repeatedly, I created this bookmarklet.
In Chrome, add a new bookmark (right click on bookmarks bar -> "Add Page...") with the following URL:
javascript:(()=>{let q=s=>[...document.querySelectorAll(s)],b=q('.offer-cta');if(!b.length)b=q('button,[role="button"]').filter(x=>{let l=(x.getAttribute('aria-label')||x.title||'').toLowerCase();return l.startsWith('add ')||l.includes(' add ')});if(!b.length)b=q('button').filter(x=>x.querySelector('svg')&&!x.textContent.trim()&&!['chat','search','menu'].some(w=>(x.getAttribute('aria-label')||x.title||'').toLowerCase().includes(w)));b=[...new Set(b)];if(!b.length)return alert('0 offers found.');console.log(`Found ${b.length} offers`);let c=()=>{let o=b.shift();if(!o)return alert('Finished adding offers!');o.scrollIntoView({behavior:'smooth',block:'center'});setTimeout(()=>{o.click();setTimeout(c,Math.random()*400+400)},300)};c();})();Last updated: 10/27/26
Just run the bookmark while on the offers page, and watch the magic happens!
The following modified version worked for me. Note I increased the minimum timeout to .8 seconds and log each clicked offer.
javascript:btns=Array.from(document.querySelectorAll("button[title='Add to Card']")),(c=()=>{if(!(b=btns.pop()))return console.log("added all!");b.click(),console.log("clicked:"+b.getAttribute("aria-label")),setTimeout(c,1500*Math.random()+800)})();
Here it is not minified
btns=Array.from(document.querySelectorAll("button[title='Add to Card']"));
c=()=>{ b = btns.pop();
if (!b) return console.log("added all!");
b.click();
console.log("clicked:"+b.getAttribute("aria-label"));
setTimeout(c, Math.random() * 1500 + 800) };
c();