alliances
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty…
Cash vs points trip cost comparison. Factors in transfer ratios, taxes, fees, CPP valuations, and opportunity cost to recommend the best redemption strategy for flights and hotels.
$ npx -y skills add borski/travel-hacking-toolkit --skill trip-calculator --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/trip-calculatorContext preview
The summary Claude sees to decide when to auto-load this skill.
Cash vs points trip cost comparison. Factors in transfer ratios, taxes, fees, CPP valuations, and opportunity cost to recommend the best redemption strategy for flights and hotels.
name: trip-calculator description: Cash vs points trip cost comparison. Factors in transfer ratios, taxes, fees, CPP valuations, and opportunity cost to recommend the best redemption strategy for flights and hotels. category: orchestration summary: Cash vs points decision answered with math. Transfer ratios, taxes, opportunity cost. api_key: None (free, local data)
"Should I pay cash or use points?" answered with math.
Compares the true cost of booking with cash versus each available points currency, accounting for transfer ratios, taxes/fees, and the opportunity cost of burning your points.
**No API key needed.** Uses local JSON data files plus flight/hotel search results.
| File | Purpose | |------|---------| | `data/points-valuations.json` | CPP valuations per program (floor/ceiling) | | `data/transfer-partners.json` | Credit card → loyalty program transfer ratios |
The value you're getting per point when redeeming:
cpp = (cash_price - taxes_on_award) / points_needed × 100
A CPP **above** the floor valuation from `points-valuations.json` means you're getting above-average value. Below floor = poor redemption.
Points have value even when unspent. Burning 100K Chase UR at 1.7 cpp (floor) means you're "spending" $1,700 in future travel flexibility:
opportunity_cost = points_needed × floor_cpp / 100
If the cash price is lower than the opportunity cost, pay cash. If higher, use points.
IF cash_price < opportunity_cost → PAY CASH (points are worth more saved) IF cash_price > opportunity_cost → USE POINTS (good redemption) IF cash_price ≈ opportunity_cost → PAY CASH (preserve flexibility)
The tie goes to cash because points maintain optionality.
**Cash prices** (use one or more sources):
Duffel API → exact bookable fares Ignav API → fast comparison prices Google Flights → browser-based, includes Southwest
**Award prices** (use seats.aero):
Seats.aero API → cached availability across 25+ programs Seats.aero web → live search (local Patchright only)
For each award option with a corresponding cash price:
cpp = (cash_price_usd - award_taxes_usd) / award_miles × 100
Award taxes come from seats.aero trip details (`TotalTaxes` field, in cents) or estimate $5.60 per segment for domestic US, $50-$200 for international (varies wildly by carrier and routing).
If using transferable points (Chase UR, Amex MR, etc.), the effective points cost changes:
effective_points = award_miles / transfer_ratio effective_cpp = (cash_price - award_taxes) / effective_points × 100
Example: Flying Blue award at 50,000 miles via Capital One (1:1):
Contrast: a separate Emirates award at 72,500 Skywards miles via Capital One (4:3 ratio, the worst Cap One transfer rate):
**Important: pick the best currency for the destination program.** Emirates Skywards has a 1:1 transfer from Bilt Rewards (no fee, instant). For the same Emirates redemption, 72,500 Bilt = 72,500 Skywards = ($1,200 - $100) / 72,500 × 100 = **1.52 cpp**. Always check `data/transfer-partners.json` for every transferable currency the user holds before recommending a transfer — Bilt's 1:1 to Emirates beats Capital One's 4:3 by a wide margin. The skill enforces this in Step 0 (load `transfer-partners` first to enumerate every viable path).
Load valuations from `points-valuations.json`:
jq -r '.credit_card_points.chase_ultimate_rewards | "Chase UR: floor \(.floor)cpp, ceiling \(.ceiling)cpp"' data/points-valuations.json
| Rating | CPP vs Floor | Meaning | |--------|-------------|---------| | Excellent | > ceiling | Exceptional redemption. Book it. | | Good | > floor | Above average. Solid use of points. | | Fair | 0.8× to 1× floor | Mediocre. Consider cash instead. | | Poor | < 0.8× floor | Bad deal. Pay cash. |
**Always use markdown tables.**
| Option | Program | Miles/Points | Taxes | Cash Equiv | CPP | Rating | |--------|---------|-------------|-------|------------|-----|--------| | Cash | — | — | — | $4,200 | — | — | | United via Chase UR | United | 88,000 UR | $45 | $1,496 | 4.72 | Excellent | | Aeroplan via Chase UR | Aeroplan | 75,000 UR | $120 | $1,275 | 5.44 | Excellent | | Alaska via Bilt | Alaska | 55,000 Bilt | $30 | $935 | 7.58 | Excellent | | Virgin Atlantic → ANA via Chase UR | VA | 52,500 UR | $200 | $893 | 7.62 | Excellent |
**Recommendation:**
For round trips, calculate each direction separately. Award pricing is usually one-way, cash pricing is often round-trip. Make sure you're comparing apples to apples:
If cash = round-trip $4,200: Compare against: outbound award + return award e.g., 75K out + 75K return = 150K total vs $4,200 cash CPP = ($4,200 - $240 taxes) / 150,000 = 2.64 cpp
###
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…