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):
- 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();
-
- 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:
- Load https://global.americanexpress.com/offers/eligible (log in)
- Open JS Console (Press F12 on your keyboard)
- Paste code below into console and hit enter
- Wait a few minutes, until all “Add Offer” buttons are clicked.
- 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.
Chase Sapphire Preferred® Card
Chase Sapphire Preferred® Card is the old king of travel rewards cards. Right now bonus_miles_fullLearn 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.
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));
}
}
that triggered an impressive number of errors and didn’t add any offers
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.”
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.)
Awesome. Thanks!
excellent; fixed all my problems!
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 for me too. Thank you!
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.
Used to work… not now on Chrome, Firefox, Edge. Was very useful. Not worth trudging through 100 clicks to load all offers manually.
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.
Will try again today. Seems like Amex was buggy last night.
I’m also getting the “undefined” error. Can someone fix the code? This is crazy useful.
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));
}
Can you just post the entire script? Some of us are too dumb to nest this in properly.
// 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
And to clarify, my buttons do say “Add to card”. Has worked for me in the past!
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”.
What browser are you using? I still see the button name as “”btn btn-sm btn-fluid offer-cta btn-secondary”.
It’s working today for me on Chrome.
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.
Having an issue with this today — it just says “undefined.” Any ideas?
Same here on June 20 in Chrome.
This was a great help to add all of the offers to get more to show up. Thanks!
I’ve used this for months, and not working today.
Correction, use the original code now again….it works.
Is there a way to get to offers without creating a online account with American Express? Are events only posted online now?
Not that I am aware of
There’s this page for American Express Cards that are not issued by American Express. But you only see fraction of the offers available on most Amex cards. https://www.americanexpress.com/us/network/shopping.html#All
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?
After you press F12 on your keyboard, teh screen will be slip in two, with code showing on the right side. Make sure you are in Console section on top (in red box), and copy/paste the code when I typed the question marks (in red box). https://milestomemories.com/wp-content/uploads/2022/06/amex-code.png
Hopefully that helps. This is in Chrome.
How can this trick work for other companies credit card offers like Bank of America? Appreciate any help
Hey Ryan, the script doesn’t appear to be working any more. I get an <- undefined error in the console.
Hey Chris, works for me (in Chrome at least).
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 ……
No worries! But I’m saving a screenshot of your comment for when I ask for a pay raise.
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.
Works!
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.
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.
Couldn’t get the F12 key to work on my old MacBook Pro. Tried everything: Fn +F12, ctrl + F12 etc.
One of our FB mods shared this in our group – if on Mac / Safari you wanna go to Develop -> Show JavaScript Console to access this
Mae – use cmd-option-J
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.
Amazing! Thanks!
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
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));
}
That didn’t render correctly. Ignore that code, just add an new line before the `await`
Fixed it. Thanks for pointing it out!