Get Started

Learn more about Credit Cards, Travel Programs, Deals, and more.

This Cool Trick Lets You Add All Amex Offers at Once

This post may contain affiliate links - Advertiser Disclosure. As an Amazon Associate, we earn from qualifying purchases.

Add All Amex Offers

This Cool Trick Lets You Add All Amex Offers at Once

Amex Offers are a great perk for American Express cardholders. They have lost some value since limitations were placed but you can still use the points version and statement credit version of the same offer.

We see new Amex Offers almost everyday, and we often write about some of the most popular ones here on the site. With all those offers it’s not rare to sometimes have more than 100 offers available on a specific card. That makes it difficult to see what new offers come out. I usually get around that by adding every useless offer I see to a card that I never use. However, offers still accumulate if I don’t check my account for a few days.

Adding multiple Amex Offers to a card is not an easy feat. You can to manually click “Add to Card” for every offer, and it takes a few seconds for every signal offer. So if you want to add all the offers to your card is a painfully long process. I guess American Express could just add an “Add All Offers” button, but that would be way to easy.

RELATED: Duh, Why Didn’t I Think Of This Amex Offers Search Trick Sooner?

Add All Amex Offers

Update: There a new bookmarklet for Chrome in case the two strings of code below no longer work (HT: JJT in comments):

  1. Right click on Bookmarks Bar, select “Add Page” and copy/past the following URL:
    • javascript:btns=[...document.querySelectorAll('.offer-cta')].filter(b => b.textContent === 'Add to Card');c=()=>{ b = btns.pop(); if (!b) return console.log('added all!'); b.click(); setTimeout(c, Math.random() * 1500 + 300) };c();
  2. Then, go to the Amex Offers page and click on the bookmark you just created.
Two original options are as follows:

Thankfully there’s a way to automate this process with a short script that redditor  blamsonyo has created. This is how it works:

  1. Load https://global.americanexpress.com/offers/eligible (log in)
  2. Open JS Console (Press F12 on your keyboard)
  3. Paste code below into console and hit enter
  4. Wait a few minutes, until all “Add Offer” buttons are clicked.
  5. Reload the page and redo step 3 if necessary (if more offers are available)

This is the code:

// Find all the "Add to Card" buttons on the page
var offerButtons = Array.from(document.getElementsByClassName("btn btn-sm btn-fluid offer-cta btn-secondary")).filter(btn => btn.title == "Add to Card");
var index;
for (index = 0; index < offerButtons.length; ++index) {
console.log("Clicking offer button");
offerButtons[index].click();
// Wait 2seconds to be nice to AMEX servers
await new Promise(r => setTimeout(r, 2000));
}

Update: Some accounts have Amex Offers that have “Activate Offer” buttons instead of “Add to Card”. For those account you need to change up the code bit. It would be:

// Find all the "Activate Offer" buttons on the page
var offerButtons = Array.from(document.getElementsByClassName("btn btn-sm btn-fluid offer-cta btn-secondary")).filter(btn => btn.title == "Activate Offer");
var index;
for (index = 0; index < offerButtons.length; ++index) {
console.log("Clicking offer button");
offerButtons[index].click();
// Wait 2seconds to be nice to AMEX servers
await new Promise(r => setTimeout(r, 2000));
}

Conclusion

This process is quick and easy. You can run the script in seconds, and then you just wait until all the offers are added. if you have more than 100 offers, not all of them will show up in the list, so you will need to run the script a second time.

Just makes sure to first add any specific offers that you might want on specific cards. For example a Delta Amex Offer, you might want to add it to a Delta card. Once you add an offer to one card, it usually disappears from your other Amex cards.

Disclosure: Miles to Memories has partnered with CardRatings for our coverage of credit card products. Miles to Memories and CardRatings may receive a commission from card issuers.

 Chase Sapphire Preferred® Card

Chase Sapphire Preferred® Card is the old king of travel rewards cards. Right now bonus_miles_full

Learn more about this card and its features!


Opinions, reviews, analyses & recommendations are the author’s alone, and have not been reviewed, endorsed or approved by any of these entities.
DDG
DDGhttp://dannydealguru.com
Based in NYC. Points/miles enthusiast for years and actively writing about it for the last 6+ years at Danny the Deal Guru. I'm always looking out for deals. Making a few bucks is always nice, but the traveling is by far the best part of this business.

Responses are not provided or commissioned by the bank advertiser. Responses have not been reviewed, approved or otherwise endorsed by the bank advertiser. It is not the bank advertiser's responsibility to ensure all posts and/or questions are answered.

60 COMMENTS

  1. I modified the script a bit:

    let offers = document.querySelectorAll(‘button’);
    for(const button of offers) {
    if(button.innerText === “Add to Card”) {
    button.click();
    await new Promise(r => setTimeout(r, 2000));
    }
    }

  2. Using Firefox, it was partially working if I removed the last line, but now it’s not working at all. It says “undefined” and fails to click any of the offers. My buttons are the ones that say “Add to Card.”

    If I don’t remove at least “await” from the last line it gives an error that says “Uncaught SyntaxError: await is only valid in async functions, async generators and modules.”

  3. I’m no developer but I’m usually decent at hacking my way through things (in an ethical way) and I tried massaging that code and couldn’t get it working. But, I did find someone created some code you save as a bookmark in Chrome that does the job:
    https://gist.github.com/elado/69fa611d84305dea4b38801880743928
    I tested it on mine and works nicely, just have to be patient as the buttons get pushed.
    (Be wary of code on the Internetz kidz, ask your local nerd friend for help if needed.)

    • I wish I knew more computer stuff but I cannot get anything like this to work. I kinda use Chrome (usually Firefox) but I tried saving that code as a bookmark but nothing happens.

      Can you explain really simple for an old man like me to do this stuff? I find a console thing too but that baffles me as well as I have no idea where to paste anything.

      I sure would appreciate some help!!!

      • Hi Carl, I happened to be working on my computer recording something when you commented – so I made a quick how-to video on using that Amex add all offers trick I linked to above.

        The basic process is simpler than you might suspect – you just need to create a special bookmark in Google Chrome. Later when you are logged in to your Amex account and have the View All Offers page open, you’ll click the bookmark and it will go through the page and click all the “Add to Card” buttons for you.

        I go over it all in this video – hopefully having a visual helps you get it done. Good luck!

        https://www.youtube.com/watch?v=fLghkabDk38

        Oh, and one note: I just noticed in the beginning of the video I mistakenly say “Firefox” – but later I’m talking about Google Chrome. This bookmark does need to be created in Google Chrome browser – ignore that I said Firefox the first time. 😀

        • You, sir, are an ABSOLUTE HERO!!! Thanks so much for this!

          Got it figured, and IT WORKS!!!

          This is gonna save me SO much time once I get it sorted across all my cards and log-ins. (Yep, lots of separate ones, like for AUs and such.)

          Far as I am concerned, you deserve a medal!!!

          • Excellent! Glad it helped.
            I run it every week or two for all of our cards – has definitely made life easier.

    • This worked great.

      Is there anyway to get this to work in Firefox?
      Not the end of the world, but I use Firefox more often.

  4. Used to work… not now on Chrome, Firefox, Edge. Was very useful. Not worth trudging through 100 clicks to load all offers manually.

  5. In my case this code worked. Because the button was a different tag.

    // Find all the “Add to Card” buttons on the page
var offerButtons = Array.from(document.getElementsByClassName(“offer-cta axp-offers__global__fluid___15Bk5”)).filter(btn => btn.title == “Add to Card”);
var index;
for (index = 0; index setTimeout(r, 2000));
}

    • This worked because the “class name” on amex website changed from
      “btn btn-sm btn-fluid offer-cta btn-secondary”
      to: “offer-cta axp-offers__global__fluid___15Bk5”

      • What’s the full coding you used?

        i keep getting an error.

        offer details are currently unavailable. every other one is clipping.

        • Try using the info in the update section of the post – the Chrome javascript bookmark works well, I continue to use it since I found it.

          I could not get the original code work.

    • No longer works in Chrome, but I managed to get it to work in Edge (for now).

      I assume an older version of Chrome would work too

    • So Amex changed the name of the buttons. I’ve update the code for you guys with the new button name.

      var offerButtons = Array.from(document.getElementsByClassName(“offer-cta axp-offers__global__fluid___15Bk5 css-1duq00z”)).filter(btn => btn.title == “Add to Card”);
      var index;
      for (index = 0; index setTimeout(r, 500));
      }

        • // Find all the “Add to Card” buttons on the page
          var offerButtons = Array.from(document.getElementsByClassName(“offer-cta axp-offers__global__fluid___15Bk5 css-1duq00z”)).filter(btn => btn.title == “Add to Card”);
          var index;
          for (index = 0; index setTimeout(r, 2000));
          }

          Try this (based on what Rahul says) if the code in the article is not working for you. The code in the article still works for me on Chrome as of 6/18.

          • Thanks. Tried this today…

            on Chrome it tells me:

            SyntaxError: Invalid character ‘\u201c’ VM400:2

            On Safari it tells me:

            Uncaught SyntaxError: Invalid or unexpected token

          • I’m not sure what the issue is, since it still works on my comp and laptop. Maybe try the original code but when you paste, right click instead and select “paste as plain text”.

      • And, dead again. I got it to work again after I asked, but now I’m having the same problems and none of these scripts work.

  6. Is there a way to get to offers without creating a online account with American Express? Are events only posted online now?

  7. Where do you paste the information? I can’t see a place where I can paste the text. In case it’s not obvious, I’m not a programmer. I assumed this was easy since the article says it is but maybe those of us who aren’t techies shouldn’t mess with it?

    • Oh, I see what the issue might be. Some accounts now show “Activate Offer” buttons instead of “Add to Card”.

      So in the third line you would need to replace “Add to Card” with “Activate Offer”, to match whatever the text on the buttons is.

      Hopefully that helps.

      • Thanks, I’ll give it a try next time. Oops, I don’t know why I thought Ryan posted this one when you post like 50% of the content here. I’m looking at you Shawn ……

          • Update: I edited the script as suggested and it worked. So, thanks!

            I might update the post, though. I’m not super-tech savvy, but comfortable at this level. However, if P2 was trying to do this she’d just give up after one try.

            You could try to get that FM job and then ask Shawn for a counter offer 🙂

      • I did confirm it works on my Everyday card. Just not at this time on the Simply Cash Business variety. It did before, so a puzzler. Oh well, I will not expect anything other than some temporary glitch. Thanks!
        Ah, this must be what I didn’t notice in the Business card. Many thanks.

  8. The list is available whenever I log onto my my Amex account. Too many offers are items and services I find not useful. Currently, there are 3 clicks on my list.

  9. The downside of this cool trick is that it wrecks Amex Offers for everyone else. A finite number of people can enrolling for any given Amex Offer. Say you enroll for all the Amex Offers, but only ever use a few. You’ve used up entitlement that someone else might have wanted to use. Gotten in the way of a customer that the company making the offer wanted to reach.

    • The problem is that AMEX only shows you 100 available offers, so if you don’t clip a bunch that you do not want, you will stop seeing offers that you potentially DO want. Most offers do not seem to have a finite number of activations, since I still see many available to clip on one of my AU’s cards a week or two before they’re expiring.

      My issue with this is that I tend to split offers that I have no use for across multiple cards, that way I can still see what I have on the card, since AMEX also doesn’t show more than 100 offers that you have loaded to the card. So ideally I’d like to set a limit of how many offers get loaded at a time.

      Personally, I find that hitting”load to card” every few seconds while leaving the mouse in the same spot works well and doesn’t take that long to load. The screen keeps moving, so the next offer to load is in the same spot as the previous one.

  10. Doesn’t this just move the problem to your other pocket? I can see looking at a short list for good new offers but isn’t scrolling through all the added ones to remember the ones you wanted to use a pain? Or did I miss something? Making the ones you could care less about disappear forever would be great.

  11. good stuff ! would be nice to do the same to see all offers added to account. and also scan offer for specific text
    but that’s just academic, if all added you dont have to worry about missing anything

  12. This code is little broken as written, as is, the browser will think the await is part of the comment.

    // Find all the “Add to Card” buttons on the page
    var offerButtons = Array.from(document.getElementsByClassName(“btn btn-sm btn-fluid offer-cta btn-secondary”)).filter(btn => btn.title == “Add to Card”);
    var index;
    for (index = 0; index setTimeout(r, 2000));
    }

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Related

7,703FansLike
9,903FollowersFollow
16,444FollowersFollow