earnrate 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +15 -14
  2. package/data/CHANGELOG.md +74 -0
  3. package/data/VERSION +1 -1
  4. package/data/cards/amex-blue-cash-everyday.yaml +5 -4
  5. package/data/cards/amex-gold.yaml +4 -0
  6. package/data/cards/bank-of-america-atmos-rewards-ascent.yaml +5 -1
  7. package/data/cards/bank-of-america-atmos-rewards-business.yaml +5 -1
  8. package/data/cards/bank-of-america-atmos-rewards-summit.yaml +5 -1
  9. package/data/cards/chase-freedom-flex.yaml +1 -1
  10. package/data/cards/chase-ihg-one-rewards-premier.yaml +4 -0
  11. package/data/cards/chase-ihg-one-rewards.yaml +7 -0
  12. package/data/cards/chase-southwest-plus.yaml +4 -0
  13. package/data/cards/chase-southwest-premier.yaml +4 -0
  14. package/data/cards/chase-southwest-priority.yaml +4 -0
  15. package/data/cards/chase-united-club.yaml +1 -1
  16. package/data/cards/citi-aadvantage-globe.yaml +7 -7
  17. package/data/cards/citi-costco-anywhere-visa-business.yaml +9 -1
  18. package/data/cards/citi-costco-anywhere-visa.yaml +9 -1
  19. package/data/cards/td-bank-nordstrom-credit-card.yaml +4 -0
  20. package/data/cards/td-bank-nordstrom-visa.yaml +4 -0
  21. package/data/categories.yaml +12 -0
  22. package/data/currencies.yaml +2 -0
  23. package/data/memberships.yaml +33 -0
  24. package/data/merchants/overrides.yaml +33 -0
  25. package/data/merchants/seed.yaml +0 -6
  26. package/dist/cli/cheatsheet.js +3 -3
  27. package/dist/cli/explore.js +12 -11
  28. package/dist/cli/import.js +13 -12
  29. package/dist/cli/offers.js +2 -1
  30. package/dist/cli/run.js +18 -4
  31. package/dist/cli/wallet.js +42 -0
  32. package/dist/data/file-store.js +5 -2
  33. package/dist/data/integrity.js +26 -0
  34. package/dist/data/load.js +10 -2
  35. package/dist/data/store.js +8 -1
  36. package/dist/data/wallet-edit.js +83 -2
  37. package/dist/engine/cheat-sheet.js +53 -14
  38. package/dist/engine/compare.js +8 -0
  39. package/dist/engine/explore.js +18 -20
  40. package/dist/engine/memberships.js +71 -0
  41. package/dist/engine/offers.js +37 -5
  42. package/dist/engine/profiles.js +8 -0
  43. package/dist/engine/recommend.js +78 -44
  44. package/dist/engine/setup.js +22 -5
  45. package/dist/engine/simulate.js +36 -14
  46. package/dist/engine/text.js +67 -2
  47. package/dist/engine/valuation.js +1 -1
  48. package/dist/engine/wallet-change.js +42 -4
  49. package/dist/engine/wallet-summary.js +83 -37
  50. package/dist/format/card-text.js +19 -29
  51. package/dist/format/cards.js +8 -9
  52. package/dist/format/explore.js +22 -14
  53. package/dist/format/offers.js +12 -21
  54. package/dist/format/recommendation.js +16 -10
  55. package/dist/format/wallet-yaml.js +18 -3
  56. package/dist/format/wallet.js +16 -20
  57. package/dist/mcp/context.js +31 -4
  58. package/dist/mcp/inputs.js +17 -8
  59. package/dist/mcp/schemas.js +21 -0
  60. package/dist/mcp/server.js +1 -0
  61. package/dist/mcp/tools/account.js +28 -10
  62. package/dist/mcp/tools/answers.js +51 -18
  63. package/dist/mcp/tools/wallet.js +106 -11
  64. package/dist/schema/card.js +7 -0
  65. package/dist/schema/category.js +4 -0
  66. package/dist/schema/currency.js +2 -0
  67. package/dist/schema/membership.js +15 -0
  68. package/dist/schema/merchant.js +4 -0
  69. package/dist/schema/wallet.js +4 -0
  70. package/package.json +1 -1
  71. package/wallet.example.yaml +1 -0
package/README.md CHANGED
@@ -62,9 +62,10 @@ Options: `--online` or `--in-store`, `--valuation flat|points-heavy`, `--all`, `
62
62
 
63
63
  ### Your wallet
64
64
 
65
- The wallet is a YAML file (`~/.earnrate/wallet.yaml`) listing your cards by ID, which is each card's file name in [`data/cards/`](data/cards). `earnrate add`, `update`, `remove` and `memberships` write it for you and keep your comments, or you can edit it by hand. Only the cards are required:
65
+ The wallet is a YAML file (`~/.earnrate/wallet.yaml`) listing your cards by ID, which is each card's file name in [`data/cards/`](data/cards). `earnrate add`, `update`, `remove`, `memberships` and `values` write it for you and keep your comments, or you can edit it by hand. Only the cards are required:
66
66
 
67
67
  ```yaml
68
+ version: 1 # the file's format; earnrate writes it
68
69
  valuations:
69
70
  UR: 1.5 # cents per point; leave out to use earnrate's defaults
70
71
  memberships: [amazon-prime] # unlocks Prime Visa's 5%
@@ -81,7 +82,7 @@ cards:
81
82
  two-percent: [gas-ev-charging]
82
83
  ```
83
84
 
84
- Rule IDs for `activated`, the choice slots for `chosen` and the membership IDs that unlock bonuses (such as `bofa-rewards-premier` for a BofA Rewards tier) are in each card's file. Currencies and their default values are in [`data/currencies.yaml`](data/currencies.yaml). Spending caps fill up as you record purchases from an AI assistant or import a statement with `--apply`, and reset with each period.
85
+ Rule IDs for `activated` and the choice slots for `chosen` are in each card's file; membership IDs (such as `bofa-rewards-premier` for a BofA Rewards tier) are in [`data/memberships.yaml`](data/memberships.yaml), and `earnrate memberships` lists them. `earnrate values UR=1.5` saves what a program's points are worth to you; every answer uses it. Add `costco` if you have a Costco membership: Costco Anywhere needs one, and spending answers count its $65 a year unless you have it, hold the card or spend at Costco. Currencies and their default values are in [`data/currencies.yaml`](data/currencies.yaml). Spending caps fill up as you record purchases from an AI assistant or import a statement with `--apply`, and reset with each period.
85
86
 
86
87
  ### Merchants earnrate doesn't know
87
88
 
@@ -107,7 +108,7 @@ Or tell your AI assistant ("I opened my Sapphire Preferred on October 1"), or ch
107
108
  bonus: { opened: 2026-10-01, spend: 5000, by: 2026-12-31, points: 75000 }
108
109
  ```
109
110
 
110
- While the bonus is open, that card wins wherever it's accepted, and the answer says how much is left, the weekly pace to finish on time, what the bonus is worth at your point values, and what using it costs compared with your best earner. Spend counts up as you record purchases (from an AI assistant or the website) or import a statement with `--apply`; refunds count down. Once it's met or the deadline passes, the card goes back to the normal ranking. With two open bonuses, the one needing more spend per day comes first.
111
+ While the bonus is open and you're behind an even pace to the deadline, that card wins wherever it's accepted, and the answer says how much is left, the weekly pace to finish on time, what the bonus is worth at your point values, and what using it costs compared with your best earner. On pace, it's the pick only where it earns as much as your best card, and it's mentioned where it comes within a point; otherwise your best card wins. Spend counts up as you record purchases from an AI assistant or import a statement with `--apply`; refunds count down. Once it's met or the deadline passes, the card goes back to the normal ranking. With two open bonuses, one behind pace comes first, then the one needing more spend per day.
111
112
 
112
113
  `spend`, `by` and the reward (`points`, or `dollars` for cash back) default to the card's published offer once earnrate has one; set them when your offer was different.
113
114
 
@@ -121,13 +122,13 @@ earnrate simulate groceries=600 dining=300 other=1000 # best cards and pairs for
121
122
  earnrate simulate groceries=600 other=1000 --wallet # what a new card would add to yours
122
123
  ```
123
124
 
124
- `best` ranks every card earnrate knows for a merchant or a category, each set up at its best (the right category pick, activated, cap unused), with its annual fee and what earning the rate takes. Rates that need a membership like Amazon Prime are listed separately unless you pass `--member amazon-prime`. `simulate` spends your monthly amounts for a year, applying caps as they fill and reset, and ranks single cards and two-card pairs by rewards minus annual fees. Both take `--no-fee`, `--cash` or `--points`, `--issuer`, `--business` and `--valuation`. Welcome bonuses are left out of both; for those:
125
+ `best` ranks every card earnrate knows for a merchant or a category, each set up at its best (the right category pick, activated, cap unused), with its annual fee and what earning the rate takes. Rates that need a membership like Amazon Prime are listed separately unless you pass `--member amazon-prime`, and a card that needs a membership to get (Costco Anywhere) says so. `simulate` spends your monthly amounts for a year, applying caps as they fill and reset, and ranks single cards and two-card pairs by rewards minus annual fees, counting the cost of a membership a card needs (Costco's, for Costco Anywhere) unless you pass `--member costco` or spend at Costco. Both take `--no-fee`, `--cash` or `--points`, `--issuer`, `--business` and `--valuation`. Welcome bonuses are left out of both; for those:
125
126
 
126
127
  ```sh
127
128
  earnrate offers --cash
128
129
  ```
129
130
 
130
- Ranks the welcome offers on cards you don't have by first-year value: the bonus at your point values minus the first year's annual fee. `--points`, `--no-fee` and `--business` narrow it down. Each offer is the public one on the issuer's page, checked weekly like the earning rules, with the issuer's eligibility rules in its note. Offers can differ by person and by how you apply, and it covers only the cards earnrate knows. There are no affiliate or apply links.
131
+ Ranks the welcome offers on cards you don't have by first-year value: the bonus at your point values minus the first year's annual fee (and a membership the card needs, if you don't have it). An offer the issuer rules out because of a card in your wallet is marked "likely not eligible" and listed last. `--points`, `--no-fee` and `--business` narrow it down. Each offer is the public one on the issuer's page, checked weekly like the earning rules, with the issuer's eligibility rules in its note. Offers can differ by person and by how you apply, and it covers only the cards earnrate knows. There are no affiliate or apply links.
131
132
 
132
133
  ### Import a statement
133
134
 
@@ -140,8 +141,8 @@ earnrate import gold.csv:amex-gold sapphire.csv:chase-sapphire-preferred
140
141
 
141
142
  It totals what each card earned against the best card in your wallet for each purchase, lists the merchants where another card would have earned the most, and flags merchants your issuer codes differently than earnrate assumes. Name several statements, each with its card, to get one report across them. It reads Amex and Chase activity CSVs. Download the CSV rather than a PDF statement: Chase's PDFs print the full card number in the payment coupon, and earnrate never handles card numbers.
142
143
 
143
- - It's a dry run unless you pass `--apply`, which records cap usage for the current period in your wallet. Refunds lower it.
144
- - Only the date, description, amount, category and (for Chase) transaction type columns are read. The statements themselves are never stored: `--apply` writes cap totals plus a hash of each recorded purchase to `~/.earnrate/imported.json`, so importing the same file twice never counts twice.
144
+ - It's a dry run unless you pass `--apply`, which records cap usage for the current period and spending toward an open welcome bonus in your wallet. Refunds lower both.
145
+ - Only the date, description, amount, category and (for Chase) transaction type columns are read. The statements themselves are never stored: `--apply` writes cap and bonus totals plus a hash of each recorded purchase to `~/.earnrate/imported.json`, so importing the same file twice never counts twice.
145
146
  - For a merchant earnrate doesn't know, it uses the statement's category and marks the row, since another issuer may code it differently.
146
147
  - `--valuation points-heavy` values points at transfer rates instead of your wallet's values, which can change which card wins.
147
148
 
@@ -175,16 +176,16 @@ claude mcp add --transport http earnrate https://mcp.earnrate.dev
175
176
 
176
177
  Or install it as a Claude Code plugin, which connects Claude Code and Cowork to the same server: `/plugin marketplace add cwasley/earnrate`, then `/plugin install earnrate@earnrate`.
177
178
 
178
- **Or run it on your computer:** `earnrate mcp` runs earnrate as a local MCP server over stdio, with 13 tools (the connector has the same ones, plus `export_wallet`, `import_wallet` and `delete_wallet` for its saved wallets):
179
+ **Or run it on your computer:** `earnrate mcp` runs earnrate as a local MCP server over stdio, with 14 tools (the connector has the same ones, plus `export_wallet`, `import_wallet`, `delete_wallet` and `switch_wallet` for its saved wallets):
179
180
 
180
181
  - `best_card_for_purchase`: which card to use, with reasons
181
182
  - `best_cards_for` and `simulate_spending`: compare every card earnrate knows, for one purchase or a year of spending, with no wallet needed
182
183
  - `resolve_merchant`: how a merchant was identified
183
- - `list_wallet`: your cards, caps left this period, chosen categories and welcome-bonus progress
184
+ - `list_wallet`: your cards, caps left this period, chosen categories, welcome-bonus progress and the point values you've set
184
185
  - `cheat_sheet`: the card to use for each everyday kind of purchase this quarter
185
186
  - `compare_welcome_offers`: the best public sign-up offers on cards you don't have
186
187
  - `record_purchase`: books a purchase against its cap and any open welcome bonus in your wallet file, keeping your comments
187
- - `search_cards`, `add_card`, `update_card`, `remove_card` and `set_memberships`: set up the wallet in conversation
188
+ - `search_cards`, `add_card`, `update_card`, `remove_card`, `set_memberships` and `set_point_values`: set up the wallet in conversation, including what your points are worth
188
189
 
189
190
  Saving cards is optional: name them in the conversation for one answer, or ask the assistant to save them, and it finds them, adds them, and asks about anything a card needs, like this quarter's Cash+ picks.
190
191
 
@@ -224,7 +225,7 @@ merchant text
224
225
  - **Merchants resolve to a category plus the assumption behind it.** "Whole Foods codes as a supermarket (MCC 5411)" is stated in the answer, and venues that can code more than one way (a restaurant inside a stadium or hotel) come back at medium confidence with the alternative spelled out. Unknown merchants fall back to base rates, or to an opt-in, cached and labeled Claude guess.
225
226
  - **The engine is pure and deterministic.** Given a purchase, a date and a set of cards (yours, or every card), it checks every rule against network acceptance, the date window, caps already used (split when a purchase straddles one), quarterly picks and activations, then values points at your cents-per-point, including pooling (Freedom Unlimited points are worth Sapphire points when you hold both). Ties, the valuation at which the runner-up would win, stale data, and a rotating card whose new quarter isn't in the data yet all show up in the answer.
226
227
  - **Wallet edits keep your file intact.** Adding or changing a card, or recording a purchase, splices in only the lines that changed and checks the result before saving, so comments and formatting in your YAML survive.
227
- - **Drift detection.** A weekly GitHub Action opens each issuer page in a headless browser, checks every quote is still there, and opens an issue when terms move. It stores only hashes of issuer text.
228
+ - **Drift detection.** A weekly GitHub Action opens each issuer page in a headless browser, checks every quote is still there, and opens an issue when terms move. It stores only hashes of issuer text. A daily one checks earnrate.dev and the hosted server end to end (sign in, ask, save a card, delete the wallet) and opens an issue if anything fails.
228
229
  - **Tested end to end.** Golden cases written from issuer terms, CLI snapshot tests, an MCP round trip over real stdio, an install test that packs and installs the npm package, and a check that no committed file contains a card number. CI runs all of it on every push.
229
230
 
230
231
  The code is TypeScript run directly by Node 24 (`src/`), with the engine in `src/engine/`, merchant resolution in `src/merchants/`, and the CLI and MCP server as thin layers over them. `site/` is earnrate.dev, which runs the same engine in the browser, and `remote/` is the hosted server at mcp.earnrate.dev.
@@ -242,14 +243,14 @@ Rotating categories (Freedom Flex) are added each quarter once the issuer posts
242
243
 
243
244
  ## Privacy Policy
244
245
 
245
- earnrate needs no account. The local version has no telemetry; the hosted server counts requests by tool name only. The full policy is at [earnrate.dev/privacy](https://earnrate.dev/privacy); in short:
246
+ earnrate needs no account. The local version has no telemetry; the hosted server counts requests by method and tool name only. The full policy is at [earnrate.dev/privacy](https://earnrate.dev/privacy); in short:
246
247
 
247
- - **The Claude connector:** earnrate's server at mcp.earnrate.dev receives each question Claude asks it (a store or kind of purchase, and any amount, spending or cards you gave) and answers without keeping it; request logging is off. It counts requests by tool name only. A saved wallet is optional and anonymous (a recovery code, no email), holds card IDs and the details you gave, never card numbers, and is encrypted with its own key that only your recovery code or your connected apps can unlock. Delete it any time; it's deleted automatically after 13 months unused, or a week if it's never used.
248
+ - **The Claude connector:** earnrate's server at mcp.earnrate.dev receives each question Claude asks it (a store or kind of purchase, and any amount, spending or cards you gave) and answers without keeping it; request logging is off. It counts requests by method and tool name only. Connecting it starts an anonymous wallet (a recovery code, no email). It holds cards only if you save some: card IDs and the details you gave, never card numbers, and is encrypted with its own key that only your recovery code or your connected apps can unlock. Delete it any time; it's deleted automatically after 13 months unused, or a week if it's never used.
248
249
  - **What it stores locally:** your wallet, a YAML file on your computer (`~/.earnrate/wallet.yaml` unless you set `EARNRATE_WALLET`). It lists cards by product ID, like `amex-gold`, plus your category picks, activations and how much you've spent toward caps. earnrate never asks for or stores card numbers, expiry dates, security codes or bank logins.
249
250
  - **What the local version sends:** nothing, by default. The optional merchant lookup (off unless you turn it on with your own Anthropic API key) sends only the name of a store earnrate doesn't recognize to Anthropic's API, and saves the answer in `~/.earnrate/merchant-cache.json`.
250
251
  - **AI assistants:** when you use earnrate through Claude or another assistant, that assistant's provider sees the conversation, including earnrate's answers, under its own privacy policy.
251
252
  - **earnrate.dev:** everything you enter on the site stays in your browser. The site counts visits with Cloudflare Web Analytics, without cookies.
252
- - **Retention:** locally, your data lives only in files you control, for as long as you keep them. Delete the wallet file, or clear the site's data in your browser, to remove it. A saved wallet on mcp.earnrate.dev lasts until you delete it or leave it unused for 13 months.
253
+ - **Retention:** locally, your data lives only in files you control, for as long as you keep them. Delete the wallet file, or clear the site's data in your browser, to remove it. A saved wallet on mcp.earnrate.dev lasts until you delete it or leave it unused for 13 months (a week, if it's never used); the record that an app is connected goes after 90 days unused.
253
254
  - **Terms:** [earnrate.dev/terms](https://earnrate.dev/terms).
254
255
  - **Contact:** [hello@earnrate.dev](mailto:hello@earnrate.dev).
255
256
 
package/data/CHANGELOG.md CHANGED
@@ -2,6 +2,80 @@
2
2
 
3
3
  Every change to card rules, merchants, categories or currencies under `data/`. Bump `data/VERSION` (`YYYY.MM.DD`, plus `.N` for a second release on the same day) and add a section here in the same commit. Each row cites the issuer page the new value came from.
4
4
 
5
+ ## 2026.11.01.7
6
+
7
+ Currencies can name how a redemption reads (`redemption_names`), so a wallet valuing SoFi points by redeeming into a SoFi account says so. No rates changed.
8
+
9
+ | Currency | Field | Old → new | Source |
10
+ | ------------ | ---------------- | ----------------------------------- | ------ |
11
+ | sofi-rewards | redemption_names | sofi-account: "into a SoFi account" | n/a |
12
+
13
+ ## 2026.11.01.6
14
+
15
+ Freedom Flex's dining note says 5x rather than 5%, since its points can pool into Ultimate Rewards worth more than 1¢. No rates changed.
16
+
17
+ | Card | Field | Old → new | Source |
18
+ | ------------------ | ------------------- | ---------------------- | ------------------------------------------------------------------------------ |
19
+ | chase-freedom-flex | q4-2026-dining.note | "5x (5% as cash back)" | [card page](https://creditcards.chase.com/cash-back-credit-cards/freedom/flex) |
20
+
21
+ ## 2026.11.01.5
22
+
23
+ Offers the issuer rules out for holders of another card, and Bank of America's terms for the Atmos account bonus. No rates changed.
24
+
25
+ | Card | Field | Old → new | Source |
26
+ | -------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
27
+ | td-bank-nordstrom-credit-card, td-bank-nordstrom-visa | welcome_offer.not_with | each other | [offer terms](https://www.nordstrom.com/becomecardmember) |
28
+ | chase-ihg-one-rewards, chase-ihg-one-rewards-premier | welcome_offer.not_with | the other personal IHG cards | [One Rewards](https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/one-rewards), [Premier](https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier) |
29
+ | amex-gold | welcome_offer.not_with | amex-platinum | [offer terms](https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/gold-card/25330-10-0#offer-terms) |
30
+ | bank-of-america-atmos-rewards-ascent, -summit, -business | evidence | the qualifying account, from each card's terms | [Ascent](https://www.bankofamerica.com/credit-cards/terms-and-conditions/?campaignid=4081060&productoffercode=RS&locale=en_US), [Summit](https://www.bankofamerica.com/credit-cards/terms-and-conditions/?campaignid=4081112&productoffercode=S2&locale=en_US), [Business](https://www.bankofamerica.com/smallbusiness/credit-cards/terms-and-conditions/?campaignid=4080500&productoffercode=CX&locale=en_US) |
31
+ | chase-united-club | welcome_offer.note | says the business card isn't clearly covered | [card page](https://creditcards.chase.com/travel-credit-cards/united/united-club) |
32
+ | chase-ihg-one-rewards | todo | the $15,000 spend milestone isn't modeled | [card page](https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/one-rewards) |
33
+ | categories.yaml, merchants/overrides.yaml | preposition, slug, kind | categories bought as a service read "on"; travel sites and bookings through them are marked | n/a |
34
+
35
+ ## 2026.11.01.4
36
+
37
+ Memberships move to `data/memberships.yaml`: each one's name, the site's checkbox label (`ask`) for the common ones, the Costco membership's fee and the stores that imply it, and the BofA Preferred Rewards tiers as one group. Cards name the membership they need by id (`requires_membership: costco`). No rates changed.
38
+
39
+ | File | Field | Old → new | Source |
40
+ | ------------------------------------ | ------------------- | ---------------------------------------- | ------ |
41
+ | memberships.yaml | (new) | names, Costco fee and stores, BofA tiers | n/a |
42
+ | citi-costco-anywhere-visa, -business | requires_membership | inline block → `costco` | n/a |
43
+
44
+ ## 2026.11.01.3
45
+
46
+ Welcome offers can name other cards whose holders the issuer rules out (`welcome_offer.not_with`), so offer comparisons mark them and list them last for a wallet holding one. No rates changed.
47
+
48
+ | Card | Field | Old → new | Source |
49
+ | ----------------------------------------------------------------------- | ---------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
50
+ | amex-blue-cash-everyday | welcome_offer.not_with | amex-blue-cash-preferred | [offer terms](https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/blue-cash-everyday-credit-card/25330-10-0) |
51
+ | chase-southwest-plus, chase-southwest-priority, chase-southwest-premier | welcome_offer.not_with | the other two personal Southwest cards | [Plus](https://creditcards.chase.com/travel-credit-cards/southwest/plus), [Priority](https://creditcards.chase.com/travel-credit-cards/southwest/priority), [Premier](https://creditcards.chase.com/travel-credit-cards/southwest/premier) |
52
+ | amex-blue-cash-everyday | welcome_offer evidence | card page headline now "As High As $200"; same offer | [card page](https://www.americanexpress.com/us/credit-cards/card/blue-cash-everyday/) |
53
+
54
+ ## 2026.11.01.2
55
+
56
+ Chipotle may post as fast food (MCC 5814) instead of a restaurant, so answers there say which card wins either way. No rates changed.
57
+
58
+ | Merchant | Field | Old → new | Source |
59
+ | -------- | --------- | --------------------- | ------ |
60
+ | chipotle | ambiguity | may code as fast food | n/a |
61
+
62
+ ## 2026.11.01.1
63
+
64
+ Freedom Flex's Q4 dining note quotes Chase's "5% total" and says where the 7% figure comes from. No rates changed.
65
+
66
+ | Card | Field | Old → new | Source |
67
+ | ------------------ | ------------------- | -------------------- | ------------------------------------------------------------------------------ |
68
+ | chase-freedom-flex | q4-2026-dining.note | quotes Chase's terms | [card page](https://creditcards.chase.com/cash-back-credit-cards/freedom/flex) |
69
+
70
+ ## 2026.11.01
71
+
72
+ Cards can name a paid membership they need (`requires_membership`). Costco Anywhere needs a Costco membership, $65 a year for Gold Star; spending answers count it unless the person has one or shops at Costco. The AAdvantage Globe card page reworded its earning lines; no rates changed.
73
+
74
+ | Card | Field | Old → new | Source |
75
+ | ------------------------------------------------------------- | ------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
76
+ | citi-costco-anywhere-visa, citi-costco-anywhere-visa-business | requires_membership | Costco membership, $65 a year | [Citi card page](https://www.citi.com/credit-cards/citi-costco-anywhere-visa-credit-card), [Costco membership page](https://www.costco.com/join-costco.html) |
77
+ | citi-aadvantage-globe | evidence | quotes follow Citi's new wording (same rates) | [card page](https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard) |
78
+
5
79
  ## 2026.10.30.3
6
80
 
7
81
  More everyday words find categories, for questions asked without a store name ("coffee shop", "dinner", "train"). Each maps to the category those purchases already fall under. No rates changed.
package/data/VERSION CHANGED
@@ -1 +1 @@
1
- 2026.10.30.3
1
+ 2026.11.01.7
@@ -15,7 +15,8 @@ welcome_offer:
15
15
  spend: 2000
16
16
  months: 6
17
17
  varies: true
18
- note: 'Paid as Reward Dollars, redeemable for a statement credit or at Amazon.com checkout. The card page says "Earn $200"; the offer terms say "as high as $200", with the exact amount shown before you accept. Not available if you have or have had this Card, the Cash Magnet Card, the Blue Cash Preferred Card (including the Morgan Stanley version) or previous versions of these Cards.'
18
+ not_with: [amex-blue-cash-preferred]
19
+ note: 'Paid as Reward Dollars, redeemable for a statement credit or at Amazon.com checkout. The card page and offer terms say "as high as $200", with the exact amount shown before you accept; the card page has also shown "Earn $200". Not available if you have or have had this Card, the Cash Magnet Card, the Blue Cash Preferred Card (including the Morgan Stanley version) or previous versions of these Cards.'
19
20
  rules:
20
21
  - id: us-supermarkets
21
22
  match: { categories: [grocery.supermarket] }
@@ -76,14 +77,14 @@ evidence:
76
77
  - rule: annual_fee
77
78
  url: https://www.americanexpress.com/us/credit-cards/card/blue-cash-everyday/
78
79
  quote: 'No Annual Fee'
79
- - rule: welcome_offer
80
- url: https://www.americanexpress.com/us/credit-cards/card/blue-cash-everyday/
81
- quote: 'Earn $200 Cash Back'
82
80
  - rule: welcome_offer
83
81
  url: https://www.americanexpress.com/us/credit-cards/card/blue-cash-everyday/
84
82
  quote: 'after you spend $2,000 in purchases on your new Card in the first 6 months of Card Membership'
85
83
  - rule: welcome_offer
86
84
  url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/blue-cash-everyday-credit-card/25330-10-0
87
85
  quote: 'As High as $200 Cash Back Welcome Offer'
86
+ - rule: not_with
87
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/blue-cash-everyday-credit-card/25330-10-0
88
+ quote: 'if you have or have had this Card, the Cash Magnet® Card, the Blue Cash Preferred® Card'
88
89
  todo:
89
90
  - 'Amazon is filed as online retail, so it earns 3% here; superstore sites (walmart.com, target.com) and online drugstores may too, but the terms define the category by merchant code and type of goods, so they are not modeled.'
@@ -15,6 +15,7 @@ welcome_offer:
15
15
  spend: 8000
16
16
  months: 6
17
17
  varies: true
18
+ not_with: [amex-platinum]
18
19
  note: 'The public offer is "as high as" 100,000 points; Amex shows the exact amount (which may be lower, or no offer) after you apply and before you accept. Not available if you have or have had this Card, the Premier Rewards Gold Card, the Platinum Card (including the Schwab and Morgan Stanley versions) or previous versions of these Cards; Amex may also decline based on your card history.'
19
20
  rules:
20
21
  - id: restaurants
@@ -93,3 +94,6 @@ evidence:
93
94
  - rule: welcome_offer
94
95
  url: https://www.americanexpress.com/us/credit-cards/card/gold-card/
95
96
  quote: 'after you spend $8,000 in purchases on your new Card within the first 6 months'
97
+ - rule: not_with
98
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/gold-card/25330-10-0#offer-terms
99
+ quote: 'if you have or have had this Card, the Premier Rewards Gold Card, the Platinum Card'
@@ -7,6 +7,7 @@ last_verified: 2026-10-31
7
7
  verified_by: claude
8
8
  source_urls:
9
9
  - https://www.bankofamerica.com/credit-cards/products/alaska-airlines-credit-card/
10
+ - https://www.bankofamerica.com/credit-cards/terms-and-conditions/?campaignid=4081060&productoffercode=RS&locale=en_US
10
11
  base_rate: 1
11
12
  annual_fee: 95
12
13
  welcome_offer:
@@ -66,6 +67,9 @@ evidence:
66
67
  - rule: welcome_offer
67
68
  url: https://www.bankofamerica.com/credit-cards/products/alaska-airlines-credit-card/
68
69
  quote: 'spend $2,500 or more on purchases within the first 90 days of opening your account'
70
+ - rule: alaska-and-hawaiian-with-boa-account
71
+ url: https://www.bankofamerica.com/credit-cards/terms-and-conditions/?campaignid=4081060&productoffercode=RS&locale=en_US
72
+ quote: 'An active Qualifying Account is an open consumer (non-business) checking or savings account with Bank of America N.A.'
69
73
  todo:
70
- - 'The 10% rewards bonus rules use a proposed membership id, bank-of-america-account. Bank of America does not say on this page which accounts are "eligible".'
71
74
  - 20% back on Alaska and Hawaiian inflight purchases is a rebate, not points, and isn't modeled.
75
+ - "BofA's rewards page lists Atmos Rewards cards as not eligible for the BofA Rewards tier bonus (in a popup the source check can't read), so the 10% account bonus stands alone."
@@ -7,6 +7,7 @@ last_verified: 2026-10-26
7
7
  verified_by: collin
8
8
  source_urls:
9
9
  - https://www.bankofamerica.com/smallbusiness/credit-cards/products/alaska-airlines-business-credit-card/
10
+ - https://www.bankofamerica.com/smallbusiness/credit-cards/terms-and-conditions/?campaignid=4080500&productoffercode=CX&locale=en_US
10
11
  base_rate: 1
11
12
  business: true
12
13
  annual_fee: 70
@@ -67,6 +68,9 @@ evidence:
67
68
  - rule: welcome_offer
68
69
  url: https://www.bankofamerica.com/smallbusiness/credit-cards/products/alaska-airlines-business-credit-card/
69
70
  quote: 'after you make $4,000 or more in purchases within the first 90 days of opening your account'
71
+ - rule: alaska-and-hawaiian-with-boa-account
72
+ url: https://www.bankofamerica.com/smallbusiness/credit-cards/terms-and-conditions/?campaignid=4080500&productoffercode=CX&locale=en_US
73
+ quote: 'open small business (non-consumer) checking or savings account with Bank of America, N.A.'
70
74
  todo:
71
- - 'The 10% rewards bonus rules use a proposed membership id, bank-of-america-small-business-account. Bank of America does not say on this page which accounts are "eligible".'
72
75
  - 'annual_fee is the $70 per-company fee. Each card also costs $25 a year, which the schema has no field for.'
76
+ - "BofA's rewards page lists Atmos Rewards cards as not eligible for the BofA Rewards tier bonus (in a popup the source check can't read), so the 10% account bonus stands alone."
@@ -7,6 +7,7 @@ last_verified: 2026-10-31
7
7
  verified_by: claude
8
8
  source_urls:
9
9
  - https://www.bankofamerica.com/credit-cards/products/alaska-airlines-infinite-credit-card/
10
+ - https://www.bankofamerica.com/credit-cards/terms-and-conditions/?campaignid=4081112&productoffercode=S2&locale=en_US
10
11
  base_rate: 1
11
12
  annual_fee: 395
12
13
  welcome_offer:
@@ -65,6 +66,9 @@ evidence:
65
66
  - rule: welcome_offer
66
67
  url: https://www.bankofamerica.com/credit-cards/products/alaska-airlines-infinite-credit-card/
67
68
  quote: '$4,000 or more on purchases within the first 90 days of opening your account'
69
+ - rule: alaska-and-hawaiian-with-boa-account
70
+ url: https://www.bankofamerica.com/credit-cards/terms-and-conditions/?campaignid=4081112&productoffercode=S2&locale=en_US
71
+ quote: 'open consumer (non-business) checking, savings or CD account with Bank of America N.A. or an investment account with Merrill'
68
72
  todo:
69
73
  - '3x on "foreign transaction" purchases (anything charged in a foreign currency or processed abroad) is not modeled: rules have no foreign-only geography. It would make this card the pick for most purchases abroad.'
70
- - 'The 10% rewards bonus rules use a proposed membership id, bank-of-america-account. Bank of America does not say on this page which accounts are "eligible".'
74
+ - "BofA's rewards page lists Atmos Rewards cards as not eligible for the BofA Rewards tier bonus (in a popup the source check can't read), so the 10% account bonus stands alone."
@@ -66,7 +66,7 @@ rules:
66
66
  requires: { activation: true }
67
67
  valid_from: 2026-10-01
68
68
  valid_to: 2026-12-31
69
- note: Chase says activated categories earn 5% total (4% on top of the 1% base) and doesn't say whether that stacks with the 3% dining rate, so earnrate shows 5%, not 7%, until the $1,500 quarterly cap.
69
+ note: Chase's terms say activated categories earn "5% Cash Back rewards total" (4% on top of the 1% base), so earnrate counts 5x (5% as cash back) until the $1,500 quarterly cap. Some blogs report 7% for dining (the 3% dining rate plus the 4% bonus); Chase's own terms don't say that.
70
70
  - id: q4-2026-american-red-cross
71
71
  match: { merchants: [american-red-cross] }
72
72
  rate: 5
@@ -14,6 +14,7 @@ welcome_offer:
14
14
  points: 180000
15
15
  spend: 3000
16
16
  months: 3
17
+ not_with: [chase-ihg-one-rewards, chase-ihg-one-rewards-premier-select]
17
18
  note: 'Labeled a launch offer; no end date given. Plus 10,000 points after adding an authorized user in the first 3 months. No free night in the welcome offer; the yearly Anniversary Free Night is a separate perk. Chase: "available to you if you do not have any personal IHG One Rewards Credit Cards and have not received a new Cardmember bonus within the last 24 months. This does not apply to Business Card Credit Card products."'
18
19
  rules:
19
20
  - id: ihg-hotels
@@ -64,5 +65,8 @@ evidence:
64
65
  - rule: welcome_offer
65
66
  url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier
66
67
  quote: 'Earn 180,000 Bonus Points after you spend $3,000 on purchases in the first 3 months from account opening'
68
+ - rule: not_with
69
+ url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier
70
+ quote: 'not available to either (i) current cardmembers of any personal IHG One Rewards Credit Card'
67
71
  todo:
68
72
  - The $100 airline statement credit (after $250 on flights bought directly each calendar year, through 12/31/27) isn't modeled.
@@ -14,6 +14,8 @@ welcome_offer:
14
14
  points: 125000
15
15
  spend: 2000
16
16
  months: 3
17
+ not_with:
18
+ [chase-ihg-one-rewards-premier, chase-ihg-one-rewards-premier-select]
17
19
  note: 'Labeled a launch offer; no end date given. Plus 10,000 points after adding an authorized user in the first 3 months. Chase: "available to you if you do not have any personal IHG One Rewards Credit Cards and have not received a new Cardmember bonus within the last 24 months. This does not apply to Business Card Credit Card products."'
18
20
  rules:
19
21
  - id: ihg-hotels
@@ -60,3 +62,8 @@ evidence:
60
62
  - rule: welcome_offer
61
63
  url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/one-rewards
62
64
  quote: 'Earn 125,000 Bonus Points after you spend $2,000 on purchases in the first 3 months from account opening'
65
+ - rule: not_with
66
+ url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/one-rewards
67
+ quote: 'available to you if you do not have any personal IHG One Rewards Credit Cards'
68
+ todo:
69
+ - 'Not modeled: 10,000 bonus points after $15,000 in purchases each calendar year (a spend milestone, not a rate).'
@@ -14,6 +14,7 @@ welcome_offer:
14
14
  points: 80000
15
15
  spend: 1000
16
16
  months: 3
17
+ not_with: [chase-southwest-priority, chase-southwest-premier]
17
18
  note: 'Chase labels it a limited-time offer and states no end date. Not available to current cardmembers of any Southwest Rapid Rewards Credit Card, or previous cardmembers of any Southwest Rapid Rewards Credit Card who received a new Cardmember bonus within the last 24 months (this does not apply to business cards).'
18
19
  caps:
19
20
  - id: gas-and-grocery
@@ -70,3 +71,6 @@ evidence:
70
71
  - rule: lyft
71
72
  url: https://creditcards.chase.com/travel-credit-cards/southwest/plus
72
73
  quote: 'earn 2X Rapid Rewards points on qualifying Lyft products and services purchased through the Lyft mobile application through 12/31/2027'
74
+ - rule: not_with
75
+ url: https://creditcards.chase.com/travel-credit-cards/southwest/plus
76
+ quote: 'not available to either (i) current Cardmembers of any Southwest Rapid Rewards® Credit Card'
@@ -14,6 +14,7 @@ welcome_offer:
14
14
  points: 85000
15
15
  spend: 2000
16
16
  months: 3
17
+ not_with: [chase-southwest-plus, chase-southwest-priority]
17
18
  note: 'Chase labels it a limited-time offer and states no end date. Not available to current cardmembers of any Southwest Rapid Rewards Credit Card, or previous cardmembers of any Southwest Rapid Rewards Credit Card who received a new Cardmember bonus within the last 24 months (this does not apply to business cards).'
18
19
  caps:
19
20
  - id: grocery-and-dining
@@ -70,3 +71,6 @@ evidence:
70
71
  - rule: lyft
71
72
  url: https://creditcards.chase.com/travel-credit-cards/southwest/premier
72
73
  quote: 'earn 3X Rapid Rewards points on qualifying Lyft products and services purchased through the Lyft mobile application through 12/31/2027'
74
+ - rule: not_with
75
+ url: https://creditcards.chase.com/travel-credit-cards/southwest/premier
76
+ quote: 'not available to either (i) current Cardmembers of any Southwest Rapid Rewards® Credit Card'
@@ -13,6 +13,7 @@ welcome_offer:
13
13
  points: 90000
14
14
  spend: 3000
15
15
  months: 3
16
+ not_with: [chase-southwest-plus, chase-southwest-premier]
16
17
  note: 'Chase labels it a limited-time offer and states no end date. Not available to current cardmembers of any Southwest Rapid Rewards Credit Card, or previous cardmembers of any Southwest Rapid Rewards Credit Card who received a new Cardmember bonus within the last 24 months (this does not apply to business cards).'
17
18
  rules:
18
19
  - id: southwest
@@ -56,3 +57,6 @@ evidence:
56
57
  - rule: lyft
57
58
  url: https://creditcards.chase.com/travel-credit-cards/southwest/priority
58
59
  quote: 'earn 5X Rapid Rewards points on qualifying Lyft products and services purchased through the Lyft mobile application through 12/31/2027'
60
+ - rule: not_with
61
+ url: https://creditcards.chase.com/travel-credit-cards/southwest/priority
62
+ quote: 'not available to either (i) current Cardmembers of any Southwest Rapid Rewards® Credit Card'
@@ -13,7 +13,7 @@ welcome_offer:
13
13
  points: 90000
14
14
  spend: 5000
15
15
  months: 3
16
- note: 'Up to 100,000 in total: plus 10,000 bonus miles after adding an authorized user in the first 3 months. Not available to current cardmembers of any United Club credit card, or previous cardmembers of any United Club credit card who received a new Cardmember bonus for this card within the last 24 months.'
16
+ note: "Up to 100,000 in total: plus 10,000 bonus miles after adding an authorized user in the first 3 months. Not available to current cardmembers of any United Club credit card, or previous cardmembers of any United Club credit card who received a new Cardmember bonus for this card within the last 24 months. Chase doesn't say whether that includes the business card, and the page's summary only rules out holders of this card."
17
17
  rules:
18
18
  - id: united
19
19
  match: { merchants: [united] }
@@ -3,8 +3,8 @@ name: Citi / AAdvantage Globe Mastercard
3
3
  issuer: citi
4
4
  network: mastercard
5
5
  currency: aadvantage-miles
6
- last_verified: 2026-10-26
7
- verified_by: collin
6
+ last_verified: 2026-11-01
7
+ verified_by: claude
8
8
  source_urls:
9
9
  - https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
10
10
  base_rate: 1
@@ -35,22 +35,22 @@ rules:
35
35
  evidence:
36
36
  - rule: base_rate
37
37
  url: https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
38
- quote: 'Earn 1 AAdvantage® mile for every $1 spent on all other purchases.'
38
+ quote: 'Earn 1 AAdvantage® mile for every $1 spent on all other purchases'
39
39
  - rule: aadvantage-hotels
40
40
  url: https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
41
- quote: 'Earn 6 AAdvantage® miles per $1 spent on eligible AAdvantage Hotels™ bookings'
41
+ quote: 'Earn 6 AAdvantage® miles for every $1 spent on eligible AAdvantage Hotels™ bookings'
42
42
  - rule: american-airlines
43
43
  url: https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
44
- quote: '3 AAdvantage® miles per $1 spent on eligible American Airlines purchases'
44
+ quote: '3 AAdvantage® miles for every $1 spent on eligible American Airlines purchases'
45
45
  - rule: american-airlines
46
46
  url: https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
47
47
  quote: 'Eligible American Airlines purchases are items billed by American Airlines as the merchant of record.'
48
48
  - rule: restaurants
49
49
  url: https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
50
- quote: 'Earn 2 AAdvantage® miles for every $1 spent at restaurants, including takeout and delivery.'
50
+ quote: 'Earn 2 AAdvantage® miles for every $1 spent at restaurants, including takeout and delivery'
51
51
  - rule: rides-and-rails
52
52
  url: https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
53
- quote: 'Earn 2 AAdvantage® miles for every $1 spent on eligible Rides and Rails™ purchases, including taxis, rideshares and public transit.'
53
+ quote: 'Earn 2 AAdvantage® miles for every $1 spent on eligible Rides and Rails™ purchases, including taxis, rideshares and public transit'
54
54
  - rule: rides-and-rails
55
55
  url: https://www.citi.com/credit-cards/citi-aadvantage-globe-mastercard
56
56
  quote: 'passenger railways, bridge and road tolls, parking lots'
@@ -7,11 +7,13 @@ last_verified: 2026-10-31
7
7
  verified_by: claude
8
8
  source_urls:
9
9
  - https://www.citi.com/credit-cards/costco-anywhere-visa-business-card
10
+ - https://www.costco.com/join-costco.html
10
11
  # Paid once a year as a Costco reward certificate after the February statement,
11
12
  # redeemable for cash or merchandise at a U.S. Costco warehouse.
12
13
  base_rate: 1
13
14
  business: true
14
15
  annual_fee: 0
16
+ requires_membership: costco # its fee is in data/memberships.yaml
15
17
  caps:
16
18
  # Costco gas, other gas and EV charging share one $7,000 cap. Rewards run on
17
19
  # January–December billing statements.
@@ -47,7 +49,7 @@ rules:
47
49
  rate: 2
48
50
  note: All other purchases at Costco warehouses and Costco.com.
49
51
  todo:
50
- - 'The $0 annual fee requires an active, paid Costco membership. The card page shows no welcome offer.'
52
+ - 'The card page shows no welcome offer.'
51
53
  evidence:
52
54
  - rule: base_rate
53
55
  url: https://www.citi.com/credit-cards/costco-anywhere-visa-business-card
@@ -85,3 +87,9 @@ evidence:
85
87
  - rule: annual_fee
86
88
  url: https://www.citi.com/credit-cards/costco-anywhere-visa-business-card
87
89
  quote: '$0 annual fee with active Costco membership.'
90
+ - rule: requires_membership
91
+ url: https://www.citi.com/credit-cards/costco-anywhere-visa-business-card
92
+ quote: 'No annual fee with paid Costco membership.'
93
+ - rule: requires_membership
94
+ url: https://www.costco.com/join-costco.html
95
+ quote: 'Gold Star $65/yr'
@@ -7,10 +7,12 @@ last_verified: 2026-10-26
7
7
  verified_by: collin
8
8
  source_urls:
9
9
  - https://www.citi.com/credit-cards/citi-costco-anywhere-visa-credit-card
10
+ - https://www.costco.com/join-costco.html
10
11
  # Paid once a year as a Costco reward certificate after the February statement,
11
12
  # redeemable for cash or merchandise at a U.S. Costco warehouse.
12
13
  base_rate: 1
13
14
  annual_fee: 0
15
+ requires_membership: costco # its fee is in data/memberships.yaml
14
16
  caps:
15
17
  # Costco gas, other gas and EV charging share one $7,000 cap. Rewards run on
16
18
  # January–December billing statements.
@@ -46,7 +48,7 @@ rules:
46
48
  rate: 2
47
49
  note: All other purchases at Costco warehouses and Costco.com.
48
50
  todo:
49
- - 'The $0 annual fee requires an active, paid Costco membership. The card page shows no welcome offer.'
51
+ - 'The card page shows no welcome offer.'
50
52
  evidence:
51
53
  - rule: base_rate
52
54
  url: https://www.citi.com/credit-cards/citi-costco-anywhere-visa-credit-card
@@ -84,3 +86,9 @@ evidence:
84
86
  - rule: annual_fee
85
87
  url: https://www.citi.com/credit-cards/citi-costco-anywhere-visa-credit-card
86
88
  quote: '$0 annual fee with active Costco membership.'
89
+ - rule: requires_membership
90
+ url: https://www.citi.com/credit-cards/citi-costco-anywhere-visa-credit-card
91
+ quote: 'No annual fee with paid Costco membership.'
92
+ - rule: requires_membership
93
+ url: https://www.costco.com/join-costco.html
94
+ quote: 'Gold Star $65/yr'
@@ -21,6 +21,7 @@ welcome_offer:
21
21
  spend: 0
22
22
  months: 1
23
23
  valid_to: 2026-12-01
24
+ not_with: [td-bank-nordstrom-visa]
24
25
  note: A $60 Nordstrom Note, not a statement credit, for applying and getting approved for a new Nordstrom credit card between October 12 and December 1, 2026 (the terms say 9pm PT October 11 to 9pm PT December 1). No purchase is required; the Note posts to the Nordy Club account 7-10 business days after approval, so months is only a placeholder. Current and previous Nordstrom credit cardmembers and Nordstrom employees are not eligible.
25
26
  rules:
26
27
  - id: nordstrom
@@ -67,3 +68,6 @@ evidence:
67
68
  - rule: welcome_offer
68
69
  url: https://www.nordstrom.com/becomecardmember
69
70
  quote: 'approved for a new Nordstrom credit card October 12 - December 1'
71
+ - rule: not_with
72
+ url: https://www.nordstrom.com/becomecardmember
73
+ quote: 'Current and previous Nordstrom credit cardmembers and Nordstrom employees are not eligible for this offer'
@@ -19,6 +19,7 @@ welcome_offer:
19
19
  spend: 0
20
20
  months: 1
21
21
  valid_to: 2026-12-01
22
+ not_with: [td-bank-nordstrom-credit-card]
22
23
  note: A $60 Nordstrom Note, not a statement credit, for applying and getting approved for a new Nordstrom credit card between October 12 and December 1, 2026 (the terms say 9pm PT October 11 to 9pm PT December 1). No purchase is required; the Note posts to the Nordy Club account 7-10 business days after approval, so months is only a placeholder. Current and previous Nordstrom credit cardmembers and Nordstrom employees are not eligible.
23
24
  rules:
24
25
  - id: nordstrom
@@ -103,3 +104,6 @@ evidence:
103
104
  - rule: welcome_offer
104
105
  url: https://www.nordstrom.com/becomecardmember
105
106
  quote: 'approved for a new Nordstrom credit card October 12 - December 1'
107
+ - rule: not_with
108
+ url: https://www.nordstrom.com/becomecardmember
109
+ quote: 'Current and previous Nordstrom credit cardmembers and Nordstrom employees are not eligible for this offer'