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 (47 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 118+ partnerships across the major transferable-points programs (Chase UR, Amex MR, Capital One Venture, Citi TY, Bilt, Wells Fargo 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 2:1 -> 1:1, 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.

  • 118+ 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) or your annualized spend estimates (when not). 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 every recommendation surface so a 4x card and a 3x uncapped card get compared correctly when the 4x cap is exhausted.

  • 400+ cards in the catalog (every consumer credit card and most business cards from 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 20+ issuer approval rules: Chase 5/24, Amex 2/90 + 6/24 + 1 Card Per 6 Months + 5 Credit Card Maximum + 10 Charge Card Maximum, Citi 1/8 + 2/65, BofA 2/3/4 (or 7/12 for deposit relationships), Capital One 1/30 + 1 Card Per 6 Months, Wells Fargo 6-month, and more.

Each rule is encoded with its window, count, eligibility scope (personal vs business, individual vs cross-issuer), and any special-case exceptions (Cap One soft disclosure, BofA deposit-relationship relaxation, Sapphire family directional rules, Marriott cross-issuer 24-month). Rules update when issuers change them; date-stamped catalog entries preserve the rule that was in effect for historical reports.

Per-EIN scoping (introduced May 2026) lets users with multiple business entities track historical bonuses against the right EIN, so the cascade engine doesn't over-block applications that are legitimately eligible under a different business.

  • 20+ approval rules tracked, with window + count + scope encoded
  • Per-EIN scoping for business cardholders with multiple legal entities
  • Date-stamped rule history for retroactive accuracy

Welcome offers and offer history

We track 280+ 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 200K 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 literally 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.

  • 280+ welcome offers with spend requirement, timeframe, and bonus value
  • Offer-history records per card for elevation detection
  • Verified-no-bonus dataset prevents stale offers leaking into recommendations

Statement-credit benefit detection

When you connect a card via Plaid, our engine matches your transactions against the credit's detection keywords and amount signature to recognize statement credits and toggle them as 'used' on the benefits page. We do this for the 95+ tracked benefits across major issuer cards (Amex Platinum credits, Chase Sapphire Reserve travel credit, Bilt rideshare credit, etc.).

Amount-bounded signature detection (introduced 2026-05) disambiguates ambiguous merchant labels: a $12.95 Walmart+ credit is different from a $84 Walmart grocery purchase even though both match the 'walmart' keyword. The signature requires both keyword AND amount match.

Detection is opt-in - you can manually mark credits used for app-credit benefits like Uber Cash where Plaid won't see the redemption. The runtime tracks credit usage per period (monthly, quarterly, semi-annual, annual) and proportional caps for partial periods.

  • 95+ credit benefits tracked across all major issuers
  • Plaid-based auto-detection with amount-signature disambiguation
  • Per-period and proportional cap math for sub-annual benefit windows

Validation and accuracy testing

Every calculation in the engine has a test. The full test suite runs 3,000+ unit tests across 190+ test files, covering CPP math, transfer ratios, earning caps, eligibility rules, benefit detection, redemption strategies, and the cascade engine.

The triple-audit pattern is our internal QA protocol: any nontrivial change runs through three parallel audit agents (engine + UX + security/perf) plus a mediator before merge. Audits catch what individual reviewers miss - the recent backend tier-gating audit caught two endpoints serving PLUS-only data to FREE users that the original implementation missed.

Build pipeline runs on every push: tsc --noEmit + full vitest sweep + Next.js production build. A regression in any catalog entry, any helper, or any test breaks the build and blocks the deploy.

  • 3,000+ unit tests across the engine, catalog, and routes
  • Triple-audit + mediator on nontrivial changes
  • Build gate: tsc clean + vitest clean + Next build success required

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.