alliances
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty…
Active credit card transfer bonuses from Amex, Chase, Capital One, Citi, Bilt, and Rove. Weekly-refreshed data with confidence markers. Use when pricing an award booking that involves a points transfer or deciding whether to wait for a better bonus.
$ npx -y skills add borski/travel-hacking-toolkit --skill transfer-bonuses --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/transfer-bonusesContext preview
The summary Claude sees to decide when to auto-load this skill.
Active credit card transfer bonuses from Amex, Chase, Capital One, Citi, Bilt, and Rove. Weekly-refreshed data with confidence markers. Use when pricing an award booking that involves a points transfer or deciding whether to wait for a better bonus.
name: transfer-bonuses description: Active credit card transfer bonuses from Amex, Chase, Capital One, Citi, Bilt, and Rove. Weekly-refreshed data with confidence markers. Use when pricing an award booking that involves a points transfer or deciding whether to wait for a better bonus. category: reference summary: Active credit card transfer bonuses with primary-source citations. Tells the agent the real effective ratio when transferring points during a promotion.
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 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:
1. Get today's date. 2. For each bonus you're about to cite, compare `end_date_inclusive` to today. **Past-dated = expired, regardless of which array it sits in.** Never present an expired bonus as available. 3. If any `active_bonuses` entry is past-dated, or `_meta.last_updated` is more than 7 days old, refresh first: `python3 scripts/refresh-transfer-bonuses.py` (use `--dry-run` to preview). Then re-read the file. 4. 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 <date> — confirm on the issuer's transfer page before moving points."
`data/transfer-bonuses.json`. Schema (relevant fields):
| Field | Description | |-------|-------------| | `_meta.last_updated` | ISO date, last refresh | | `_meta.staleness_days` | TTL in days; integrated with `scripts/check-data-freshness.sh` | | `_meta.primary_sources` | Frequent Miler, AwardWallet (TPG consulted manually only) | | `active_bonuses[].bonus_pct` | The bonus percentage (e.g., 30 for 30%) | | `active_bonuses[].ratio` | Multiplier on standard ratio (1.30 = 30% bonus) | | `active_bonuses[].standard_ratio` | Baseline transfer ratio (1.0 = 1:1, 0.75 = 4:3) | | `active_bonuses[].effective_ratio` | Final ratio after bonus (`standard_ratio * ratio`) | | `active_bonuses[].end_date_inclusive` | Last day the bonus is active | | `active_bonuses[].confidence` | VERIFIED, LIKELY, or UNVERIFIED | | `active_bonuses[].sources[]` | Direct URLs to primary source posts | | `active_bonuses[].notes` | Strategic context, including "but you shouldn't" warnings | | `expired_recently[]` | Bonuses that ended in the last 30 days. Useful for noticing TPG/AW staleness. | | `frequent_recurring_bonuses_to_watch{}` | Bonuses that historically recur, with typical % and frequency. Use for "should I wait?" decisions. | | `decision_rules{}` | Six concrete rules for how to factor bonuses into a transfer decision. |
Run weekly (or on-demand) via:
python3 scripts/refresh-transfer-bonuses.py
The script:
1. Scrapes Frequent Miler's current point transfer bonuses page (canonical source). 2. Cross-checks each bonus against AwardWallet. 3. Sets confidence based on cross-check results: VERIFIED if 2+ sources agree, LIKELY if only Frequent Miler. 4. Moves expired bonuses to `expired_recently[]`. 5. Updates `_meta.last_updated`.
`scripts/check-data-freshness.sh` flags this file as stale after 7 days.
If the script fails (Frequent Miler's HTML changed, network issue, etc.), fall back to manual update by visiting the two primary sources (Frequent Miler, AwardWallet) and editing the JSON by hand. TPG can be consulted as a sanity check but is not authoritative because it frequently shows expired bonuses as active. **NEVER fabricate a bonus**. Per the Research Integrity Protocol, if you cannot verify a bonus from a primary source, do not include it.
When the user asks "what bonuses are active right now?", read `data/transfer-bonuses.json` and produce a markdown tabl
AI-powered travel hacking with points, miles, and award flights. Drop-in skills and MCP servers for OpenCode, Claude Code, and Codex. Ask your AI to find you a 60,000-mile business class flight to Tokyo.
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty…
Check American Airlines AAdvantage balance, elite status, and loyalty points via Patchright. Handles email 2FA with 6-box code…
Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when…
Search Atlas Obscura for weird, wonderful, and hidden gem places near any destination. Find the interesting stuff, not boring…
Find the cheapest award dates for a route over a date range. Searches seats.aero across all programs, groups by date, and shows a…
Per-program rules for placing award flights on hold before transferring points. Covers programs with holds (AA, Lufthansa, Flying…