How I Made My Credit Cardholder Discounts Searchable

How I gather my credit card offers in one place so I don't miss out

by on

I have a few credit cards, and each of them has a rotating set of a couple dozen discounts and offers available at any point in time. I don’t keep up to date as they expire and new ones get added, and so I’d like an easy way to look through available ones whenever I’m about to make a big ticket purchase. This article describes a quick and simple system I put together to make searching for offers quick and easy, how you might do it too, and some restrictions to keep clear of.

FOMOing on Offers

Most credit cards now have a set of offers and discounts that they provide for their users, as a way of stimulating shopping demand. My mental model is that these offers are paid entirely by the merchant in consideration for the introduction to new customers. I don’t have a reference for this, but I’ve built up this impression by being downstream of Patrick McKenzie’s Bits About Money and his Twitter feed.

The offers range from a few dollars off a purchase to several hundred. As a relevant example, I could currently take 10% off ice-cream for a national brand, ~$200 off a large electronics purchase, and $250 off on travel if I book directly with a major international airline. I happen to be in the process of planning international travel right now, so knowing this is timely and relevant to my interests.

It’s very easy to use an offer because all it takes is a click to activate it on your card. You then need to ensure you use the specific card which provided the offer for the purchase. You are not opted in to all deals by default, and using the wrong card will also disqualify you from collecting the discount.

The consumer behaviour the industry seems to want to encourage is to keep us reactive to new offers. They want us to review the list of offers and have that stimulate our interest in the specific provider. On the other hand, if you had a prior desire to book with a provider anyway, you represent a cannibalization of existing demand. It is not optimal for the merchant to provide you with that offer, since they’re just missing out on revenue they would have otherwise had.

I want to efficiently check if I qualify for an offer before my big-ticket purchases. I’d like to be able to run a quick query to see if a planned purchase has a discount available for my preferred provider, or if there’s an alternative that I’d want to switch to. Because my preferred workflow runs against the grain of how this feature was designed, I needed to do a little legwork to achieve this.

Before I describe exactly how I did this, I want to provide a short disclaimer and warning. Many banks have policies against automated scraping and redistribution of data. This is why I will not be providing any data on offers in this article or elsewhere, and why I will require you to manually access and input your own credit card offers data if you wish to follow my process.

My Personal, Simple and Relatively Manual Solution

For the reasons described above, I wanted to make sure I had a very personal and simple solution. I also wanted to complete and be done with this on a weekend afternoon. In the spirit of hyper-personal computing, I’m trying to solve this problem for myself.

The volume of data involved here is tiny, and it also changes very slowly. This is why I went for a solution that uses very simple and ubiquitious components—a cloud-enabled spreadsheet, which I populate manually using an LLM to format my data.

Overall, I want to:

  • Organize the data in a Google Sheets Workbook, where each Bank/Card pair gets its own worksheet
  • Extract, categorize and format the offers with an LLM
  • Query the data from the master sheet when I need to

Organize the Data in a Spreadsheet

I’ve created a template sheet which you can look at to understand how I’ve organized the data. In case you want to duplicate my efforts, please make a private and personal copy of this sheet before editing. The workbook is originally set up with 3 sheets:

  1. Query Page: Where the results of a query are presented. You can query by typing into the Brand and Search Tags input boxes, and any matched results are shown below.

  2. AllOffers: This is an intermediate worksheet that stitches together all the offers from the remaining sheets. If you add a new entry for a Bank and Card, you should add the name of that card to the Column in A.

  3. McDuck Bank Gold Card: This is an example worksheet representing all the offers (just 1) from the fictional “Gold Card” at McDuck Bank.

Extract, Categorize and Format the Offers with an LLM

Here is the prompt that I use to categorize the data. I use this with ChatGPT 4o, but I have also tested it with ChatGPT 4 and received reasonable results since the complexity of the task is not high.

I would like to organize my credit card offers according to the following
schema. I am going to provide you with a header, and then an example.

"""
Bank and Card Name,Brand Name,Offer Details,Expiry,Search Tags
McDuck Bank QuackEx,Gearloose Industries,$150  off $2000 or more,2025-03-25,Hardware | Mechanical
"""

I am going to paste in data in various formats from the credit card offers
pages. Please arrange them into this format. Escape any commas in the data by
replacing them with semi-colons. If possible, infer the search tags from the
description or name of the brand. Do not use tools such as the Python
interpreter. Please include expiring or expired results. Do not worry about
readability, as I will be copy-pasting these into a spreadsheet. Perform all
conversions in one batch.

The first column must always be the Bank and Card name.

If you do not have enough information, please pause and ask before formatting
the output. Do not output incomplete data, placeholders or example rows. Instead
avoid responding with anything that could be mistaken for data and ask me for
the missing values.

If you don't know the expiry date of an offer, please output 15 days for expiring
soon, and 3 months for a default.

Let me know when you're ready to begin.

Then after the prompt I copy and paste in all of the offers from the credit card’s offers page, and let the LLM work its magic.

The output I get from the LLM I will copy and paste into my workbook, creating a new sheet if necessary. I then use Data > Split Text To Columns to make sure the input data is correctly entered into the columns. I now have a searchable database of the credit card offers available to me.

What now?

I just built this yesterday, and I’ve been able to verified that it is technically functional. However, I cannot say for sure if it is going to be useful just yet.

The two biggest risks I see to this being extremely useful are keeping the offers spreadsheet up to date, and remembering to use it at the point of sale. Finally, the last question is, is the magnitude of the savings from these offers going to be worth the effort?

Streamlining the manual steps involved in this process might make it even more valuable, but if you attempt to do so, please stay clear of violating the terms and restrictions of your credit card websites.

In the meanwhile, I will leave you with these pieces, and let you decide if this is something that you need in your life.

If you have a clever idea for what to do next that you’d like to share, or just want to get in touch with me about this, please comment on this article at Hacker News

Appendix

This little appendix is mostly for myself when I come back to this page.

One of the Credit Card Websites did not include the name of the providers in the text on the webpage, and the raw HTML was too large to paste into an LLM. I was able to parse the provider name out of the HTML using the following snippet:

cat website-deals.txt | grep aria-label -A 2 | cut -d"<" -f1 |
	xclip -selection clipboard
This article was filed under:
personal finance hyperpersonal computing llm tools