earnrate 0.2.12 → 0.2.13

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 (95) hide show
  1. package/README.md +20 -7
  2. package/data/CHANGELOG.md +181 -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 +27 -1
  9. package/data/cards/amex-delta-skymiles-platinum.yaml +33 -1
  10. package/data/cards/amex-delta-skymiles-reserve.yaml +33 -1
  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-platinum.yaml +110 -0
  17. package/data/cards/apple-card.yaml +76 -0
  18. package/data/cards/bilt-obsidian.yaml +12 -2
  19. package/data/cards/bilt-palladium.yaml +12 -2
  20. package/data/cards/caltech-efcu-platinum-mastercard.yaml +50 -0
  21. package/data/cards/capital-one-rei-co-op-mastercard.yaml +62 -0
  22. package/data/cards/capital-one-venture-x-business.yaml +28 -1
  23. package/data/cards/capital-one-venture-x.yaml +30 -2
  24. package/data/cards/chase-aeroplan.yaml +14 -0
  25. package/data/cards/chase-ihg-one-rewards-business.yaml +27 -1
  26. package/data/cards/chase-ihg-one-rewards-premier-select.yaml +16 -0
  27. package/data/cards/chase-ihg-one-rewards-premier.yaml +15 -0
  28. package/data/cards/chase-ink-business-cash.yaml +13 -0
  29. package/data/cards/chase-ink-business-unlimited.yaml +13 -2
  30. package/data/cards/chase-sapphire-preferred.yaml +11 -0
  31. package/data/cards/chase-sapphire-reserve.yaml +44 -4
  32. package/data/cards/chase-united-business.yaml +32 -0
  33. package/data/cards/chase-united-club-business.yaml +40 -0
  34. package/data/cards/chase-united-club.yaml +40 -0
  35. package/data/cards/chase-united-explorer.yaml +32 -0
  36. package/data/cards/chase-united-quest.yaml +40 -0
  37. package/data/cards/citi-aadvantage-executive.yaml +26 -1
  38. package/data/cards/citi-strata-elite.yaml +20 -1
  39. package/data/cards/fidelity-rewards-visa-signature.yaml +60 -0
  40. package/data/cards/navy-federal-cash-rewards-plus.yaml +61 -0
  41. package/data/cards/navy-federal-cash-rewards.yaml +60 -0
  42. package/data/cards/navy-federal-more-rewards-amex.yaml +92 -0
  43. package/data/cards/paypal-cashback-mastercard.yaml +13 -2
  44. package/data/cards/penfed-power-cash-rewards.yaml +47 -0
  45. package/data/cards/usbank-altitude-connect.yaml +8 -2
  46. package/data/cards/usbank-altitude-go.yaml +8 -2
  47. package/data/cards/usbank-smartly.yaml +107 -0
  48. package/data/cards/venmo-credit-card.yaml +151 -0
  49. package/data/cards/verizon-visa-card.yaml +122 -0
  50. package/data/currencies.yaml +14 -0
  51. package/data/issuers.yaml +22 -0
  52. package/data/memberships.yaml +35 -0
  53. package/data/merchants/overrides.yaml +448 -0
  54. package/data/merchants/seed.yaml +1082 -65
  55. package/dist/cli/args.js +18 -0
  56. package/dist/cli/explore.js +10 -1
  57. package/dist/cli/run.js +4 -1
  58. package/dist/cli/wallet.js +30 -3
  59. package/dist/data/file-store.js +5 -2
  60. package/dist/data/integrity.js +22 -0
  61. package/dist/data/store.js +4 -1
  62. package/dist/data/wallet-edit.js +25 -6
  63. package/dist/engine/cheat-sheet.js +17 -5
  64. package/dist/engine/checklist.js +25 -4
  65. package/dist/engine/credits.js +65 -0
  66. package/dist/engine/evaluate.js +38 -11
  67. package/dist/engine/explore.js +70 -7
  68. package/dist/engine/offers.js +2 -1
  69. package/dist/engine/periods.js +10 -3
  70. package/dist/engine/recommend.js +72 -20
  71. package/dist/engine/record.js +41 -1
  72. package/dist/engine/rotation.js +3 -0
  73. package/dist/engine/rule-text.js +14 -3
  74. package/dist/engine/setup.js +15 -4
  75. package/dist/engine/simulate.js +10 -1
  76. package/dist/engine/text.js +84 -0
  77. package/dist/engine/wallet-change.js +37 -1
  78. package/dist/engine/wallet-summary.js +32 -4
  79. package/dist/format/card-text.js +4 -3
  80. package/dist/format/cheat-sheet.js +2 -0
  81. package/dist/format/explore.js +20 -4
  82. package/dist/format/recommendation.js +6 -2
  83. package/dist/format/wallet.js +6 -2
  84. package/dist/import/analyze.js +7 -2
  85. package/dist/mcp/inputs.js +10 -0
  86. package/dist/mcp/prompts.js +9 -1
  87. package/dist/mcp/schemas.js +70 -1
  88. package/dist/mcp/tools/answers.js +9 -4
  89. package/dist/mcp/tools/wallet.js +15 -7
  90. package/dist/merchants/resolve.js +8 -0
  91. package/dist/schema/card.js +37 -3
  92. package/dist/schema/common.js +1 -1
  93. package/dist/schema/merchant.js +3 -0
  94. package/dist/schema/wallet.js +8 -0
  95. package/package.json +1 -1
@@ -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'
@@ -83,6 +83,13 @@ rules:
83
83
  match: { categories: [transit] }
84
84
  rate: 2
85
85
  note: Chase's travel category includes passenger trains, buses, taxis, ferries, tolls and parking. Rideshare codes as a taxi.
86
+ # Merchant statement credits, on top of what the purchase earns.
87
+ credits:
88
+ - id: chase-travel-hotels
89
+ match: { merchants: [chase-travel] }
90
+ amount: 100
91
+ period: cardmember_year
92
+ note: 'Hotel stays bought through Chase Travel only, applied automatically.'
86
93
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
87
94
  evidence:
88
95
  - rule: base_rate
@@ -145,5 +152,9 @@ evidence:
145
152
  - rule: foreign_transaction_fee
146
153
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65222.html
147
154
  quote: 'Foreign Transactions None Penalty Fees'
155
+ - rule: chase-travel-hotels
156
+ url: https://creditcards.chase.com/rewards-credit-cards/sapphire/preferred
157
+ quote: 'Earn up to $100 in statement credits each account anniversary year for hotel stays purchased through Chase Travel'
148
158
  todo:
149
159
  - "peloton: the $5,000 limit runs across the whole offer (4/1/2025 to 12/31/2027), which no cap period can express, and the $150 minimum per purchase isn't modeled."
160
+ - "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."
@@ -18,10 +18,10 @@ welcome_offer:
18
18
  spend: 6000
19
19
  months: 3
20
20
  note: 'Chase: "This credit card is unavailable to you if you currently have this card open. The new cardmember bonus may not be available to you if you previously held this card or received a new cardmember bonus for this card." Chase may also weigh how many cards you''ve opened and closed.'
21
- # Not modeled on purpose: the $300 travel credit, The Edit credit, dining,
22
- # StubHub, Lyft and Peloton statement credits, and the $75,000-spend benefits.
23
- # They're credits or perks, not earn rates. Purchases covered by the travel
24
- # credit or The Edit credit earn no points.
21
+ # Not modeled: The Edit credit (per booking), the Exclusive Tables dining
22
+ # credit (restaurants in an OpenTable program), DoorDash promos and the
23
+ # $75,000-spend benefits. Purchases covered by the travel credit or The Edit
24
+ # credit earn no points.
25
25
  rules:
26
26
  - id: chase-travel
27
27
  match: { merchants: [chase-travel] }
@@ -58,6 +58,30 @@ milestones:
58
58
  - up to $500 in Southwest credits on Chase Travel
59
59
  - up to $250 in credits at The Shops at Chase
60
60
  note: 'For the primary cardmember. Each lasts the rest of that calendar year and all of the next (Explorist through the following February). A-List needs your Rapid Rewards number linked on Chase.com.'
61
+ # Merchant statement credits, on top of what the purchase earns.
62
+ credits:
63
+ - id: travel
64
+ match: { categories: [travel] }
65
+ amount: 300
66
+ period: cardmember_year
67
+ note: "Anything in Chase's travel category, applied automatically; earnrate matches its travel purchases, not the trains, buses, taxis, tolls and parking Chase also counts. The purchases it covers earn no points. The year runs from the account anniversary (Chase counts to the first statement after it)."
68
+ - id: stubhub
69
+ match: { merchants: [stubhub, viagogo] }
70
+ amount: 150
71
+ period: half_year
72
+ enroll: true
73
+ note: 'StubHub and viagogo, through December 31, 2027. Activate once on chase.com.'
74
+ - id: lyft-credit
75
+ match: { merchants: [lyft] }
76
+ amount: 10
77
+ period: month
78
+ note: 'A $10 Lyft credit in the app each month, through September 30, 2027, once the card is added to Lyft. Rides only, not memberships, fees, tips or taxes.'
79
+ - id: peloton-credit
80
+ match: { merchants: [peloton-membership] }
81
+ amount: 10
82
+ period: month
83
+ enroll: true
84
+ note: 'Peloton memberships (All-Access, Rental, App+, Guide, App One, Strength+), through December 31, 2027. Activate once on chase.com.'
61
85
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
62
86
  evidence:
63
87
  - rule: base_rate
@@ -126,5 +150,21 @@ evidence:
126
150
  - rule: spend-75k
127
151
  url: https://creditcards.chase.com/rewards-credit-cards/sapphire/reserve
128
152
  quote: '$75,000 Spend Benefit – $250 Credit for The Shops at Chase'
153
+ - rule: travel
154
+ url: https://creditcards.chase.com/rewards-credit-cards/sapphire/reserve
155
+ quote: 'A statement credit will be automatically applied to your account for purchases made in the travel category'
156
+ - rule: travel
157
+ url: https://creditcards.chase.com/rewards-credit-cards/sapphire/reserve
158
+ quote: 'any purchases that qualify for the $300 Annual Travel Credit'
159
+ - rule: stubhub
160
+ url: https://creditcards.chase.com/rewards-credit-cards/sapphire/reserve
161
+ quote: 'with StubHub and viagogo up to a maximum accumulation of $150 in statement credits'
162
+ - rule: lyft-credit
163
+ url: https://creditcards.chase.com/rewards-credit-cards/sapphire/reserve
164
+ quote: 'will receive a $10 Lyft credit each calendar month through 9/30/2027'
165
+ - rule: peloton-credit
166
+ url: https://creditcards.chase.com/rewards-credit-cards/sapphire/reserve
167
+ quote: 'qualifying Peloton Membership purchases up to a monthly maximum of $10'
129
168
  todo:
130
169
  - "peloton: the $5,000 limit runs across the whole offer (4/1/2025 to 12/31/2027), which no cap period can express, and the $150 minimum per purchase isn't modeled."
170
+ - "Chase's terms say purchases the $300 travel credit covers earn no points, but earnrate counts the card's rate on the whole purchase with the credit on top (an engine gap). For its other credits the terms don't say, and they're modeled the same way."
@@ -49,6 +49,26 @@ milestones:
49
49
  note: 'For the primary cardmember, on tickets bought with the card. Chase says to allow 6-8 weeks for them to post; use them within 12 months.'
50
50
  todo:
51
51
  - United Card Events from Chase also earn 2x; no merchant exists for them, so they aren't modeled.
52
+ - "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."
53
+ # Merchant statement credits, on top of what the purchase earns.
54
+ credits:
55
+ - id: instacart
56
+ match: { merchants: [instacart] }
57
+ amount: 10
58
+ period: month
59
+ enroll: true
60
+ note: "Instacart credits, which need an active Instacart+ membership: activate Chase's complimentary one with the card. Through December 31, 2027."
61
+ - id: rideshare
62
+ match: { categories: [transit.rideshare] }
63
+ amount: 8
64
+ period: month
65
+ enroll: true
66
+ note: 'Rideshare rides. Opt in each year. December allows $12 (modeled at $8).'
67
+ - id: jsx
68
+ match: { merchants: [jsx] }
69
+ amount: 100
70
+ period: cardmember_year
71
+ note: 'Flights booked directly with JSX.'
52
72
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
53
73
  evidence:
54
74
  - rule: annual_fee
@@ -99,3 +119,15 @@ evidence:
99
119
  - rule: spend-25k
100
120
  url: https://creditcards.chase.com/business-credit-cards/united/united-business-card
101
121
  quote: 'Earn 2 continental U.S. Economy Plus® seat upgrades after spending $25,000 each calendar year.'
122
+ - rule: instacart
123
+ url: https://creditcards.chase.com/business-credit-cards/united/united-business-card
124
+ quote: 'you can receive one $10 credit in your Instacart account each month'
125
+ - rule: rideshare
126
+ url: https://creditcards.chase.com/business-credit-cards/united/united-business-card
127
+ quote: 'up to $8 back as a statement credit each month from January through November'
128
+ - rule: rideshare
129
+ url: https://creditcards.chase.com/business-credit-cards/united/united-business-card
130
+ quote: 'Yearly opt-in is required.'
131
+ - rule: jsx
132
+ url: https://creditcards.chase.com/business-credit-cards/united/united-business-card
133
+ quote: 'Get up to $100 back as a statement credit each anniversary year when you book flights directly with JSX'
@@ -42,6 +42,31 @@ milestones:
42
42
  note: 'Premier Gold status unlocks it too. It lasts the rest of that calendar year and all of the next.'
43
43
  todo:
44
44
  - United Card Events from Chase also earn 2x; no merchant exists for them, so they aren't modeled.
45
+ - "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."
46
+ # Merchant statement credits, on top of what the purchase earns.
47
+ credits:
48
+ - id: instacart
49
+ match: { merchants: [instacart] }
50
+ amount: 20
51
+ period: month
52
+ enroll: true
53
+ note: "Instacart credits, which need an active Instacart+ membership: activate Chase's complimentary one with the card. Through December 31, 2027. Each credit applies to one order."
54
+ - id: rideshare
55
+ match: { categories: [transit.rideshare] }
56
+ amount: 12
57
+ period: month
58
+ enroll: true
59
+ note: 'Rideshare rides. Opt in each year. December allows $18 (modeled at $12).'
60
+ - id: jsx
61
+ match: { merchants: [jsx] }
62
+ amount: 200
63
+ period: cardmember_year
64
+ note: 'Flights booked directly with JSX.'
65
+ - id: renowned-hotels-credit
66
+ match: { merchants: [renowned-hotels-chase-travel] }
67
+ amount: 200
68
+ period: cardmember_year
69
+ note: 'Hotel stays prepaid through Renowned Hotels and Resorts for United cardmembers.'
45
70
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
46
71
  evidence:
47
72
  - rule: annual_fee
@@ -77,3 +102,18 @@ evidence:
77
102
  - rule: spend-50k
78
103
  url: https://creditcards.chase.com/business-credit-cards/united/united-club-business
79
104
  quote: 'Receive United Club All Access Membership after spending $50,000 in a calendar year'
105
+ - rule: instacart
106
+ url: https://creditcards.chase.com/business-credit-cards/united/united-club-business
107
+ quote: 'you can receive two (2) $10 credits in your Instacart account each month'
108
+ - rule: rideshare
109
+ url: https://creditcards.chase.com/business-credit-cards/united/united-club-business
110
+ quote: 'up to $12 back as a statement credit each month from January through November'
111
+ - rule: rideshare
112
+ url: https://creditcards.chase.com/business-credit-cards/united/united-club-business
113
+ quote: 'Yearly opt-in is required.'
114
+ - rule: jsx
115
+ url: https://creditcards.chase.com/business-credit-cards/united/united-club-business
116
+ quote: 'Get up to $200 back as a statement credit each anniversary year when you book flights directly with JSX'
117
+ - rule: renowned-hotels-credit
118
+ url: https://creditcards.chase.com/business-credit-cards/united/united-club-business
119
+ quote: 'Receive up to $200 back in statement credits each anniversary year on hotel accommodations'