earnrate 0.2.12 → 0.2.14

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 (99) hide show
  1. package/README.md +20 -7
  2. package/data/CHANGELOG.md +197 -0
  3. package/data/VERSION +1 -1
  4. package/data/cards/amex-blue-cash-everyday.yaml +28 -2
  5. package/data/cards/amex-blue-cash-preferred.yaml +19 -0
  6. package/data/cards/amex-business-gold.yaml +38 -3
  7. package/data/cards/amex-business-platinum.yaml +72 -3
  8. package/data/cards/amex-delta-skymiles-gold.yaml +34 -9
  9. package/data/cards/amex-delta-skymiles-platinum.yaml +40 -9
  10. package/data/cards/amex-delta-skymiles-reserve.yaml +42 -10
  11. package/data/cards/amex-gold.yaml +52 -0
  12. package/data/cards/amex-hilton-honors-aspire.yaml +23 -1
  13. package/data/cards/amex-hilton-honors-business.yaml +14 -1
  14. package/data/cards/amex-hilton-honors-surpass.yaml +14 -1
  15. package/data/cards/amex-marriott-bonvoy-brilliant.yaml +15 -1
  16. package/data/cards/amex-marriott-bonvoy-business.yaml +7 -8
  17. package/data/cards/amex-platinum.yaml +110 -0
  18. package/data/cards/apple-card.yaml +76 -0
  19. package/data/cards/bilt-obsidian.yaml +12 -2
  20. package/data/cards/bilt-palladium.yaml +12 -2
  21. package/data/cards/caltech-efcu-platinum-mastercard.yaml +50 -0
  22. package/data/cards/capital-one-rei-co-op-mastercard.yaml +62 -0
  23. package/data/cards/capital-one-venture-x-business.yaml +28 -1
  24. package/data/cards/capital-one-venture-x.yaml +30 -2
  25. package/data/cards/chase-aeroplan.yaml +14 -0
  26. package/data/cards/chase-ihg-one-rewards-business.yaml +27 -1
  27. package/data/cards/chase-ihg-one-rewards-premier-select.yaml +16 -0
  28. package/data/cards/chase-ihg-one-rewards-premier.yaml +15 -0
  29. package/data/cards/chase-ink-business-cash.yaml +13 -0
  30. package/data/cards/chase-ink-business-unlimited.yaml +13 -2
  31. package/data/cards/chase-sapphire-preferred.yaml +11 -0
  32. package/data/cards/chase-sapphire-reserve.yaml +44 -4
  33. package/data/cards/chase-united-business.yaml +32 -0
  34. package/data/cards/chase-united-club-business.yaml +40 -0
  35. package/data/cards/chase-united-club.yaml +40 -0
  36. package/data/cards/chase-united-explorer.yaml +32 -0
  37. package/data/cards/chase-united-quest.yaml +40 -0
  38. package/data/cards/citi-aadvantage-executive.yaml +26 -1
  39. package/data/cards/citi-strata-elite.yaml +20 -1
  40. package/data/cards/discover-it-cash-back.yaml +8 -5
  41. package/data/cards/fidelity-rewards-visa-signature.yaml +60 -0
  42. package/data/cards/navy-federal-cash-rewards-plus.yaml +61 -0
  43. package/data/cards/navy-federal-cash-rewards.yaml +60 -0
  44. package/data/cards/navy-federal-more-rewards-amex.yaml +92 -0
  45. package/data/cards/paypal-cashback-mastercard.yaml +13 -2
  46. package/data/cards/penfed-power-cash-rewards.yaml +47 -0
  47. package/data/cards/usbank-altitude-connect.yaml +8 -2
  48. package/data/cards/usbank-altitude-go.yaml +8 -2
  49. package/data/cards/usbank-smartly.yaml +107 -0
  50. package/data/cards/venmo-credit-card.yaml +151 -0
  51. package/data/cards/verizon-visa-card.yaml +122 -0
  52. package/data/currencies.yaml +14 -0
  53. package/data/issuers.yaml +22 -0
  54. package/data/memberships.yaml +35 -0
  55. package/data/merchants/overrides.yaml +448 -0
  56. package/data/merchants/seed.yaml +1085 -66
  57. package/dist/cli/args.js +18 -0
  58. package/dist/cli/explore.js +10 -1
  59. package/dist/cli/run.js +4 -1
  60. package/dist/cli/wallet.js +31 -4
  61. package/dist/data/file-store.js +5 -2
  62. package/dist/data/integrity.js +22 -0
  63. package/dist/data/store.js +4 -1
  64. package/dist/data/wallet-edit.js +25 -6
  65. package/dist/engine/cheat-sheet.js +20 -7
  66. package/dist/engine/checklist.js +35 -11
  67. package/dist/engine/credits.js +65 -0
  68. package/dist/engine/evaluate.js +38 -11
  69. package/dist/engine/explore.js +72 -9
  70. package/dist/engine/offers.js +2 -1
  71. package/dist/engine/periods.js +10 -3
  72. package/dist/engine/recommend.js +101 -38
  73. package/dist/engine/record.js +42 -1
  74. package/dist/engine/rotation.js +4 -0
  75. package/dist/engine/rule-text.js +35 -7
  76. package/dist/engine/setup.js +17 -6
  77. package/dist/engine/simulate.js +13 -4
  78. package/dist/engine/text.js +89 -1
  79. package/dist/engine/wallet-change.js +37 -1
  80. package/dist/engine/wallet-summary.js +32 -4
  81. package/dist/format/card-text.js +4 -3
  82. package/dist/format/cards.js +6 -2
  83. package/dist/format/cheat-sheet.js +2 -0
  84. package/dist/format/explore.js +20 -4
  85. package/dist/format/recommendation.js +6 -2
  86. package/dist/format/wallet-yaml.js +11 -15
  87. package/dist/format/wallet.js +15 -7
  88. package/dist/import/analyze.js +7 -2
  89. package/dist/mcp/inputs.js +10 -0
  90. package/dist/mcp/prompts.js +9 -1
  91. package/dist/mcp/schemas.js +71 -1
  92. package/dist/mcp/tools/answers.js +11 -5
  93. package/dist/mcp/tools/wallet.js +15 -7
  94. package/dist/merchants/resolve.js +8 -0
  95. package/dist/schema/card.js +37 -3
  96. package/dist/schema/common.js +1 -1
  97. package/dist/schema/merchant.js +6 -0
  98. package/dist/schema/wallet.js +8 -0
  99. package/package.json +1 -1
@@ -55,6 +55,74 @@ milestones:
55
55
  - Centurion Lounge guest access for 2 guests
56
56
  - unlimited Delta Sky Club access
57
57
  note: 'Purchases by additional card members count. Both last the rest of that calendar year, all of the next and through the January 31 after. Sky Club visits still need a same-day Delta flight.'
58
+ # Merchant statement credits, on top of what the purchase earns.
59
+ credits:
60
+ - id: lululemon
61
+ match: { merchants: [lululemon] }
62
+ amount: 75
63
+ period: quarter
64
+ enroll: true
65
+ note: U.S. lululemon stores, lululemon.com and the lululemon app. Not outlets, lululemon Studio, Like New, warehouse or event sales, gift cards, or orders shipped outside the U.S.
66
+ - id: uber-cash
67
+ match: { merchants: [uber, uber-eats] }
68
+ amount: 15
69
+ period: month
70
+ note: 'Uber Cash, added to your Uber account each month once the card is in it, plus an extra $20 in December (modeled at $15). Only on U.S. rides and orders paid with an Amex card; not for a card added through Apple Pay or PayPal.'
71
+ - id: uber-one
72
+ match: { merchants: [uber-one] }
73
+ amount: 120
74
+ period: calendar_year
75
+ note: 'Uber One membership fees, monthly or annual, charged to the card with Uber Cash turned off for them. Not free trials.'
76
+ - id: resy
77
+ match: { merchants: [resy] }
78
+ amount: 100
79
+ period: quarter
80
+ enroll: true
81
+ note: 'U.S. restaurants that take Resy reservations, and purchases on Resy.com, in the Resy app or through Resy Pay. Not gift cards, delivery or catering.'
82
+ - id: digital-entertainment
83
+ match:
84
+ {
85
+ merchants:
86
+ [
87
+ disney-plus,
88
+ espn,
89
+ hulu,
90
+ new-york-times,
91
+ paramount-plus,
92
+ peacock,
93
+ wall-street-journal,
94
+ youtube-premium,
95
+ youtube-tv,
96
+ ],
97
+ }
98
+ amount: 25
99
+ period: month
100
+ enroll: true
101
+ note: "Bought directly from Disney+, ESPN streaming, Hulu, The New York Times, Paramount+, Peacock, The Wall Street Journal, YouTube Premium or YouTube TV. Not through a cable bundle or another company's app store."
102
+ - id: equinox
103
+ match: { merchants: [equinox] }
104
+ amount: 300
105
+ period: calendar_year
106
+ enroll: true
107
+ note: 'U.S. Equinox club memberships or an Equinox+ subscription.'
108
+ - id: oura
109
+ match: { merchants: [oura] }
110
+ amount: 200
111
+ period: calendar_year
112
+ enroll: true
113
+ note: 'An Oura Ring bought at ouraring.com and shipped in the U.S. Not Oura memberships, chargers or other add-ons.'
114
+ - id: walmart-plus
115
+ match: { merchants: [walmart-plus] }
116
+ amount: 12.95
117
+ period: month
118
+ note: 'One Walmart+ monthly membership fee a month, plus its tax. Not annual memberships or Plus Ups.'
119
+ - id: clear-plus
120
+ match: { merchants: [clear] }
121
+ amount: 219
122
+ period: calendar_year
123
+ note: 'An annual CLEAR+ membership.'
124
+ todo:
125
+ - 'Amex''s rewards terms count eligible purchases as "purchases for goods and services minus returns and other credits" and don''t say whether that takes out benefit statement credits. Its credits are modeled as earning the card''s rate on the whole purchase, with the credit on top.'
58
126
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
59
127
  evidence:
60
128
  - rule: base_rate
@@ -105,3 +173,45 @@ evidence:
105
173
  - rule: spend-75k
106
174
  url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
107
175
  quote: 'the total eligible purchases on the Eligible Platinum Card Account must equal or exceed $75,000'
176
+ - rule: lululemon
177
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
178
+ quote: 'Enrolled Basic Card Members can receive up to $75 in statement credits each quarter'
179
+ - rule: lululemon
180
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
181
+ quote: 'Eligible purchases are purchases made directly with lululemon at lululemon stores in the U.S.'
182
+ - rule: lululemon
183
+ url: https://www.americanexpress.com/us/credit-cards/card/platinum/
184
+ quote: 'U.S. lululemon retail stores (excluding outlets) and lululemon.com. Enrollment required.'
185
+ - rule: uber-cash
186
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
187
+ quote: 'eligible for $15 Uber Cash each month plus an additional $20 Uber Cash in December'
188
+ - rule: uber-one
189
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
190
+ quote: 'eligible to receive up to $120 in statement credits per calendar year on Uber One membership fees'
191
+ - rule: resy
192
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
193
+ quote: 'Enrolled Basic Card Members can earn up to $100 in statement credits each quarter'
194
+ - rule: digital-entertainment
195
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
196
+ quote: 'Enrolled Basic Card Members can receive up to $25 in statement credits each month on eligible purchases'
197
+ - rule: digital-entertainment
198
+ url: https://www.americanexpress.com/us/credit-cards/card/platinum/
199
+ quote: 'Disney+, a Disney+ bundle, ESPN streaming services, Hulu, The New York Times, Paramount+, Peacock'
200
+ - rule: digital-entertainment
201
+ url: https://www.americanexpress.com/us/credit-cards/card/platinum/
202
+ quote: 'The Wall Street Journal, YouTube Premium, and YouTube TV.'
203
+ - rule: equinox
204
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
205
+ quote: 'up to a total of $300 in statement credits each calendar year across all Cards on the Platinum Account'
206
+ - rule: oura
207
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
208
+ quote: 'Enrolled Basic Card Members can receive up to $200 in statement credits each calendar year'
209
+ - rule: oura
210
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
211
+ quote: 'Oura Ring purchases made online at U.S. website ouraring.com'
212
+ - rule: walmart-plus
213
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
214
+ quote: 'statement credit for one Walmart+ monthly membership fee (up to $12.95 plus applicable taxes)'
215
+ - rule: clear-plus
216
+ url: https://www.americanexpress.com/en-us/credit-cards/apply/terms/personal/platinum-card/25330-10-0#offer-terms
217
+ quote: 'earn up to $219 in statement credits per calendar year when their Platinum Card®'
@@ -0,0 +1,76 @@
1
+ id: apple-card
2
+ name: Apple Card
3
+ color: '#e4e4e2'
4
+ # Issued by Goldman Sachs Bank USA, per apple.com on 2026-11-04. Chase is
5
+ # taking over as issuer (announced January 2026, about 24 months); move
6
+ # `issuer` and the sources when Apple's page names Chase.
7
+ issuer: goldman-sachs
8
+ network: mastercard
9
+ currency: cash
10
+ last_verified: 2026-11-04
11
+ verified_by: claude
12
+ source_urls:
13
+ - https://www.apple.com/apple-card/
14
+ base_rate: 1
15
+ annual_fee: 0
16
+ foreign_transaction_fee: 0
17
+ rules:
18
+ - id: apple
19
+ match: { merchants: [apple-store, apple-tv, apple-music] }
20
+ rate: 3
21
+ note: Everything bought from Apple, paid with the card any way, in Apple Stores, on apple.com, in the App Store and for Apple services like Apple Music and Apple TV.
22
+ - id: apple-pay-merchants
23
+ match:
24
+ merchants:
25
+ [
26
+ ace-hardware,
27
+ chargepoint,
28
+ duane-reade,
29
+ exxon-mobil,
30
+ hertz,
31
+ nike,
32
+ uber,
33
+ uber-eats,
34
+ walgreens,
35
+ ]
36
+ rate: 3
37
+ geography: us_only
38
+ requires: { payment: apple-pay }
39
+ note: Where the store offers Apple Pay (not at Walgreens drive-thrus, for one), and only in the U.S. Ace Hardware at participating stores; Exxon and Mobil pumps and their attached convenience stores; Hertz rentals from U.S. corporate locations booked with Hertz. Gift cards and third-party sellers inside these stores don't count.
40
+ - id: apple-pay
41
+ match: { any: true }
42
+ rate: 2
43
+ requires: { payment: apple-pay }
44
+ note: Any purchase paid with Apple Card through Apple Pay, in stores, in apps and on websites. The titanium card or the card number earns 1%.
45
+ todo:
46
+ - Booking.com earns 3% only on stays and rentals booked through Apple's own Booking.com link, prepaid with Apple Pay, so it isn't on the Apple Pay merchant list here.
47
+ - The rates and fees table is in Goldman Sachs's Customer Agreement, a PDF the source check can't read; the fees are quoted from apple.com instead.
48
+ # Issuer text backing each rule; `yarn check-sources` checks it weekly.
49
+ evidence:
50
+ - rule: base_rate
51
+ url: https://www.apple.com/apple-card/
52
+ quote: 'When you use the card, you’ll get 1% Daily Cash back on every purchase.'
53
+ - rule: apple
54
+ url: https://www.apple.com/apple-card/
55
+ quote: 'Apple Card gives you unlimited 3% Daily Cash back on everything you buy at Apple'
56
+ - rule: apple-pay-merchants
57
+ url: https://www.apple.com/apple-card/
58
+ quote: '3% Daily Cash back when you use your Apple Card with Apple Pay at your favorites like Nike, Uber, Walgreens'
59
+ - rule: apple-pay-merchants
60
+ url: https://www.apple.com/apple-card/
61
+ quote: 'Nike: 3% Daily Cash is available on purchases made in the U.S. using Apple Card with Apple Pay'
62
+ - rule: apple-pay-merchants
63
+ url: https://www.apple.com/apple-card/
64
+ quote: 'Walgreens/Duane Reade: 3% Daily Cash is available in the United States when using Apple Card with Apple Pay'
65
+ - rule: apple-pay-merchants
66
+ url: https://www.apple.com/apple-card/
67
+ quote: 'ChargePoint: 3% Daily Cash is available when using Apple Card with Apple Pay'
68
+ - rule: apple-pay
69
+ url: https://www.apple.com/apple-card/
70
+ quote: 'with every purchase you make using your Apple Card with Apple Pay, you get 2% Daily Cash back'
71
+ - rule: annual_fee
72
+ url: https://www.apple.com/apple-card/
73
+ quote: 'No annual, over-the-limit, foreign-transaction, or late fees.'
74
+ - rule: foreign_transaction_fee
75
+ url: https://www.apple.com/apple-card/
76
+ quote: 'No annual, over-the-limit, foreign-transaction, or late fees.'
@@ -56,8 +56,7 @@ rules:
56
56
  }
57
57
  rate: 2
58
58
  note: Booked directly with airlines, hotels, motels, resorts, cruise lines and car rental agencies, by Mastercard merchant code. Travel agencies and transit don't count.
59
- # Not modeled on purpose: the $100 Bilt Travel Hotel credit and the $200 Bilt
60
- # Cash welcome bonus.
59
+ # Not modeled on purpose: the $200 Bilt Cash welcome bonus.
61
60
  todo:
62
61
  - Rent and mortgage paid through Bilt earn 0X-1.25X depending on the cycle's everyday spend as a share of the housing payment (25%/50%/75%/100% tiers give 0.5X/0.75X/1X/1.25X; below 25% a flat 250 points). earnrate has no housing category or spend-ratio rule.
63
62
  - The Flexible Bilt Cash option earns 4% Bilt Cash on everyday spend on top of points, but drops the housing multiplier (housing points must be bought with Bilt Cash, $3 per 100 points). Bilt Cash is a second currency; not modeled.
@@ -66,6 +65,14 @@ todo:
66
65
  - Walgreens in-store (+1X, and +2X on Walgreens-brand items until December 11, 2026, per the Bilt Rewards Points Earning Terms PDF at bilt.com/terms/earn), Metropolis parking, fitness classes and Bilt Home Delivery add Bilt bonuses not stated on an HTML page; not modeled.
67
66
  - The Bilt Card Offer Terms PDF counts bakeries (MCC 5462) in the 3X dining pick, but a choice option can only list categories and earnrate's dining category doesn't include bakeries, so bakery purchases get 1X here.
68
67
  - 'Welcome offer not modeled: the page offers $200 in Bilt Cash upon approval with no spend required. Bilt Cash is a second currency (not BILT points or cash), and this file already skips it on purpose.'
68
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
69
+ # Merchant statement credits, on top of what the purchase earns.
70
+ credits:
71
+ - id: hotel-credit
72
+ match: { merchants: [bilt-travel-hotels] }
73
+ amount: 50
74
+ period: half_year
75
+ note: 'Hotel stays of 2 nights or more booked through Bilt Travel: $50 from January through June and $50 from July through December, no rollover.'
69
76
  # Program text backing each rule; `yarn check-sources` checks it weekly.
70
77
  evidence:
71
78
  - rule: base_rate
@@ -95,3 +102,6 @@ evidence:
95
102
  - rule: foreign_transaction_fee
96
103
  url: https://www.bilt.com/card/obsidian
97
104
  quote: 'Enjoy no foreign transaction fees when traveling internationally'
105
+ - rule: hotel-credit
106
+ url: https://www.bilt.com/card/obsidian
107
+ quote: '$100 Bilt Travel Hotel credit distributed as $50 semi-annually (2-night minimum stay at Bilt Travel Portal properties)'
@@ -34,12 +34,19 @@ rules:
34
34
  rate: 4
35
35
  requires: { activation: true }
36
36
  note: 2X card earn plus 2X Bilt bonus on eligible rides after linking Bilt and Lyft accounts in the Bilt app. Uncapped.
37
- # Not modeled on purpose: the $400 Bilt Travel Hotel credit, $200 annual Bilt
38
- # Cash and Priority Pass.
37
+ # Not modeled on purpose: $200 annual Bilt Cash and Priority Pass.
39
38
  todo:
40
39
  - Rent and mortgage paid through Bilt earn 0.5X-1.25X depending on the cycle's everyday spend as a share of the housing payment (25%/50%/75%/100% give 0.5X/0.75X/1X/1.25X; below 25% a flat 250 points). earnrate has no housing category or spend-ratio rule.
41
40
  - Bilt Neighborhood Dining restaurants add a per-restaurant bonus (usually +2-3X, up to 5X total). It varies by restaurant, so it isn't modeled.
42
41
  - Point Accelerator (spend $200 Bilt Cash for +1X on the next $5,000, up to five times a year) isn't modeled.
42
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
43
+ # Merchant statement credits, on top of what the purchase earns.
44
+ credits:
45
+ - id: hotel-credit
46
+ match: { merchants: [bilt-travel-hotels] }
47
+ amount: 200
48
+ period: half_year
49
+ note: 'Hotel stays of 2 nights or more booked through Bilt Travel: $200 from January through June and $200 from July through December.'
43
50
  evidence:
44
51
  - rule: base_rate
45
52
  url: https://www.bilt.com/card/palladium
@@ -74,3 +81,6 @@ evidence:
74
81
  - rule: foreign_transaction_fee
75
82
  url: https://www.bilt.com/card/palladium
76
83
  quote: 'No foreign transaction fees'
84
+ - rule: hotel-credit
85
+ url: https://www.bilt.com/card/palladium
86
+ quote: '$400 Bilt Travel Hotel credit distributed as $200 semi-annually (applicable to 2-night minimum stay'
@@ -0,0 +1,50 @@
1
+ id: caltech-efcu-platinum-mastercard
2
+ name: Caltech EFCU Platinum Mastercard
3
+ short_name: Caltech EFCU Platinum
4
+ color: '#1c2541'
5
+ # Caltech Employees Federal Credit Union's only credit card. It earns no
6
+ # rewards: none of the credit union's pages about it mentions points or cash
7
+ # back, and its benefits list names none. The Student Platinum Mastercard is
8
+ # the same card for full-time students.
9
+ issuer: caltech-efcu
10
+ network: mastercard
11
+ currency: cash
12
+ last_verified: 2026-11-04
13
+ verified_by: claude
14
+ source_urls:
15
+ - https://www.caltechefcu.org/home/products/lending/mastercard
16
+ - https://www.caltechefcu.org/home/products/lending/mastercard/disclosure
17
+ - https://www.caltechefcu.org/home/products/lending/mastercard/mastercard_faqs
18
+ - https://www.caltechefcu.org/home/products/lending/mastercard/student_mastercard
19
+ - https://www.caltechefcu.org/home/resources/fees
20
+ - https://www.caltechefcu.org/home/membership/eligibility
21
+ base_rate: 0
22
+ annual_fee: 0
23
+ foreign_transaction_fee: 0
24
+ requires_membership: caltech-efcu
25
+ evidence:
26
+ - rule: base_rate
27
+ url: https://www.caltechefcu.org/home/products/lending/mastercard
28
+ quote: 'Cardholder Benefits Manage your account online Easy payment methods Mastercard ATM access'
29
+ - rule: annual_fee
30
+ url: https://www.caltechefcu.org/home/products/lending/mastercard/disclosure
31
+ quote: 'Annual Fee NONE'
32
+ - rule: annual_fee
33
+ url: https://www.caltechefcu.org/home/products/lending/mastercard
34
+ quote: 'No annual fee'
35
+ - rule: foreign_transaction_fee
36
+ url: https://www.caltechefcu.org/home/products/lending/mastercard/disclosure
37
+ quote: 'Foreign Transaction NONE'
38
+ - rule: foreign_transaction_fee
39
+ url: https://www.caltechefcu.org/home/products/lending/mastercard
40
+ quote: 'No foreign transaction fee'
41
+ - rule: requires_membership
42
+ url: https://www.caltechefcu.org/home/products/lending/mastercard
43
+ quote: 'Log in to eBranch and select ‘Apply for a Loan’ to get started.'
44
+ - rule: requires_membership
45
+ url: https://www.caltechefcu.org/home/membership/eligibility
46
+ quote: 'serves an exclusive field of membership'
47
+ todo:
48
+ - "Membership is by eligibility, not a yearly fee: Caltech, JPL and affiliate employees, Caltech students and alumni association members, and their immediate family, with a $5 minimum deposit and a one-time $5 membership fee. No Caltech EFCU page says in so many words that the card needs membership; the card page sends applicants to eBranch, the members' online banking."
49
+ - "caltechefcu.org sits behind Cloudflare and refuses plain curl, so the source check may list its pages as unreachable. The membership eligibility page's quote was read 2026-11-04 with an ordinary web fetch, not machine-checked."
50
+ - "For California borrowers the disclosure says the card is secured by goods bought with it and by shares held at the credit union. That doesn't change what it earns."
@@ -0,0 +1,62 @@
1
+ id: capital-one-rei-co-op-mastercard
2
+ name: REI Co-op Mastercard
3
+ color: '#2d5a45'
4
+ issuer: capital-one
5
+ # The FAQ says cardmembers get World Elite Mastercard benefits.
6
+ network: mastercard
7
+ currency: rei-rewards
8
+ last_verified: 2026-11-04
9
+ verified_by: claude
10
+ source_urls:
11
+ - https://www.capitalone.com/credit-cards/rei/
12
+ # Units are cents of REI Co-op Mastercard Rewards per dollar, so 5 is 5%.
13
+ base_rate: 1.5
14
+ annual_fee: 0
15
+ foreign_transaction_fee: 0
16
+ # REI's membership fee isn't on file (see todo).
17
+ requires_membership: rei-co-op
18
+ welcome_offer:
19
+ dollars: 100
20
+ spend: 0
21
+ months: 2
22
+ note: A $100 REI gift card, not cash back, after the first purchase outside REI within 60 days of account opening (modeled as 2 months; any non-REI purchase qualifies, so spend 0). Existing or previous REI Co-op Mastercard cardmembers aren't eligible.
23
+ rules:
24
+ - id: rei
25
+ match: { merchants: [rei] }
26
+ rate: 5
27
+ note: REI stores and REI.com, including full-price and discounted items, REI gift cards, paid REI classes and events, services and fees, and donations to the REI Cooperative Action Fund. On top of the co-op's own yearly member reward (typically 10% of eligible full-price REI purchases, however you pay), which earnrate doesn't count.
28
+ # Issuer text backing each rule; `yarn check-sources` checks it weekly.
29
+ evidence:
30
+ - rule: base_rate
31
+ url: https://www.capitalone.com/credit-cards/rei/
32
+ quote: 'You will earn 1.5% in REI Co-op Mastercard Rewards on all other purchases made outside of REI.'
33
+ - rule: rei
34
+ url: https://www.capitalone.com/credit-cards/rei/
35
+ quote: 'net purchases (purchases minus any credits or returns) made at REI retail locations or REI.com'
36
+ - rule: rei
37
+ url: https://www.capitalone.com/credit-cards/rei/
38
+ quote: 'Purchases include full-price and discount-price items, REI gift cards, paid REI classes and events, services and fees.'
39
+ - rule: rei
40
+ url: https://www.capitalone.com/credit-cards/rei/
41
+ quote: 'on top of your annual 10% Co-op Member Reward'
42
+ - rule: annual_fee
43
+ url: https://www.capitalone.com/credit-cards/rei/
44
+ quote: 'There is no annual fee associated with this card.'
45
+ - rule: foreign_transaction_fee
46
+ url: https://www.capitalone.com/credit-cards/rei/
47
+ quote: 'No foreign transaction fees Avoid additional charges or fees while abroad or with foreign currency.'
48
+ - rule: requires_membership
49
+ url: https://www.capitalone.com/credit-cards/rei/
50
+ quote: 'Choose outside every day with the REI Co-op® Mastercard®—just for REI Co-op members.'
51
+ - rule: welcome_offer
52
+ url: https://www.capitalone.com/credit-cards/rei/
53
+ quote: 'Earn a $100 REI gift card after your first non-REI purchase outside of REI within 60 days from account opening.'
54
+ - rule: welcome_offer
55
+ url: https://www.capitalone.com/credit-cards/rei/
56
+ quote: 'Existing or previous REI Co-op Mastercard cardmembers will not be eligible for this one-time gift card.'
57
+ todo:
58
+ - 'The foreign transaction fee and annual fee are quoted from the card page''s benefit tiles and FAQ. The page''s "View important rates and disclosures" link opens a modal that needs JavaScript, so its disclosures.capitalone.com address isn''t known; add it to source_urls and quote its fee rows once read in a browser.'
59
+ - "Requires an REI Co-op membership (Capital One validates it before the application). No readable page states the membership's price (rei.com refuses plain fetches, and Capital One's page doesn't say), so the rei-co-op membership has annual_fee 0 as a placeholder and nothing is counted against the card for it. Check the price and whether it's one-time or yearly on rei.com/membership by hand."
60
+ - "Rewards are spendable only at REI (REI.com, REI Outlet, REI stores and the REI app), not as cash or check; they post 1-2 business days after the purchase posts and don't expire for the life of the account."
61
+ - "Cardmember Double Rewards event: once a year, an extra 5% (10% total) on REI purchases. Capital One doesn't publish the dates, so it isn't modeled; add it as a dated rule (valid_from/valid_to) when the event is announced."
62
+ - 'The welcome offer counts only a purchase outside REI; earnrate counts any purchase toward it.'
@@ -48,6 +48,23 @@ rules:
48
48
  match: { merchants: [capital-one-entertainment] }
49
49
  rate: 5
50
50
  note: Tickets bought on the Capital One Entertainment ticketing platform only. Cardholder-exclusive pre-sales and tickets bought directly from Capital One Hall or Capital One Arena are excluded.
51
+ # Merchant statement credits, on top of what the purchase earns.
52
+ credits:
53
+ - id: capital-one-business-travel
54
+ match:
55
+ {
56
+ merchants:
57
+ [
58
+ capital-one-business-travel,
59
+ capital-one-business-travel-hotels,
60
+ capital-one-business-travel-vacation-rentals,
61
+ capital-one-business-travel-car-rentals,
62
+ capital-one-business-travel-flights,
63
+ ],
64
+ }
65
+ amount: 300
66
+ period: cardmember_year
67
+ note: 'A credit in Capital One Business Travel, used at checkout and good until the next account anniversary. The part it pays for earns no miles.'
51
68
  evidence:
52
69
  - rule: base_rate
53
70
  url: https://www.capitalone.com/small-business/credit-cards/venture-x-business/
@@ -91,7 +108,17 @@ evidence:
91
108
  - rule: foreign_transaction_fee
92
109
  url: https://www.capitalone.com/small-business/credit-cards/venture-x-business/
93
110
  quote: 'Pay zero foreign transaction fees on purchases made outside of the United States'
111
+ - rule: capital-one-business-travel
112
+ url: https://disclosures.capitalone.com/disclosure.42243.en-US.html
113
+ quote: 'will receive a $300 Capital One Business Travel credit'
114
+ - rule: capital-one-business-travel
115
+ url: https://disclosures.capitalone.com/disclosure.42243.en-US.html
116
+ quote: 'Each annual Credit will expire on the next account open date anniversary.'
117
+ - rule: capital-one-business-travel
118
+ url: https://disclosures.capitalone.com/disclosure.42243.en-US.html
119
+ quote: 'Rewards will not be earned on the Credit.'
94
120
  todo:
95
121
  - "The welcome offer's second tier (another 150,000 miles and a $1,000 Capital One Business Travel credit after $120,000 in the first 4 months) isn't modeled: a welcome offer has one spend threshold."
96
- - Not modeled (credits and perks, not miles per dollar) the $300 annual Capital One Business Travel credit, the 10,000-mile anniversary bonus, the $120 Global Entry/TSA PreCheck credit and lounge access.
122
+ - Not modeled (credits and perks, not miles per dollar) the 10,000-mile anniversary bonus, the $120 Global Entry/TSA PreCheck credit and lounge access.
97
123
  - The rates disclosure lists no foreign transaction fee in its fee table; the 0 comes from the card page's "Pay zero foreign transaction fees".
124
+ - "Capital One's terms say rewards aren't earned on the part of a purchase the travel credit pays for, but earnrate counts the card's rate on the whole purchase with the credit on top (an engine gap)."
@@ -38,10 +38,29 @@ rules:
38
38
  match: { merchants: [capital-one-entertainment] }
39
39
  rate: 5
40
40
  note: Tickets bought on the Capital One Entertainment ticketing platform only. Cardholder-exclusive pre-sales and tickets bought directly from Capital One Hall or Capital One Arena are excluded.
41
- # Not modeled on purpose: the $300 annual Capital One Travel credit, the
42
- # 10,000-mile anniversary bonus and the $120 Global Entry/TSA PreCheck credit.
41
+ # Not modeled on purpose: the 10,000-mile anniversary bonus and the $120
42
+ # Global Entry/TSA PreCheck credit.
43
43
  todo:
44
44
  - Neither the card page nor the rewards FAQ says whether Premier Collection and Lifestyle Collection hotel bookings earn the 10X Capital One Travel rate. Modeled as regular Capital One Travel hotels.
45
+ - "Capital One's terms say rewards aren't earned on the part of a purchase the travel credit pays for, but earnrate counts the card's rate on the whole purchase with the credit on top (an engine gap)."
46
+ # Merchant statement credits, on top of what the purchase earns.
47
+ credits:
48
+ - id: capital-one-travel
49
+ match:
50
+ {
51
+ merchants:
52
+ [
53
+ capital-one-travel,
54
+ capital-one-travel-hotels,
55
+ capital-one-travel-vacation-rentals,
56
+ capital-one-travel-car-rentals,
57
+ capital-one-travel-activities,
58
+ capital-one-travel-flights,
59
+ ],
60
+ }
61
+ amount: 300
62
+ period: cardmember_year
63
+ note: 'A credit in Capital One Travel, used at checkout and good until the next account anniversary. The part it pays for earns no miles.'
45
64
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
46
65
  evidence:
47
66
  - rule: base_rate
@@ -77,3 +96,12 @@ evidence:
77
96
  - rule: foreign_transaction_fee
78
97
  url: https://www.capitalone.com/credit-cards/venture-x/
79
98
  quote: 'No Foreign Transaction Fees'
99
+ - rule: capital-one-travel
100
+ url: https://disclosures.capitalone.com/disclosure.42201.en-US.html
101
+ quote: 'will receive a $300 Capital One Travel credit'
102
+ - rule: capital-one-travel
103
+ url: https://disclosures.capitalone.com/disclosure.42201.en-US.html
104
+ quote: 'Each annual Credit will expire on the next account open date anniversary.'
105
+ - rule: capital-one-travel
106
+ url: https://disclosures.capitalone.com/disclosure.42201.en-US.html
107
+ quote: 'Rewards will not be earned on the Credit.'
@@ -78,6 +78,14 @@ milestones:
78
78
  note: 'For the primary cardmember, for the rest of that calendar year and all of the next.'
79
79
  todo:
80
80
  - 'Through December 31, 2026, the cardmember page creditcards.chase.com/aircanada lists 500 bonus points for each $2,000 spent per calendar month, up to 1,500 a month (+0.25x on the first $6,000). It is not on the product page, and the engine picks one rule rather than stacking, so it is not modeled.'
81
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
82
+ # Merchant statement credits, on top of what the purchase earns.
83
+ credits:
84
+ - id: air-canada-credit
85
+ match: { merchants: [air-canada] }
86
+ amount: 50
87
+ period: half_year
88
+ note: 'Air Canada purchases, applied automatically: up to $50 from January through June and $50 from July through December.'
81
89
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
82
90
  evidence:
83
91
  - rule: base_rate
@@ -146,3 +154,9 @@ evidence:
146
154
  - rule: spend-75k
147
155
  url: https://creditcards.chase.com/travel-credit-cards/aircanada/aeroplan
148
156
  quote: 'Each calendar year you spend at least $75,000 in purchases on your Chase Air Canada Aeroplan Card account'
157
+ - rule: air-canada-credit
158
+ url: https://creditcards.chase.com/travel-credit-cards/aircanada/aeroplan
159
+ quote: 'up to a maximum accumulation of $50 in statement credits from January 1 through June 30'
160
+ - rule: air-canada-credit
161
+ url: https://creditcards.chase.com/travel-credit-cards/aircanada/aeroplan
162
+ quote: 'for qualifying Air Canada purchases made using your Chase Air Canada Aeroplan credit card'
@@ -56,6 +56,19 @@ milestones:
56
56
  rewards:
57
57
  - a free night at IHG hotels (up to 50,000 points)
58
58
  note: 'Use it within 12 months.'
59
+ # Merchant statement credits, on top of what the purchase earns.
60
+ credits:
61
+ - id: instacart
62
+ match: { merchants: [instacart] }
63
+ amount: 10
64
+ period: month
65
+ enroll: true
66
+ note: "Instacart credits, which need an active Instacart+ membership: activate Chase's complimentary one with the card. Through December 31, 2027."
67
+ - id: expensify
68
+ match: { merchants: [expensify] }
69
+ amount: 100
70
+ period: calendar_year
71
+ note: 'Bought directly from Expensify on expensify.com or in its app, applied automatically.'
59
72
  evidence:
60
73
  - rule: base_rate
61
74
  url: https://creditcards.chase.com/business-credit-cards/IHG/business
@@ -117,6 +130,19 @@ evidence:
117
130
  - rule: foreign_transaction_fee
118
131
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65355.html
119
132
  quote: 'Foreign Transactions None Penalty Fees'
133
+ - rule: instacart
134
+ url: https://creditcards.chase.com/business-credit-cards/IHG/business
135
+ quote: 'Receive a $10 Instacart credit monthly for purchases made directly through Instacart'
136
+ - rule: instacart
137
+ url: https://creditcards.chase.com/business-credit-cards/IHG/business
138
+ quote: 'Active Instacart+ membership is required to receive your $10 monthly credit.'
139
+ - rule: expensify
140
+ url: https://creditcards.chase.com/business-credit-cards/IHG/business
141
+ quote: 'up to a maximum accumulation of $100 in a calendar year'
142
+ - rule: expensify
143
+ url: https://creditcards.chase.com/business-credit-cards/IHG/business
144
+ quote: 'purchases made directly with Expensify through expensify.com and the Expensify app'
120
145
  todo:
121
146
  - "Starting January 1, 2027, $50,000 of purchases in a calendar year earns Diamond Elite status. It isn't listed as a milestone yet, because a milestone has no start date."
122
- - The $100 airline statement credit and the up to $100 yearly Expensify credit aren't modeled.
147
+ - The $100 airline statement credit (after $250 on flights bought directly each calendar year) isn't modeled.
148
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
@@ -48,6 +48,16 @@ milestones:
48
48
  rewards:
49
49
  - a free night at IHG hotels (up to 60,000 points)
50
50
  note: 'A second free night on top of the Anniversary Free Night; use it within 12 months.'
51
+ # Merchant statement credits, on top of what the purchase earns.
52
+ credits:
53
+ - id: instacart
54
+ match: { merchants: [instacart] }
55
+ amount: 10
56
+ period: month
57
+ enroll: true
58
+ note: "Instacart credits, which need an active Instacart+ membership: activate Chase's complimentary one with the card. Through December 31, 2027."
59
+ todo:
60
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
51
61
  evidence:
52
62
  - rule: base_rate
53
63
  url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier-select
@@ -91,3 +101,9 @@ evidence:
91
101
  - rule: foreign_transaction_fee
92
102
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65336.html
93
103
  quote: 'Foreign Transactions None Penalty Fees'
104
+ - rule: instacart
105
+ url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier-select
106
+ quote: 'Receive a $10 Instacart credit monthly for purchases made directly through Instacart'
107
+ - rule: instacart
108
+ url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier-select
109
+ quote: 'Active Instacart+ membership is required to receive your $10 monthly credit.'
@@ -52,6 +52,14 @@ milestones:
52
52
  rewards:
53
53
  - Diamond Elite status
54
54
  note: Status lasts through the end of the next calendar year.
55
+ # Merchant statement credits, on top of what the purchase earns.
56
+ credits:
57
+ - id: instacart
58
+ match: { merchants: [instacart] }
59
+ amount: 10
60
+ period: month
61
+ enroll: true
62
+ note: "Instacart credits, which need an active Instacart+ membership: activate Chase's complimentary one with the card. Through December 31, 2027."
55
63
  evidence:
56
64
  - rule: base_rate
57
65
  url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier
@@ -110,5 +118,12 @@ evidence:
110
118
  - rule: foreign_transaction_fee
111
119
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65294.html
112
120
  quote: 'Foreign Transactions None Penalty Fees'
121
+ - rule: instacart
122
+ url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier
123
+ quote: 'Receive a $10 Instacart credit monthly for purchases made directly through Instacart'
124
+ - rule: instacart
125
+ url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier
126
+ quote: 'Active Instacart+ membership is required to receive your $10 monthly credit.'
113
127
  todo:
114
128
  - The $100 airline statement credit (after $250 on flights bought directly each calendar year, through 12/31/27) isn't modeled.
129
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
@@ -63,6 +63,16 @@ rules:
63
63
  rate: 5
64
64
  valid_to: 2027-09-30
65
65
  note: Limited-time offer, for Lyft products bought in the Lyft app (rides, bikes and scooters, memberships). Not gift cards or car rentals.
66
+ # Merchant statement credits, on top of what the purchase earns.
67
+ credits:
68
+ - id: instacart
69
+ match: { merchants: [instacart] }
70
+ amount: 20
71
+ period: month
72
+ enroll: true
73
+ note: "Instacart credits in an Instacart Business account, which need an active Instacart+ membership: activate Chase's complimentary one with the card. Through December 31, 2027."
74
+ todo:
75
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
66
76
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
67
77
  evidence:
68
78
  - rule: base_rate
@@ -104,3 +114,6 @@ evidence:
104
114
  - rule: foreign_transaction_fee
105
115
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC63827.html
106
116
  quote: 'Foreign Transactions 3% of the amount of each transaction in U.S. dollars'
117
+ - rule: instacart
118
+ url: https://creditcards.chase.com/business-credit-cards/ink/cash
119
+ quote: 'Instacart+ members get a $20 Instacart credit each month automatically loaded into their Instacart Business Account'
@@ -36,8 +36,16 @@ rules:
36
36
  rate: 5
37
37
  valid_to: 2027-09-30
38
38
  note: Limited-time offer, a total of 5% on Lyft rides through September 30, 2027.
39
- # Not modeled: the complimentary three-month Instacart+ membership and its
40
- # monthly Instacart credit, which are benefits rather than earning rates.
39
+ # Merchant statement credits, on top of what the purchase earns.
40
+ credits:
41
+ - id: instacart
42
+ match: { merchants: [instacart] }
43
+ amount: 20
44
+ period: month
45
+ enroll: true
46
+ note: "Instacart credits in an Instacart Business account, which need an active Instacart+ membership: activate Chase's complimentary one with the card. Through December 31, 2027."
47
+ todo:
48
+ - "The issuer's terms don't say whether purchases a credit pays for earn rewards. Its credits are modeled as earning the card's rate on the whole purchase, with the credit on top."
41
49
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
42
50
  evidence:
43
51
  - rule: base_rate
@@ -67,3 +75,6 @@ evidence:
67
75
  - rule: foreign_transaction_fee
68
76
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC63749.html
69
77
  quote: 'Foreign Transactions 3% of the amount of each transaction in U.S. dollars'
78
+ - rule: instacart
79
+ url: https://creditcards.chase.com/business-credit-cards/ink/unlimited
80
+ quote: 'Instacart+ members get a $20 Instacart credit each month automatically loaded into their Instacart Business Account'