earnrate 0.2.11 → 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 (158) hide show
  1. package/README.md +37 -12
  2. package/data/CHANGELOG.md +291 -0
  3. package/data/VERSION +1 -1
  4. package/data/cards/amex-blue-business-plus.yaml +1 -0
  5. package/data/cards/amex-blue-cash-everyday.yaml +29 -2
  6. package/data/cards/amex-blue-cash-preferred.yaml +26 -0
  7. package/data/cards/amex-business-gold.yaml +169 -0
  8. package/data/cards/amex-business-platinum.yaml +184 -0
  9. package/data/cards/amex-delta-skymiles-blue.yaml +91 -0
  10. package/data/cards/amex-delta-skymiles-gold.yaml +29 -1
  11. package/data/cards/amex-delta-skymiles-platinum.yaml +35 -1
  12. package/data/cards/amex-delta-skymiles-reserve.yaml +35 -1
  13. package/data/cards/amex-gold.yaml +53 -0
  14. package/data/cards/amex-hilton-honors-aspire.yaml +25 -1
  15. package/data/cards/amex-hilton-honors-business.yaml +106 -0
  16. package/data/cards/amex-hilton-honors-surpass.yaml +16 -1
  17. package/data/cards/amex-hilton-honors.yaml +2 -0
  18. package/data/cards/amex-marriott-bonvoy-bevy.yaml +2 -0
  19. package/data/cards/amex-marriott-bonvoy-brilliant.yaml +17 -1
  20. package/data/cards/amex-marriott-bonvoy-business.yaml +116 -0
  21. package/data/cards/amex-platinum.yaml +111 -0
  22. package/data/cards/apple-card.yaml +76 -0
  23. package/data/cards/bank-of-america-atmos-rewards-ascent.yaml +1 -0
  24. package/data/cards/bank-of-america-atmos-rewards-business.yaml +2 -0
  25. package/data/cards/bank-of-america-atmos-rewards-summit.yaml +1 -0
  26. package/data/cards/bank-of-america-customized-cash-rewards.yaml +34 -1
  27. package/data/cards/bank-of-america-premium-rewards.yaml +134 -0
  28. package/data/cards/bank-of-america-travel-rewards.yaml +123 -0
  29. package/data/cards/bank-of-america-unlimited-cash-rewards.yaml +83 -0
  30. package/data/cards/barclays-jetblue-plus.yaml +86 -0
  31. package/data/cards/bilt-blue.yaml +60 -0
  32. package/data/cards/bilt-obsidian.yaml +13 -2
  33. package/data/cards/bilt-palladium.yaml +86 -0
  34. package/data/cards/caltech-efcu-platinum-mastercard.yaml +50 -0
  35. package/data/cards/capital-one-kohls-card.yaml +1 -0
  36. package/data/cards/capital-one-kohls-rewards-visa.yaml +1 -0
  37. package/data/cards/capital-one-quicksilver.yaml +2 -0
  38. package/data/cards/capital-one-rei-co-op-mastercard.yaml +62 -0
  39. package/data/cards/capital-one-savor.yaml +2 -0
  40. package/data/cards/capital-one-spark-cash-plus.yaml +80 -0
  41. package/data/cards/capital-one-venture-x-business.yaml +124 -0
  42. package/data/cards/capital-one-venture-x.yaml +32 -2
  43. package/data/cards/capital-one-venture.yaml +2 -0
  44. package/data/cards/chase-aeroplan.yaml +16 -0
  45. package/data/cards/chase-freedom-flex.yaml +1 -0
  46. package/data/cards/chase-freedom-rise.yaml +29 -0
  47. package/data/cards/chase-freedom-unlimited.yaml +1 -0
  48. package/data/cards/chase-ihg-one-rewards-business.yaml +28 -1
  49. package/data/cards/chase-ihg-one-rewards-premier-select.yaml +18 -0
  50. package/data/cards/chase-ihg-one-rewards-premier.yaml +16 -0
  51. package/data/cards/chase-ihg-one-rewards.yaml +1 -0
  52. package/data/cards/chase-ink-business-cash.yaml +14 -0
  53. package/data/cards/chase-ink-business-preferred.yaml +1 -0
  54. package/data/cards/chase-ink-business-unlimited.yaml +80 -0
  55. package/data/cards/chase-marriott-bonvoy-bold.yaml +1 -0
  56. package/data/cards/chase-marriott-bonvoy-boundless.yaml +2 -0
  57. package/data/cards/chase-prime-visa.yaml +1 -0
  58. package/data/cards/chase-sapphire-preferred.yaml +12 -0
  59. package/data/cards/chase-sapphire-reserve.yaml +45 -4
  60. package/data/cards/chase-southwest-performance-business.yaml +2 -0
  61. package/data/cards/chase-southwest-plus.yaml +2 -0
  62. package/data/cards/chase-southwest-premier-business.yaml +2 -0
  63. package/data/cards/chase-southwest-premier.yaml +2 -0
  64. package/data/cards/chase-southwest-priority.yaml +2 -0
  65. package/data/cards/chase-united-business.yaml +33 -0
  66. package/data/cards/chase-united-club-business.yaml +41 -0
  67. package/data/cards/chase-united-club.yaml +41 -0
  68. package/data/cards/chase-united-explorer.yaml +33 -0
  69. package/data/cards/chase-united-gateway.yaml +1 -0
  70. package/data/cards/chase-united-quest.yaml +41 -0
  71. package/data/cards/citi-aadvantage-business.yaml +2 -0
  72. package/data/cards/citi-aadvantage-executive.yaml +28 -1
  73. package/data/cards/citi-aadvantage-globe.yaml +2 -0
  74. package/data/cards/citi-aadvantage-mileup.yaml +2 -0
  75. package/data/cards/citi-aadvantage-platinum-select.yaml +2 -0
  76. package/data/cards/citi-costco-anywhere-visa-business.yaml +2 -0
  77. package/data/cards/citi-costco-anywhere-visa.yaml +2 -0
  78. package/data/cards/citi-custom-cash.yaml +1 -0
  79. package/data/cards/citi-double-cash.yaml +1 -0
  80. package/data/cards/citi-my-best-buy-visa.yaml +1 -0
  81. package/data/cards/citi-strata-elite.yaml +21 -1
  82. package/data/cards/citi-strata-premier.yaml +1 -0
  83. package/data/cards/citi-strata.yaml +164 -0
  84. package/data/cards/discover-it-cash-back.yaml +22 -3
  85. package/data/cards/fidelity-rewards-visa-signature.yaml +60 -0
  86. package/data/cards/navy-federal-cash-rewards-plus.yaml +61 -0
  87. package/data/cards/navy-federal-cash-rewards.yaml +60 -0
  88. package/data/cards/navy-federal-more-rewards-amex.yaml +92 -0
  89. package/data/cards/paypal-cashback-mastercard.yaml +52 -0
  90. package/data/cards/penfed-power-cash-rewards.yaml +47 -0
  91. package/data/cards/sams-club-mastercard.yaml +68 -0
  92. package/data/cards/sofi-unlimited-2.yaml +1 -0
  93. package/data/cards/td-bank-nordstrom-credit-card.yaml +1 -0
  94. package/data/cards/td-bank-nordstrom-visa.yaml +1 -0
  95. package/data/cards/td-bank-target-circle-card.yaml +1 -0
  96. package/data/cards/usbank-altitude-connect.yaml +156 -0
  97. package/data/cards/usbank-altitude-go.yaml +124 -0
  98. package/data/cards/usbank-cash-plus.yaml +1 -0
  99. package/data/cards/usbank-smartly.yaml +107 -0
  100. package/data/cards/venmo-credit-card.yaml +151 -0
  101. package/data/cards/verizon-visa-card.yaml +122 -0
  102. package/data/cards/wells-fargo-active-cash.yaml +1 -0
  103. package/data/cards/wells-fargo-autograph-journey.yaml +73 -0
  104. package/data/cards/wells-fargo-autograph.yaml +1 -0
  105. package/data/categories.yaml +3 -1
  106. package/data/currencies.yaml +48 -0
  107. package/data/issuers.yaml +44 -1
  108. package/data/memberships.yaml +45 -0
  109. package/data/merchants/overrides.yaml +947 -1
  110. package/data/merchants/seed.yaml +1916 -62
  111. package/dist/cli/args.js +18 -0
  112. package/dist/cli/explore.js +10 -1
  113. package/dist/cli/import.js +2 -2
  114. package/dist/cli/run.js +4 -1
  115. package/dist/cli/wallet.js +37 -3
  116. package/dist/data/file-store.js +5 -2
  117. package/dist/data/integrity.js +59 -0
  118. package/dist/data/store.js +4 -1
  119. package/dist/data/wallet-edit.js +28 -7
  120. package/dist/engine/cheat-sheet.js +17 -5
  121. package/dist/engine/checklist.js +38 -6
  122. package/dist/engine/credits.js +65 -0
  123. package/dist/engine/evaluate.js +57 -18
  124. package/dist/engine/explore.js +70 -7
  125. package/dist/engine/intro.js +36 -0
  126. package/dist/engine/offers.js +2 -1
  127. package/dist/engine/periods.js +10 -3
  128. package/dist/engine/recommend.js +101 -20
  129. package/dist/engine/record.js +43 -1
  130. package/dist/engine/rotation.js +3 -0
  131. package/dist/engine/rule-text.js +28 -3
  132. package/dist/engine/setup.js +20 -3
  133. package/dist/engine/simulate.js +10 -1
  134. package/dist/engine/text.js +107 -0
  135. package/dist/engine/wallet-change.js +57 -4
  136. package/dist/engine/wallet-summary.js +54 -6
  137. package/dist/format/card-art.js +21 -0
  138. package/dist/format/card-text.js +4 -3
  139. package/dist/format/cards.js +1 -0
  140. package/dist/format/cheat-sheet.js +2 -0
  141. package/dist/format/explore.js +20 -4
  142. package/dist/format/recommendation.js +6 -2
  143. package/dist/format/wallet-yaml.js +1 -0
  144. package/dist/format/wallet.js +15 -5
  145. package/dist/import/analyze.js +8 -2
  146. package/dist/mcp/inputs.js +13 -0
  147. package/dist/mcp/prompts.js +9 -1
  148. package/dist/mcp/schemas.js +87 -1
  149. package/dist/mcp/tools/account.js +3 -1
  150. package/dist/mcp/tools/answers.js +9 -4
  151. package/dist/mcp/tools/wallet.js +20 -8
  152. package/dist/merchants/resolve.js +8 -0
  153. package/dist/schema/card.js +60 -3
  154. package/dist/schema/common.js +1 -1
  155. package/dist/schema/issuer.js +4 -0
  156. package/dist/schema/merchant.js +3 -0
  157. package/dist/schema/wallet.js +11 -0
  158. package/package.json +12 -3
@@ -1,5 +1,6 @@
1
1
  id: chase-ihg-one-rewards-business
2
2
  name: IHG One Rewards Business Credit Card
3
+ color: '#2c2c2c'
3
4
  issuer: chase
4
5
  network: mastercard
5
6
  currency: ihg-points
@@ -55,6 +56,19 @@ milestones:
55
56
  rewards:
56
57
  - a free night at IHG hotels (up to 50,000 points)
57
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.'
58
72
  evidence:
59
73
  - rule: base_rate
60
74
  url: https://creditcards.chase.com/business-credit-cards/IHG/business
@@ -116,6 +130,19 @@ evidence:
116
130
  - rule: foreign_transaction_fee
117
131
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65355.html
118
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'
119
145
  todo:
120
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."
121
- - 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."
@@ -1,5 +1,7 @@
1
1
  id: chase-ihg-one-rewards-premier-select
2
2
  name: IHG One Rewards Premier Select Credit Card
3
+ short_name: IHG Premier Select
4
+ color: '#2f4f6f'
3
5
  issuer: chase
4
6
  network: mastercard
5
7
  currency: ihg-points
@@ -46,6 +48,16 @@ milestones:
46
48
  rewards:
47
49
  - a free night at IHG hotels (up to 60,000 points)
48
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."
49
61
  evidence:
50
62
  - rule: base_rate
51
63
  url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier-select
@@ -89,3 +101,9 @@ evidence:
89
101
  - rule: foreign_transaction_fee
90
102
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65336.html
91
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.'
@@ -1,5 +1,6 @@
1
1
  id: chase-ihg-one-rewards-premier
2
2
  name: IHG One Rewards Premier Credit Card
3
+ color: '#1f2b3a'
3
4
  issuer: chase
4
5
  network: mastercard
5
6
  currency: ihg-points
@@ -51,6 +52,14 @@ milestones:
51
52
  rewards:
52
53
  - Diamond Elite status
53
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."
54
63
  evidence:
55
64
  - rule: base_rate
56
65
  url: https://creditcards.chase.com/travel-credit-cards/ihg-rewards-club/premier
@@ -109,5 +118,12 @@ evidence:
109
118
  - rule: foreign_transaction_fee
110
119
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65294.html
111
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.'
112
127
  todo:
113
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."
@@ -1,5 +1,6 @@
1
1
  id: chase-ihg-one-rewards
2
2
  name: IHG One Rewards Credit Card
3
+ color: '#3f5f7f'
3
4
  issuer: chase
4
5
  network: mastercard
5
6
  currency: ihg-points
@@ -1,5 +1,6 @@
1
1
  id: chase-ink-business-cash
2
2
  name: Ink Business Cash
3
+ color: '#33393f'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: cash
@@ -62,6 +63,16 @@ rules:
62
63
  rate: 5
63
64
  valid_to: 2027-09-30
64
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."
65
76
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
66
77
  evidence:
67
78
  - rule: base_rate
@@ -103,3 +114,6 @@ evidence:
103
114
  - rule: foreign_transaction_fee
104
115
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC63827.html
105
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'
@@ -1,5 +1,6 @@
1
1
  id: chase-ink-business-preferred
2
2
  name: Ink Business Preferred
3
+ color: '#1f2328'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: UR
@@ -0,0 +1,80 @@
1
+ id: chase-ink-business-unlimited
2
+ name: Ink Business Unlimited
3
+ color: '#4a5560'
4
+ issuer: chase
5
+ # The pricing and terms say "By becoming a Visa Business Card cardmember".
6
+ network: visa
7
+ currency: cash
8
+ last_verified: 2026-11-04
9
+ verified_by: claude
10
+ source_urls:
11
+ - https://creditcards.chase.com/business-credit-cards/ink/unlimited
12
+ - https://www.chase.com/personal/credit-cards/education/rewards-benefits/how-to-combine-chase-credit-card-points-in-household
13
+ - https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC63749.html
14
+ base_rate: 1.5
15
+ business: true
16
+ annual_fee: 0
17
+ foreign_transaction_fee: 3
18
+ welcome_offer:
19
+ dollars: 750
20
+ spend: 6000
21
+ months: 3
22
+ note: 'Chase: "The new cardmember bonus may not be available to you if you have ever had this card or any other Chase for Business card without an annual fee." Chase may also consider factors about your business.'
23
+ # Its cash back is earned as Ultimate Rewards points, which Chase lets you
24
+ # move to another Ultimate Rewards card on your account.
25
+ pools_into:
26
+ currency: UR
27
+ when_wallet_has:
28
+ [
29
+ chase-sapphire-preferred,
30
+ chase-sapphire-reserve,
31
+ chase-ink-business-preferred,
32
+ ]
33
+ rules:
34
+ - id: lyft
35
+ match: { merchants: [lyft] }
36
+ rate: 5
37
+ valid_to: 2027-09-30
38
+ note: Limited-time offer, a total of 5% on Lyft rides through September 30, 2027.
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."
49
+ # Issuer text backing each rule; `yarn check-sources` checks it weekly.
50
+ evidence:
51
+ - rule: base_rate
52
+ url: https://creditcards.chase.com/business-credit-cards/ink/unlimited
53
+ quote: 'Earn unlimited 1.5% Cash Back rewards on every purchase made for your business.'
54
+ - rule: lyft
55
+ url: https://creditcards.chase.com/business-credit-cards/ink/unlimited
56
+ quote: 'Earn a total of 5% cash back on Lyft rides through September 30, 2027'
57
+ - rule: pools_into
58
+ url: https://creditcards.chase.com/business-credit-cards/ink/unlimited
59
+ quote: 'Redeem your rewards for cash back, gift cards, travel and more through Chase Ultimate Rewards'
60
+ - rule: pools_into
61
+ url: https://www.chase.com/personal/credit-cards/education/rewards-benefits/how-to-combine-chase-credit-card-points-in-household
62
+ quote: 'You can combine points from one Chase card to another Chase card on your account'
63
+ - rule: annual_fee
64
+ url: https://creditcards.chase.com/business-credit-cards/ink/unlimited
65
+ quote: 'ANNUAL FEE $0'
66
+ - rule: annual_fee
67
+ url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC63749.html
68
+ quote: 'Annual Membership Fee None'
69
+ - rule: welcome_offer
70
+ url: https://creditcards.chase.com/business-credit-cards/ink/unlimited
71
+ quote: 'after you spend $6,000 on purchases in the first 3 months after account opening'
72
+ - rule: welcome_offer
73
+ url: https://creditcards.chase.com/business-credit-cards/ink/unlimited
74
+ quote: 'Earn $750 cash back'
75
+ - rule: foreign_transaction_fee
76
+ url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC63749.html
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'
@@ -1,5 +1,6 @@
1
1
  id: chase-marriott-bonvoy-bold
2
2
  name: Marriott Bonvoy Bold Credit Card
3
+ color: '#4b5a6a'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: marriott-bonvoy
@@ -1,5 +1,7 @@
1
1
  id: chase-marriott-bonvoy-boundless
2
2
  name: Marriott Bonvoy Boundless Credit Card
3
+ short_name: Bonvoy Boundless
4
+ color: '#2e3742'
3
5
  issuer: chase
4
6
  network: visa
5
7
  currency: marriott-bonvoy
@@ -1,5 +1,6 @@
1
1
  id: chase-prime-visa
2
2
  name: Prime Visa
3
+ color: '#24384f'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: cash
@@ -1,5 +1,6 @@
1
1
  id: chase-sapphire-preferred
2
2
  name: Chase Sapphire Preferred Card
3
+ color: '#1f4f9c'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: UR
@@ -82,6 +83,13 @@ rules:
82
83
  match: { categories: [transit] }
83
84
  rate: 2
84
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.'
85
93
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
86
94
  evidence:
87
95
  - rule: base_rate
@@ -144,5 +152,9 @@ evidence:
144
152
  - rule: foreign_transaction_fee
145
153
  url: https://sites.chase.com/services/creatives/pricingandterms.html/content/dam/pricingandterms/LGC65222.html
146
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'
147
158
  todo:
148
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."
@@ -1,5 +1,6 @@
1
1
  id: chase-sapphire-reserve
2
2
  name: Chase Sapphire Reserve
3
+ color: '#1b2a44'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: UR
@@ -17,10 +18,10 @@ welcome_offer:
17
18
  spend: 6000
18
19
  months: 3
19
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.'
20
- # Not modeled on purpose: the $300 travel credit, The Edit credit, dining,
21
- # StubHub, Lyft and Peloton statement credits, and the $75,000-spend benefits.
22
- # They're credits or perks, not earn rates. Purchases covered by the travel
23
- # 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.
24
25
  rules:
25
26
  - id: chase-travel
26
27
  match: { merchants: [chase-travel] }
@@ -57,6 +58,30 @@ milestones:
57
58
  - up to $500 in Southwest credits on Chase Travel
58
59
  - up to $250 in credits at The Shops at Chase
59
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.'
60
85
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
61
86
  evidence:
62
87
  - rule: base_rate
@@ -125,5 +150,21 @@ evidence:
125
150
  - rule: spend-75k
126
151
  url: https://creditcards.chase.com/rewards-credit-cards/sapphire/reserve
127
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'
128
168
  todo:
129
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."
@@ -1,5 +1,7 @@
1
1
  id: chase-southwest-performance-business
2
2
  name: Southwest Rapid Rewards Performance Business Credit Card
3
+ short_name: Southwest Performance
4
+ color: '#2b3a67'
3
5
  issuer: chase
4
6
  network: visa
5
7
  currency: southwest-rapid-rewards
@@ -1,5 +1,7 @@
1
1
  id: chase-southwest-plus
2
2
  name: Southwest Rapid Rewards Plus Credit Card
3
+ short_name: Southwest Plus
4
+ color: '#3c6fc4'
3
5
  issuer: chase
4
6
  network: visa
5
7
  currency: southwest-rapid-rewards
@@ -1,5 +1,7 @@
1
1
  id: chase-southwest-premier-business
2
2
  name: Southwest Rapid Rewards Premier Business Credit Card
3
+ short_name: Southwest Premier Biz
4
+ color: '#2d4b9a'
3
5
  issuer: chase
4
6
  network: visa
5
7
  currency: southwest-rapid-rewards
@@ -1,5 +1,7 @@
1
1
  id: chase-southwest-premier
2
2
  name: Southwest Rapid Rewards Premier Credit Card
3
+ short_name: Southwest Premier
4
+ color: '#304cb2'
3
5
  issuer: chase
4
6
  network: visa
5
7
  currency: southwest-rapid-rewards
@@ -1,5 +1,7 @@
1
1
  id: chase-southwest-priority
2
2
  name: Southwest Rapid Rewards Priority Credit Card
3
+ short_name: Southwest Priority
4
+ color: '#1e2f5e'
3
5
  issuer: chase
4
6
  network: visa
5
7
  currency: southwest-rapid-rewards
@@ -1,5 +1,6 @@
1
1
  id: chase-united-business
2
2
  name: United Business Card
3
+ color: '#1f3f77'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: united-miles
@@ -48,6 +49,26 @@ milestones:
48
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.'
49
50
  todo:
50
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.'
51
72
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
52
73
  evidence:
53
74
  - rule: annual_fee
@@ -98,3 +119,15 @@ evidence:
98
119
  - rule: spend-25k
99
120
  url: https://creditcards.chase.com/business-credit-cards/united/united-business-card
100
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'
@@ -1,5 +1,6 @@
1
1
  id: chase-united-club-business
2
2
  name: United Club Business Card
3
+ color: '#1a2130'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: united-miles
@@ -41,6 +42,31 @@ milestones:
41
42
  note: 'Premier Gold status unlocks it too. It lasts the rest of that calendar year and all of the next.'
42
43
  todo:
43
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.'
44
70
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
45
71
  evidence:
46
72
  - rule: annual_fee
@@ -76,3 +102,18 @@ evidence:
76
102
  - rule: spend-50k
77
103
  url: https://creditcards.chase.com/business-credit-cards/united/united-club-business
78
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'
@@ -1,5 +1,6 @@
1
1
  id: chase-united-club
2
2
  name: United Club Card
3
+ color: '#1c2533'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: united-miles
@@ -59,6 +60,31 @@ milestones:
59
60
  note: 'Premier Gold status unlocks it too. It lasts the rest of that calendar year and all of the next.'
60
61
  todo:
61
62
  - United Card Events from Chase also earn 5x; no merchant exists for them, so they aren't modeled.
63
+ - "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."
64
+ # Merchant statement credits, on top of what the purchase earns.
65
+ credits:
66
+ - id: instacart
67
+ match: { merchants: [instacart] }
68
+ amount: 20
69
+ period: month
70
+ enroll: true
71
+ 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."
72
+ - id: rideshare
73
+ match: { categories: [transit.rideshare] }
74
+ amount: 12
75
+ period: month
76
+ enroll: true
77
+ note: 'Rideshare rides. Opt in each year. December allows $18 (modeled at $12).'
78
+ - id: jsx
79
+ match: { merchants: [jsx] }
80
+ amount: 200
81
+ period: cardmember_year
82
+ note: 'Flights booked directly with JSX.'
83
+ - id: renowned-hotels-credit
84
+ match: { merchants: [renowned-hotels-chase-travel] }
85
+ amount: 200
86
+ period: cardmember_year
87
+ note: 'Hotel stays prepaid through Renowned Hotels and Resorts for United cardmembers.'
62
88
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
63
89
  evidence:
64
90
  - rule: annual_fee
@@ -121,3 +147,18 @@ evidence:
121
147
  - rule: spend-50k
122
148
  url: https://creditcards.chase.com/travel-credit-cards/united/united-club
123
149
  quote: 'Receive United Club All Access Membership after spending $50,000 in a calendar year'
150
+ - rule: instacart
151
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-club
152
+ quote: 'you can receive two (2) $10 credits in your Instacart account each month'
153
+ - rule: rideshare
154
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-club
155
+ quote: 'up to $12 back as a statement credit each month from January through November'
156
+ - rule: rideshare
157
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-club
158
+ quote: 'Yearly opt-in is required.'
159
+ - rule: jsx
160
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-club
161
+ quote: 'Get up to $200 back as a statement credit each anniversary year when you book flights directly with JSX'
162
+ - rule: renowned-hotels-credit
163
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-club
164
+ quote: 'Receive up to $200 back in statement credits each anniversary year on hotel accommodations'
@@ -1,5 +1,6 @@
1
1
  id: chase-united-explorer
2
2
  name: United Explorer Card
3
+ color: '#2b4f86'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: united-miles
@@ -46,6 +47,26 @@ milestones:
46
47
  note: "One a calendar year. It posts to MileagePlus within 6-8 weeks and expires 12 months after it's issued."
47
48
  todo:
48
49
  - United Card Events from Chase also earn 3x; no merchant exists for them, so they aren't modeled.
50
+ - "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
+ # 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
+ - id: rideshare
60
+ match: { categories: [transit.rideshare] }
61
+ amount: 5
62
+ period: month
63
+ enroll: true
64
+ note: 'Rideshare rides. Opt in each year.'
65
+ - id: jsx
66
+ match: { merchants: [jsx] }
67
+ amount: 100
68
+ period: cardmember_year
69
+ note: 'Flights booked directly with JSX.'
49
70
  # Issuer text backing each rule; `yarn check-sources` checks it weekly.
50
71
  evidence:
51
72
  - rule: annual_fee
@@ -93,3 +114,15 @@ evidence:
93
114
  - rule: spend-20k
94
115
  url: https://creditcards.chase.com/travel-credit-cards/united/united-explorer
95
116
  quote: 'Earn a 10,000-mile award flight discount after spending $20,000 each calendar year'
117
+ - rule: instacart
118
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-explorer
119
+ quote: 'you can receive one $10 credit in your Instacart account each month'
120
+ - rule: rideshare
121
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-explorer
122
+ quote: 'receive up to $5 back as a statement credit each month on rideshare purchases'
123
+ - rule: rideshare
124
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-explorer
125
+ quote: 'Yearly opt-in is required.'
126
+ - rule: jsx
127
+ url: https://creditcards.chase.com/travel-credit-cards/united/united-explorer
128
+ quote: 'Get up to $100 back as a statement credit each anniversary year when you book flights directly with JSX'
@@ -1,5 +1,6 @@
1
1
  id: chase-united-gateway
2
2
  name: United Gateway Card
3
+ color: '#4f7bbd'
3
4
  issuer: chase
4
5
  network: visa
5
6
  currency: united-miles