Our methodology
Every number on PointBagel is sourced, computed, and tested. This page tells you exactly how each number gets there.
CPP (cents per point) values
Every program has three CPP numbers in our catalog: conservative, balanced, and aspirational. Conservative is what you can typically earn redeeming for cash-equivalents (Amex Pay With Points, Chase Pay Yourself Back, etc.). Balanced is the typical-case value across the program's most-used redemption types. Aspirational is the high end - premium cabin awards, peak hotel nights - that experienced users can reliably hit.
We refuse to publish a single 'value per point' number because the right answer depends on what you're redeeming for. A user who flies domestic economy values United miles differently than one who books transcontinental business. The three-tier model lets you pick the lens that matches your travel pattern.
Every CPP value carries a verifiable rationale, sourced from publicly observed redemptions. When a program devalues, we update the historical record so reports run against past dates use the value that was true at that time, not today's value backdated.
- 130+ CPP benchmarks (45+ programs x 3 redemption styles, where applicable)
- Per-program devaluation history preserved for retroactive reports
- Source: public award charts + observed booking data + frequent-flyer community consensus
Transfer ratios and partnerships
Our transfer-partner map covers 115+ partnerships across the major transferable-points programs (Chase UR, Amex MR, Capital One Venture, Citi TY, Bilt, Wells Fargo Rewards, HSBC Rewards). Each entry stores the exact ratio (most are 1:1; some are 1:1.5 promo paths or 2:1.5 bonus paths), the typical processing time, and any caveats that affect transfer feasibility.
Ratios are pulled directly from issuer transfer pages and confirmed against community reports. When an issuer adjusts a ratio mid-cycle (Citi/Choice went 1:2 to 1:1.5 in April 2026, Bilt promo periods), the catalog gets a date-stamped update; the engine uses the ratio that was in effect when you ran a report.
The engine evaluates multi-currency redemptions: if you have 85K UR and 30K Bilt, both partner with Hyatt, so a Park Hyatt redemption can pool currencies. Most apps treat each balance as independent and miss this.
- 115+ transfer paths with verified ratios
- Per-path notes on processing time, minimum amounts, and special-case caveats
- Multi-currency pooling for Hyatt, IHG, Marriott, Wyndham, and other shared partners
Earning rates and category caps
Every card in the catalog stores its earning rates per category, but the headline rate is rarely the rate you actually earn. Amex Gold earns 4x at U.S. supermarkets - on the first $25,000/year. After that, the rate falls to 1x. If you spend $30K/year on groceries, your effective weighted rate is 3.5x, not 4x.
The engine computes weighted-average effective rates against your actual transaction history (when Plaid is connected), the spending you enter yourself, or a typical-spending model when neither is available. The result is the rate that matches your portfolio, not a marketing rate that ignores your spend pattern.
Category caps are sourced from each card's terms and conditions; cap-aware math ripples through recommendation surfaces across the app so a 4x card and a 3x uncapped card get compared correctly when the 4x cap is exhausted.
- 3,500+ cards (400+ unique products plus 3,100+ community-bank and credit-union variants through Elan Financial) across 60+ US issuers
- Per-category earning caps for cards that have them (Chase Freedom Flex Q1 5%, Amex Gold groceries $25K, Citi Custom Cash $6K, etc.)
- Configurable rates surfaced where issuers let users pick (BofA CCR online category, US Bank Cash+ tiers)
Issuer eligibility rules
The Application Calendar tracks 30+ issuer eligibility rules across 10 major US issuers. Rule categories include velocity rules (per-window application counts), lifetime-bonus rules (per person or per product, depending on the issuer), product-conflict rules (you already hold a card in the family), and cross-issuer constraints. Explainers for the most common rules, each with its window, count, and scope, are at /help/issuer-rules.
Each rule is encoded with its window, count, eligibility scope (personal vs business, individual vs cross-issuer), and any special-case exceptions (soft-disclosure rules, deposit-relationship relaxations, product-family directional rules, cross-issuer cooldowns). Rules update when issuers change them; date-stamped catalog entries preserve the rule that was in effect for historical reports.
Per-entity bonus history tagging (introduced May 2026) lets users with multiple business entities tag historical welcome bonuses to the entity that earned them, so the engine doesn't wrongly block applications under a different business when the past history was just untagged. Issuer rules themselves are honored per the issuer's actual policy: velocity rules that aggregate portfolio-wide stay portfolio-wide, per-person lifetime-bonus rules stay per person, per-product lifetime rules stay per product. Entity tagging doesn't override any of that; it makes the conservative-blocking default more precise.
- 30+ issuer eligibility rules tracked, with window + count + scope encoded
- Per-entity bonus history tagging so legacy untagged history doesn't wrongly block applications under a different entity
- Date-stamped rule history for retroactive accuracy
Welcome offers and offer history
We track 250+ active welcome offers plus a verified-no-bonus dataset for cards we've confirmed don't currently offer one. Each offer carries the bonus amount, spend requirement, timeframe, and an offer-history record so we can tell you whether the current offer is at an all-time high, elevated above average, standard, or below average.
The recommendation engine factors offer history into card rankings - a 125K Marriott Boundless offer at all-time-high deserves a different urgency than a standing offer that's been around forever. The 'All-time high' badge appears only when the current offer matches or exceeds every prior public offer we've recorded.
Sources: issuer pages, link-aware promotional URLs, and community-verified data points. We refuse to inflate offers we can't verify.
- 250+ welcome offers with spend requirement, timeframe, and bonus value
- Offer-history records per card to compare current vs. typical bonus values
- Verified-no-bonus dataset prevents stale offers leaking into recommendations
Statement-credit benefit detection
When you connect a card via Plaid, our engine recognizes statement-credit reimbursements as they land in your transactions and toggles the corresponding benefit as 'used' on your benefits page. We track 600+ card benefits in all, and 175+ of them carry a detection signature so they get matched and marked automatically from your transactions (Amex Platinum credits, Chase Sapphire Reserve travel credit, the Amex Gold Dunkin' credit, and others).
Each benefit has its own detection signature scoped to that benefit's specific reimbursement pattern, so credits stay tied to the right benefit instead of getting confused with unrelated transactions.
Not every credit is visible to Plaid, and we don't claim otherwise. In-app credits load a balance inside another company's app (Uber Cash, Lyft); portal credits apply at the issuer's travel portal when you book. Neither one posts to your statement, so we never claim to see them land. We treat each one as a single annual benefit: one amount for the year, counted by default at the value you set, with a switch to turn a credit off and a per-year option to record that you did not use it. Non-credit perks stay a toggle you switch on and value yourself. For credits we CAN see on your statement, usage is tracked per period (monthly, quarterly, semi-annual, annual), with proportional caps for partial periods.
- 600+ benefits tracked, 175+ auto-detected from your transactions
- Per-benefit detection signatures, not generic keyword matching
- In-app and portal credits counted by default at the value you set, never presented as observed
- Per-period and proportional cap math for the sub-annual credits we can see on your statement
Validation and accuracy testing
Every calculation in the engine is backed by an automated regression test, across CPP math, transfer ratios, earning caps, eligibility rules, benefit detection, redemption strategies, and the eligibility engine. When we find a wrong answer, we fix it and add a test that locks the fix in.
A regression in any tracked number, helper, or test blocks the deploy. The catalog and the engine ship together, or they don't ship at all.
- Every calculation backed by automated regression tests
- Coverage spans the engine, catalog, and routes
- Regression in any tracked number blocks the deploy
Auditable by design
Our catalog data, engine logic, and test suite are the source of truth - no black-box AI inferring values you can't check. Every recommendation traces back to a number you can verify.
