Prices and timing

How this site is built, and what it doesn’t do

By Steven · Updated 2026-09-02 · 6 min read

Credit Stays is a one-person project, and I think the site is easier to trust if you know how the sausage is made. This is the plumbing, in plain terms, including the parts I’m not proud of.

Where the hotel lists come from

Each card issuer publishes the hotels in its program, more or less. Chase and Amex have public program pages; Bilt lists Home Away From Home hotels on its site; Capital One, Citi and Leading Hotels have browsable lists that take more work to read. A set of scripts captures those lists, with names, cities, addresses and coordinates where the issuer gives them, and re-checks them so that a hotel joining or leaving a program shows up here within a week or two rather than never.

That capture is fragile in a specific way: an issuer can quietly drop a hotel and nothing announces it. So the pipeline compares each new capture to the last and refuses to delete a large slice of a list in one go, on the theory that a scraper breaking looks exactly like two hundred hotels leaving a program, and the second is rarer. When a list really does shrink, I approve it by hand.

Matching is the hard part

The prices come from a hotel meta-search engine, which has its own listing for each hotel, with its own name and its own idea of where the hotel is. Joining the issuer’s “The Ritz-Carlton, Bal Harbour” to the search engine’s “Ritz Carlton Bal Harbour Miami” is easy for a person and fussy for a program, and there are ten thousand of them. The matcher uses names, coordinates and a bit of stubbornness, and it produces a confidence score for each match.

Most matches are confident and many are corroborated, because the same property appears in several programs and each capture is an independent vote for where it is. Some are not. On the Capital One list, which overlaps least with the others, more than a hundred hotels have a low-confidence match and no second capture to check it against. Those are the likeliest places for a wrong price on this site, and if a number looks wrong for a hotel, a bad match is the first thing I look for.

Pricing, on a budget

A small server runs all day, asking the search engine for a hotel’s nightly prices and storing them. There is a daily call budget, set by what the data costs, and the pipeline spends it in passes: a near pass that keeps the next few weeks fresh for every hotel, a far pass that rotates through the year ahead, a discovery pass for hotels that have never been priced, and a nightly publish that writes the result to a file the site reads. Around 9,800 of the 10,700 program listings had a price in late August 2026.

Taxes and fees are added from a table of public rates and from constants captured per hotel, which a separate guide covers. The static site is then rebuilt from the published snapshot, so what you load is a plain page with the data already in it rather than an app that queries a database on every visit. That is why it is fast and why, when the pipeline breaks, the site keeps serving yesterday’s prices without complaint, which brings me to what breaks.

What breaks

Silently, mostly. The failures I’ve had were not crashes; they were runs that reported success while doing less than they should. A budget setting that starved the far pass so the calendar stopped extending. A batch that abandoned the day’s work after one slow request. A publish that was quietly blocked at the network edge for five days in late August 2026 before I noticed, during which the site served a stale snapshot with a straight face. The status line at the top of each collection page shows when the data was published for that reason: it is the one signal that is hard to fake.

I’ve since added counters that report what each pass actually did rather than whether it finished, and a canary that loads the site the way a visitor would. The honest summary is that this is a hobby-scale pipeline with production-scale data, and it is watched by one person.

What isn’t here, and why

No photos. I don’t have rights to the hotels’ images and I am not going to scrape them. The cards are text, name and price and place, and I have come to prefer them that way.

No portal prices. Chase Travel and Amex Travel price independently of the open market and of each other, and the only way to see their numbers is to be logged in. The site gets you to the right hotel on the right dates and hands you to the portal with those dates filled in.

No affiliate links. The portals don’t pay commissions on hotel bookings, so there is no incentive on any link here, and the ranking is arithmetic. The site runs clearly labelled display ads on the browse pages. It does not run them on the standalone hotel pages, which almost nobody visits, and it does not sell placement.

No account, no tracking of you across sites, and no email list. The privacy page is short because there is not much to say.

Why bother

Because I had the cards and the question. The hotel programs are the best thing about the premium cards and the worst-documented: the portals are built to sell you a hotel you have already chosen, not to show you which of 1,400 is cheap this month. Every points blog has a listicle of the ten best FHR hotels, written once and never priced. I wanted the whole list, sorted by what it costs, refreshed every day, and nothing like that existed. Now it does, with the seams showing.

Who runs Credit Stays?
One person, as a side project. It isn’t affiliated with any card issuer, hotel, or hotel program, and none of them pay for placement.
Where do the hotel lists come from?
From each issuer’s own published program list, captured by script and re-checked regularly, with a guard against a broken capture deleting hotels that are still in the program.
Why might a price be wrong for a hotel?
Most often a low-confidence match between the issuer’s listing and the search engine’s, which can put a neighbouring hotel’s price on the wrong name. A report with the hotel and the dates is the fastest fix.
How do I know the data is current?
The status line at the top of every collection page says when the snapshot was published. If it says days ago, something upstream has stalled and the prices are that old.

About Credit Stays →