TL;DR
March actuals: fuel R418M (R14.62/L delivered), PBT R127M. April actuals: fuel R707M (R26.52/L delivered), PBT R44M — full pass-through of the Iran-spike. All cost figures are findash IS actuals (MC-3517).
FlySafair absorbed 79.2% of the R288M fuel shock: R194M absorbed by higher fares + R34M absorbed by fewer flights. Only R84M fell to PBT.
Material changes detected since 2026-05-07 baseline:- IATA jet fuel moved materially: latest $162.89/bbl vs baseline $181.0/bbl (down 10.0%). Scenario fuel R/L inputs may need updating.
Headline KPIs
Apr PBT
R44M
3.1% — fuel doubled
May Base PBT (MTD run-rate)
R-93M
-7.7% · LF 80.2% MTD
Fuel hike absorbed
R288M
Apr vs Mar additional fuel cost
Yield recovery
79%
on per-pax basis
Sensitivity upside
R2.5M
if LF matures +6.4pp to 86.6%
Fuel Price Trend (IATA Weekly, USD/bbl)
Chart shows IATA jet fuel index (USD/bbl). Massive spike began week of 6 March 2026, driven by Iran-related supply disruption. Crack spreads also surged. Data from Data Fuel.xlsx refreshed by iata-fuel-update task.
March vs April Detailed Comparison
Operating Metrics
| Metric | Mar 2026 | Apr 2026 | Δ |
| Flights | 5,640 | 5,307 | -5.9% |
| Pax | 952,408 | 864,907 | -9.2% |
| Seats | 1,062,072 | 999,135 | -5.9% |
| Load Factor | 89.7% | 86.6% | -3.1pp |
| Yield (R/pax) | R1,329 | R1,628 | +22.5% |
| Revenue | R1,233.5M | R1,427.2M | +15.7% |
Cost Build-up
| Line | Mar | Apr | Δ |
| Fuel volume (L) | 28.6M | 26.6M | -6.9% |
| Fuel R/L delivered | R14.62 | R26.52 | +81% |
| Fuel cost | R418M | R707M | +R288M |
| Non-fuel cost | R718M | R684M | −R34M |
| Total cost | R1,136M | R1,390M | +R254M |
| PBT | R127M | R44M | R-84M |
Cost Mix
| Fuel % of revenue | Fuel % of total costs |
| Mar | 33.9% | 36.8% |
| Apr | 49.5% | 50.8% |
| Pre-spike norm | ~22% | ~25% |
Recovery Analysis
Per-pax basis (cleanest — strips volume effects)
| Mar | Apr | Δ |
| Yield (R/pax) | R1,329 | R1,628 | +R299 |
| Fuel/pax | R439 | R817 | +R378 |
Yield recovery: R299 of R378 = 79%
Per-flight basis
| Mar | Apr | Δ |
| Revenue/flight | R219K | R269K | +R50K |
| Fuel/flight | R74K | R133K | +R59K |
Recovery: R50K of R59K = 85%
Total network basis — full reconciliation
| Mar | Apr | Δ | Effect |
| Revenue | R1,234M | R1,427M | +R194M | Fares hiked → recovers fuel |
| Fuel cost | R418M | R707M | +R288M | The hit being absorbed |
| Non-fuel cost | R718M | R684M | −R34M | Fewer flights (5,640→5,307) saved costs |
| Other IS movement | R30M | R7M | −R24M | Finance costs / tax / non-op items (non-operating IS) |
| Net to PBT | R127M | R44M | −R84M | Waterfall: rev Δ − fuel hike + nonfuel saving + other IS = PBT Δ |
How the R288M fuel hike was absorbed
194M fares
34M cost
84M PBT
R288M fuel increase absorbed via: R194M higher fares + R34M fewer-flight cost savings + R24M other IS items + R84M dropped to PBT.
Total absorption check: R288M ≈ R288M ✓ (revenue + nonfuel saving + other IS + PBT drop = fuel hike).
Operating recovery (revenue + cost savings): R228M of R288M = 79.2%.
Three views of "recovery"
| Definition | Numerator | Denominator | % |
| Revenue ÷ fuel hike (gross) | +R194M revenue | R288M fuel hike | 67.2% |
| Revenue ÷ net cost increase | +R194M revenue | R254M net (288−34) | 76.3% |
| Total absorption (rev + cost cuts) ÷ fuel hike | +R228M (194+34) | R288M | 79.2% |
Reconciling the views. The revenue-only bar understates the real picture — it ignores the non-fuel cost saving from flying fewer flights.
Per-pax recovery is highest because it strips volume effects. Total absorption is the most complete view — it captures both fare recovery and cost reduction. The residual is what actually dropped to PBT.
May 2026 Projection — Updated MTD
Updated 2026-05-15 with MTD signals. Schedule: 5,640 March flights → 5,307 April → 5,031 May. Fuel tariffs easing per latest B4i.
May MTD signals
| Metric | Value | Read |
| Schedule (full month) | 5,031 flights · 950,475 seats | Slightly below April (5,307) |
| MTD period | May 2026 MTD (14 days, through 14 May) | Live from dashboard_data.json |
| MTD flights | 2,222 | Flown through period |
| MTD pax | 336,517 | Flown through period |
| MTD revenue | R531.8M | Flown revenue |
| MTD yield | R1,580 | Easing vs Apr R1,628 as surcharges drop |
| MTD LF | 80.2% | vs April 86.6% |
May Inputs (revised)
| Driver | Assumption | Source |
| IATA latest week | $162.89/bbl | Data Fuel.xlsx |
| FX | ~16.80 (flat) | Apr trend |
| Fuel R/L base case | R25.72 (auto-derived from MTD) | B4i tariff easing + Radixx surcharges |
| Flights | 5,031 | May schedule (live) |
| Yield base | R1,580 (auto-derived from MTD) | MTD blend + recovery as surcharges normalise |
| LF base | 80% (auto-derived from MTD) | Apr-style demand |
Three Scenarios (revised)
Optimistic [live MTD]
- Fuel R/L: R24.22
- Yield: R1,628
- LF: 82.2%
- Flights: 5,031
- Revenue: R1,272M
- Fuel: R612M
- Non-fuel: R648M
R12M
1.0% margin · contracts ease further, yields hold
Base — May MTD run-rate [live MTD]
· headline Base
- Fuel R/L: R25.72
- Yield: R1,580
- LF: 80.2%
- Flights: 5,031
- Revenue: R1,204M
- Fuel: R649M
- Non-fuel: R648M
−R93.1M
-7.7% margin · data-derived: yield/LF from May MTD; fuel from Apr actual × IATA ratio
Sensitivity: if May LF matures to April's 86.6%
(requires +6.4pp vs MTD 80.2%)
[full-month proj]
| LF |
86.6% |
Revenue |
R1,300M |
| PBT |
R2.5M |
Margin |
0.2% |
Sensitivity upside: bookings mature to April-like close. Not the reported Base.
Pessimistic [live MTD]
- Fuel R/L: R27.72
- Yield: R1,533
- LF: 78.2%
- Flights: 5,031
- Revenue: R1,139M
- Fuel: R700M
- Non-fuel: R648M
−R209M
-18.3% margin · sustained pressure, demand soft
Headline Base [live MTD run-rate]: 5,031 flights × 5,019 L/flight (Apr actual uplift÷flights) = 25.25M L × R25.72 = R649.5M fuel. 950,475 seats × 80.2% LF × R1,580 yield = R1,204.4M revenue. Non-fuel = 5,031 × R128,797 (Apr actual) = R648.0M. PBT = R-93.1M.
Sensitivity [full-month proj]: Same fuel/flights/non-fuel; LF projected to 86.6% (Apr actual full-month close as maturity proxy, requires +6.4pp vs MTD). 950,475 seats × 86.6% × R1,580 = R1,300.0M revenue. Sensitivity PBT = R2.5M.
Caveats & Methodology Notes
- March + April fuel costs are ACTUALS — pulled from
kpi_data.json fuel_r / fuel_uplift / avg_fuel_per_liter_uplifted / total_costs / pbt_r. No estimates or back-solves used for these months.
- Non-fuel/flight (R128,797) derived at runtime from April actuals:
(total_costs − fuel_r) / flights. Used as the May cost base.
- April delivered R/L (R26.52) is the fuel price anchor for May. May base is April actual × IATA easing ratio (latest weekly ÷ Apr 167.96 $/bbl). B4i May tariffs corroborate easing direction.
- May L/flight (5,019) derived from April actual uplift ÷ flights. Stage-length mix shift could vary this ±2-3%.
- Hedging not modelled — assumes spot pass-through.
- May yield + LF anchored to live MTD data when available; static fallback otherwise.
Generated 2026-05-15 by build_report.py (fuel-impact-report skill, MC-3483) ·
IATA fuel data: Data Fuel.xlsx ·
Operational data: FinDash kpi_data.json ·
B4i: ~/PKA/SecondBrain/wiki/concepts/Fuel-Prices-B4i.md (last updated 2026-05-12) ·
Radixx surcharge: ~/PKA/SecondBrain/wiki/concepts/fuel-surcharge-data/surcharge_history.json (last updated 2026-05-09)
Route-Level Fuel Surcharge (Radixx)
Per-pax surcharge values loaded into Radixx booking system, ZAR incl VAT · Source: Pieter Richards weekly XLSX · auto-updated by flysafair-fuel-surcharge-update task
Peak week
2026-04-07
all routes highest
Cheapest route (peak)
R365
MQP-JNB
Most expensive (peak)
R1,448
JNB-MRU
Eased since peak
-9.3%
2026-04-07 → 2026-05-05
Top 6 routes — surcharge trajectory
Full route × week table
| Route | 03-17 | 03-24 | 03-31 | 04-07 | 04-14 | 05-05 |
|---|
| BFN-JNB | R101 | R145 | R212 | R397 | R391 | R360 |
| CPT-BFN | R161 | R232 | R338 | R635 | R627 | R576 |
| CPT-DUR | R214 | R307 | R447 | R841 | R830 | R762 |
| CPT-ELS | R158 | R227 | R329 | R619 | R611 | R561 |
| CPT-GRJ | R97 | R139 | R202 | R381 | R376 | R345 |
| CPT-HDS | R254 | R366 | R532 | R999 | R987 | R906 |
| CPT-HLA | R209 | R301 | R439 | R825 | R814 | R749 |
| CPT-JNB | R212 | R305 | R444 | R833 | R822 | R756 |
| CPT-MQP | R254 | R366 | R532 | R999 | R987 | R906 |
| CPT-PLZ | R133 | R191 | R278 | R523 | R516 | R475 |
| CPT-WDH | R179 | R257 | R375 | R704 | R694 | R638 |
| DUR-ELS | R121 | R174 | R253 | R476 | R469 | R431 |
| ELS-HLA | R158 | R227 | R329 | R619 | R611 | R561 |
| ELS-JNB | R150 | R215 | R313 | R587 | R580 | R532 |
| GRJ-HLA | R201 | R290 | R422 | R794 | R783 | R720 |
| GRJ-JNB | R185 | R267 | R389 | R730 | R720 | R662 |
| HLA-DUR | R121 | R174 | R253 | R476 | R469 | R431 |
| JNB-DUR | R117 | R168 | R245 | R460 | R454 | R417 |
| JNB-HRE | R154 | R222 | R323 | R607 | R599 | R551 |
| JNB-MRU | R368 | R530 | R771 | R1,448 | R1,429 | R1,314 |
| JNB-VFA | R151 | R217 | R316 | R593 | R585 | R538 |
| JNB-ZNZ | R312 | R449 | R654 | R1,228 | R1,212 | R1,114 |
| MQP-JNB | R93 | R133 | R194 | R365 | R360 | R331 |
| PLZ-DUR | R137 | R197 | R288 | R539 | R532 | R489 |
| PLZ-HLA | R174 | R250 | R363 | R682 | R673 | R619 |
| PLZ-JNB | R161 | R232 | R338 | R635 | R627 | R576 |
Reading: Surcharges tripled 17 Mar → 7 Apr peak. Easing since as B4i tariffs came down.
Each weekly file flows: B4i tariffs → fuel R/L → litres burned per route × R/L = surcharge per flight ÷ pax = surcharge per pax.
Full structured data: ~/PKA/SecondBrain/wiki/concepts/fuel-surcharge-data/surcharge_history.json