The Lab Journal
A Sourced Transfer Matrix Beats a Guessed Award Value
Public research only. Not card advice. MCAFax is not a lender or a law firm.
Abstract
We built a small, sourced Transfer Partner Matrix (v0) and a deterministic cents-per-point (CPP) calculator for award trips. The matrix includes 22 airline partner rows for Chase Ultimate Rewards and Capital One Miles (US), dated 2026-11-06, taken only from official issuer pages we opened. American Express Membership Rewards (US) stays in scope as a program but has zero partner rows because we could not verify per-partner US ratios on Amex US public pages. The calculator implements one formula in Python (stdlib only), with 20 automated tests. This is not live award inventory, not a booking tool, and not a replacement for a paid deal club or award-search service.
Methods
- Opened official Chase Sapphire Preferred transfer-points copy and Chase how-to-transfer education pages; recorded airline partner names and the stated 1:1 rule for most partners.
- Opened Capital One's miles transfer-partners guide (page dated November 2, 2026); recorded airline partners and conversion ratios, including 2:1.5 and 5:3 groups.
- Opened Amex US Credit Intel and transfer FAQ pages; confirmed transfers exist and that Amex states most partners are 1:1 with exceptions. Partner-by-partner US ratio tables and Amex update PDFs were not available from the URLs we opened (404/HTML). Amex UK/FR/SG public ratios were excluded because regional programs differ.
- Scope rule: airline partners only; include a ratio only when an official US issuer page stated it. Hotels deferred.
- Shipped reusable JSON/CSV matrix, empty trip-ledger CSV header,
tools/trip_cpp.py, and aunittestsuite. The notebook page embeds the same airline rows for filtering and view-state CPP math. Entries on that page are not saved.
Data (as of 2026-11-06)
| Bank program | Airline partner rows | Ratio source |
|---|---|---|
| Chase Ultimate Rewards | 10 | Official Sapphire Preferred offers (most partners 1:1) |
| Capital One Miles (US) | 12 | Official Capital One transfer guide |
| Amex Membership Rewards (US) | 0 | Program confirmed; per-partner US ratios unverified |
Formula used by the calculator:
net_cpp = 100 * (cash_fare - award_taxes_fees - extra_costs) / bank_points_spent
Bank points and partner miles are distinguished when the transfer ratio is not 1:1. Example: Capital One to Emirates at 2:1.5 means 60,000 Skywards miles require 80,000 Capital One miles.
Results
- Matrix v0 contains 22 dated airline rows with
ratio_confidence: official. - Amex US remains an explicit coverage gap rather than a guessed table.
- Behavior tests: 20/20 OK (positive CPP, negative CPP, zero/negative points rejected, ratio consistency, inflated cash-fare caution, matrix integrity).
- CLI entry points work without network access once the bundle is local:
python3 tools/trip_cpp.py --cash-fare 1200 --taxes 100 --bank-points 60000
python3 tools/trip_cpp.py --cash-fare 3000 --taxes 200 \
--partner-miles 60000 \
--bank-program capital_one_miles \
--partner-program emirates_skywards
cd tools && python3 -m unittest test_trip_cpp.py -v
Discussion
A short skill should trigger this code instead of asking a model to remember transfer ratios. The skill is a pointer. The JSON matrix and the Python calculator are the work. That matches the MCAFax model: code does the calculation, a one-line skill decides when to run it, and a Lab Journal entry explains what was verified.
What this does not replace: live award seat search, founder coaching communities, or irreversible point transfers. Ratios change. Confirm in the issuer portal before moving points. Cash-fare quality is the operator's responsibility. An inflated comparable fare inflates CPP.
Limits
- Partial coverage by design (22 rows, as-of 2026-11-06).
- No Amex US partner ratios in v0.
- No hotel rows in v0.
- No live inventory, bookings, account logins, or personal trip records in the shipped ledger (header only).
- Other AIs do not automatically discover or install this skill. Adopters add the portable bundle.
Sources
- https://account.chase.com/sapphire/preferred/offers
- https://www.chase.com/personal/credit-cards/education/basics/how-to-transfer-chase-ultimate-rewards-points
- https://www.capitalone.com/learn-grow/money-management/venture-miles-transfer-partnerships/
- https://www.americanexpress.com/en-us/credit-cards/credit-intel/american-express-points-value/
- https://www.americanexpress.com/us/customer-service/faq.transfer-membership-reward-points.html
Portable bundle
Adopters: download https://mcafax.com/skills/points-transfer-matrix.zip and keep SKILL.md, data/, and tools/ in one folder named points-transfer-matrix. Point your AI at SKILL.md. The skill tells the AI to run tools/trip_cpp.py rather than re-derive ratios. The notebook page at the canonical URL filters the same airline rows and computes CPP in the browser. Nothing typed there is saved.
Airline matrix and calculator
22 airline rows as of 2026-11-06. Chase Ultimate Rewards: 10. Capital One miles (US): 12. American Express Membership Rewards (US): 0 partner rows. Hotels are not listed. This is not live award inventory.
Numbers you type stay in this tab. They are not saved and they are not sent.
Showing 0 rows.
| Bank | Airline | Ratio | Minimum | As of |
|---|
Cents per point
Enter a fare and points, then compute. The result is not stored.
The same math ships in the portable bundle. An AI should run tools/trip_cpp.py from that bundle, not invent the ratio.
Download the bundle (.zip)SKILL.mdMatrix JSONMatrix CSVEmpty ledger templateTodd's desk