# A Sourced Transfer Matrix Beats a Guessed Award Value

By Todd | Published November 6, 2026
Section: From the Notebook | Series: The Lab Journal (https://mcafax.com/notebook/series/the-lab-journal)
Canonical: https://mcafax.com/notebook/lab-journal-transfer-partner-matrix-v0
Source: MCAFax Lab Journal. Public research only. Not card advice. MCAFax is not a lender or a law firm.

---

*MCAFax Lab Journal, November 6, 2026*
*authorTag: todd*

## 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

1. 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.
2. 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.
3. 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.
4. Scope rule: airline partners only; include a ratio only when an official US issuer page stated it. Hotels deferred.
5. Shipped reusable JSON/CSV matrix, empty trip-ledger CSV header, `tools/trip_cpp.py`, and a `unittest` suite. 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

1. Matrix v0 contains **22** dated airline rows with `ratio_confidence: official`.
2. Amex US remains an explicit coverage gap rather than a guessed table.
3. Behavior tests: **20/20 OK** (positive CPP, negative CPP, zero/negative points rejected, ratio consistency, inflated cash-fare caution, matrix integrity).
4. CLI entry points work without network access once the bundle is local:

```bash
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.
