Skip to content

Instantly share code, notes, and snippets.

@elado
Last active December 4, 2025 19:03
Show Gist options
  • Select an option

  • Save elado/69fa611d84305dea4b38801880743928 to your computer and use it in GitHub Desktop.

Select an option

Save elado/69fa611d84305dea4b38801880743928 to your computer and use it in GitHub Desktop.
American Express / Amex - Add all offers to card at once (bookmarklet)

American Express - Add all offers to card at once

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:btns=[...document.querySelectorAll('button')].filter(b => /add to list/i.test(b.title) || b.dataset.testid=="merchantOfferListAddButton");c=()=>{ b = btns.shift(); if (!b) return console.log('Added all!'); b.scrollIntoView(); b.click(); setTimeout(c, Math.random() * 300) };c();

Last updated: 10/11/25

Just run the bookmark while on the offers page, and watch the magic happens!

javascript:btns=[...document.querySelectorAll('button')].filter(b => /add to list/i.test(b.title) || b.dataset.testid=="merchantOfferListAddButton");c=()=>{ b = btns.shift(); if (!b) return console.log('Added all!'); b.scrollIntoView(); b.click(); setTimeout(c, Math.random() * 300) };c();
@arthurlockman
Copy link

javascript:btns=[...document.querySelectorAll('button')].filter(b => b.title === 'Add to Card');c=()=>{ b = btns.pop(); if (!b) return console.log('added all!'); b.click(); setTimeout(c, Math.random() * 1500 + 300) };c();

This works as of Jul 21, 2025.

@samwathegreat
Copy link

javascript:btns=[...document.querySelectorAll('button')].filter(b => b.title === 'Add to Card');c=()=>{ b = btns.pop(); if (!b) return console.log('added all!'); b.click(); setTimeout(c, Math.random() * 1500 + 300) };c();

This works as of Jul 21, 2025.

THANK YOU. I noticed that my old bookmark quit working and your modified version works perfectly.

@stevewilber
Copy link

stevewilber commented Sep 4, 2025

Here's an update that fixes the script for me as of Sept 4, 2025 (the button title is now lower case):

javascript:btns=[...document.querySelectorAll('button')].filter(b => b.title === 'add to card');c=()=>{ b = btns.pop(); if (!b) return console.log('added all!'); b.click(); setTimeout(c, Math.random() * 100) };c();

@allenwan
Copy link

allenwan commented Sep 16, 2025

Here's an update that worked for me as of 16SEP2025. It changed to an icon instead of text, so we're targeting something new.

javascript:btns=[...document.querySelectorAll('button[data-testid="merchantOfferListAddButton"]')];c = () => {b = btns.pop();if (!b) return console.log('added all!');b.click();setTimeout(c, Math.random() * 1500 + 300);};c();

The behavior is also different: it no longer auto-scrolls as it clicks the button so don't be alarmed if nothing happens when you run it.

@feiyax
Copy link

feiyax commented Oct 1, 2025

As of today, the button's title is add to list card. it works for me after changing it to that:

const buttons = document.querySelectorAll('button[title="add to list card"]'); 
// Loop through each button 
buttons.forEach((button, index) => { 
  setTimeout(() => { button.click(); }, index * 3000); 
});

@panpanbebe1023
Copy link

Does the new script add offers to multiple Amex cards?

@panpanbebe1023
Copy link

When I apply that script it only applies offers to one credit card? how to apply to all my Amex cards?

@parin95
Copy link

parin95 commented Dec 2, 2025

Any solutions to add offers across all cards?

@samwathegreat
Copy link

Any solutions to add offers across all cards?

When I apply that script it only applies offers to one credit card? how to apply to all my Amex cards?

You have to think logically about how this works. This is a script that takes advantage of the data on the page and in the simplest terms, simulates button pushes.

Since Amex lists offers on a per-card basis, what your asking for is impossible.

@panpanbebe1023
Copy link

Any solutions to add offers across all cards?

When I apply that script it only applies offers to one credit card? how to apply to all my Amex cards?

You have to think logically about how this works. This is a script that takes advantage of the data on the page and in the simplest terms, simulates button pushes.

Since Amex lists offers on a per-card basis, what your asking for is impossible.

Not really, the scripts used to work, you will be able to run the JavaScript and add offers to multiple cards when you are on the Amex Global home page. looks like Amex changed something and that script stop working.

@samwathegreat
Copy link

samwathegreat commented Dec 2, 2025 via email

@samwathegreat
Copy link

samwathegreat commented Dec 4, 2025

FYI, here is the one-liner for your bookmarks. Credit to @feiyax

javascript:btns=[...document.querySelectorAll('button[title="add to list card"]')];c = () => {b = btns.pop();if (!b) return console.log('added all!');b.click();setTimeout(c, Math.random() * 1500 + 300);};c();

Working as of today, 12/4/25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment