transfer-bonuses
Transfer Bonuses Skill
Authoritative reference for current credit card transfer bonuses. Reads from data/transfer-bonuses.json, which is refreshed weekly by scripts/refresh-transfer-bonuses.py (run automatically every Monday via .github/workflows/refresh-data.yml, and manually any time). The script scrapes Frequent Miler (canonical) and cross-checks each bonus against AwardWallet. Each active bonus carries a confidence marker (VERIFIED if both FM and AwardWallet agree, LIKELY if only FM, UNVERIFIED if single weak source) per the toolkit's Research Integrity Protocol. TPG is sometimes consulted manually as a sanity check but is NOT scraped programmatically — TPG often shows expired bonuses as active.
The Expiry Gate (run this BEFORE citing any bonus)
The data file is a snapshot; bonuses commonly end on month-end dates between refreshes. On 2026-07-07 the file listed 7 "active" bonuses of which 5 had ended a week earlier — an agent quoting the file raw would have priced a Chase→Marriott transfer at 1.55x when the real ratio was 1.0. So, mechanically, every time:
- Get today's date.
- For each bonus you're about to cite, compare
end_date_inclusiveto today. Past-dated = expired, regardless of which array it sits in. Never present an expired bonus as available. - If any
active_bonusesentry is past-dated, or_meta.last_updatedis more than 7 days old, refresh first:python3 scripts/refresh-transfer-bonuses.py(use--dry-runto preview). Then re-read the file. - If the refresh fails (source layout changed, offline), present the bonus WITH its end date and staleness caveat: "the file shows +30% through 2026-07-14, last verified — confirm on the issuer's transfer page before moving points."
When to Use
- Pricing an award booking that involves a transfer. A 30% bonus to JAL changes the real cost of a oneworld booking through JAL by 23%. The math has to factor in the bonus.
- Deciding whether to transfer now or wait. If a bonus is expected to recur (see
frequent_recurring_bonuses_to_watch), it may be worth waiting. - Sanity-checking whether a "good bonus" actually wins. Hotel bonuses especially (Chase UR to IHG 70%, Chase UR to Marriott 50-70%) often look great in headlines but lose to the Chase Travel portal (dynamic Points Boost on CSR/CSP, ~1.5-2.0 cpp on select bookings; not a guaranteed floor). Always pull the actual portal quote and run the math against it, not against an assumed rate.
- Identifying stackable bonuses. Aeroplan Visa cardholders stack a 10% cardholder bonus on top of any Chase UR to Aeroplan promotion.