Executive summary — budget reframe: April was the real miss vs plan (R43.7M actual vs R208.4M budget — the R164.7M fuel shock). May's loss is on-plan (R250.5M vs −R64.5M budget, just R315.0M off) with revenue ahead of plan. June tracks ~R77.5M worse than plan — revenue ahead, fuel premium is the cause. Fuel itself is easing; the swing is seasonal revenue meeting a residual fuel premium, NOT a fuel hit.
Material changes detected since 2026-05-07 baseline:- IATA jet fuel moved materially: latest $146.25/bbl vs baseline $181.0/bbl (down 19.2%). Scenario fuel R/L inputs may need updating.
- May MTD yield R1,388 differs from original R1,583 baseline (-12.3%). May scenario yields may need adjustment.
- May MTD LF 78.0% differs from original 81.5% baseline by >3.5pp.
How to read this report & glossary
What this report does: compares 4 months of FlySafair P&L against budget and prior actuals, projects May/June PBT under fuel-R/L scenarios. April is the closed actual; May revenue is actual (Radixx, GL pending); June is a day-1 booking-pace forecast.
- PBT
- Profit Before Tax — operating revenue minus all costs before income tax
- LF
- Load Factor — passengers ÷ available seats, as a %
- R/L
- Rand per litre of jet fuel delivered (into-plane, all-in price)
- Yield
- Revenue per passenger (R/pax); excludes surcharges modelled separately
- Non-fuel
- All costs except fuel: crew, maintenance, leases, overheads, etc.
- B4i
- Bernd Feucht (fuel buyer) weekly tariff feedback — the source for into-plane price moves
- Radixx
- Reservation system; revenue data ±1–4% vs GL (X3) at month-end close
- X3
- Sage X3 — the GL (general ledger); final revenue/cost authority
- MTD
- Month-to-date — accumulated from the 1st of the month to date
- YTD
- Year-to-date — accumulated from January
- [ACTUAL]
- Confirmed closed figure from GL or Radixx flight data
- [proj]
- Projected — computed from actuals + assumptions (e.g. fuel R/L not yet closed)
- [forecast]
- Forward estimate — booking-pace or YoY-softened; not yet actual
- [stress test]
- Tail scenario (<10% probability) — April fuel held flat, no easing assumed
- [implied]
- Derived from other actuals (e.g. yield implied from revenue ÷ pax)
Headline KPIs — PBT & Budget
Mar PBT (actual)
R127M
10.3% margin
Apr PBT (actual)
R44M
−R164.7M vs budget · budget R208M
May PBT — base (actual rev)
R250M
+R315.0M vs budget · budget −R65M
June PBT — base (forecast)
−R176M
−R77.5M vs budget · budget −R98M
June best case — still a loss
−R70.5M
opt: R1,184M rev · fuel R22.02/L
Budget context (management plan): Apr budget R1,321.4M rev / R208.4M PBT. May budget R1,067.8M rev / −R64.5M PBT. Jun budget R1,011.2M rev / −R98.0M PBT. Budget is spine only (revenue + PBT); cost lines are not cross-cast.
PBT & Fuel Cost by Month (R Million)
Consolidated P&L Build-up
| Line | Mar (actual) | Apr (actual) | Apr Budget | May (actual rev) | May Budget | Jun (forecast) | Jun Budget |
| Revenue | R1,233.5M | R1,427.2M | R1,321.4M | R1,162.9M [actual] | R1,067.8M | R1,100.0M [fcst] | R1,011.2M |
| Fuel cost | R418.4M | R706.5M | — | R601.9M | — | R631.6M | — |
| Non-fuel cost | R717.8M | R683.5M | — | R310.5M | — | R643.9M | — |
| PBT | R127.4M | R43.7M | R208.4M | R250.5M | −R64.5M | −R175.5M | −R98.0M |
Budget spine only (revenue + PBT). Cost budget lines are not cross-cast — per findash-actuals-precedence rule. Budget columns are management budget (signed as reported: revenue positive, PBT profit = positive).
May 2026 — ACTUAL Revenue · April-cost scenarios
Revenue is ACTUAL (commercial/Radixx — X3 close supersedes). Only fuel R/L varies across scenarios.
May Optimistic (actual rev) [actual rev]
Revenue: ACTUAL (commercial/Radixx — X3 close supersedes). Only fuel R/L varies.
- Fuel R/L: R14.17
- Revenue: R1,163M [ACTUAL]
- Fuel: R581M
- Non-fuel: R311M
- Flights: 4,929 (actual)
- Yield: R1,525 (actual)
- LF: 81.9% (actual)
R271M
23.3% margin · Strong demand, soft fuel — opt pairing
May Base — central (actual rev) [actual rev]
Revenue: ACTUAL (commercial/Radixx — X3 close supersedes). Only fuel R/L varies.
- Fuel R/L: R14.67
- Revenue: R1,163M [ACTUAL]
- Fuel: R602M
- Non-fuel: R311M
- Flights: 4,929 (actual)
- Yield: R1,525 (actual)
- LF: 81.9% (actual)
R250M
21.5% margin · Central; revenue actual, fuel actual — base pairing
May Pessimistic (actual rev) [actual rev]
Revenue: ACTUAL (commercial/Radixx — X3 close supersedes). Only fuel R/L varies.
- Fuel R/L: R15.17
- Revenue: R1,163M [ACTUAL]
- Fuel: R622M
- Non-fuel: R311M
- Flights: 4,929 (actual)
- Yield: R1,525 (actual)
- LF: 81.9% (actual)
R230M
19.8% margin · Weak demand, sticky fuel — pess pairing
Stress test — fuel held flat (<10% tail) [stress test]
Revenue: ACTUAL (commercial/Radixx — X3 close supersedes). Only fuel R/L varies.
- Fuel R/L: R16.00
- Revenue: R1,163M [ACTUAL]
- Fuel: R656M
- Non-fuel: R311M
- Flights: 4,929 (actual)
- Yield: R1,525 (actual)
- LF: 81.9% (actual)
R196M
16.8% margin · Stress: fuel R16.00/L held flat + actual revenue
June 2026 — Forecast (booking-curve-led)
Revenue: booking-pace-led (day-1 R455.5M booked, 297,878 pax). Day-1→final fraction declining (Apr 52.8%, May 44.7%); June pacing behind both. June back-loads on SA school holidays (late June). Costs: April basis (R67,872/flt direct + R323.3M overheads flat). Fuel R/L: opt 14.50 / base 15.00 / pess 15.50 / stress May flat.
June Optimistic (forecast) [forecast]
- Fuel R/L: R14.50
- Revenue: R1,184M
- Fuel: R611M
- Non-fuel: R644M
- Flights: 5,059
- Yield: R1,520 (implied)
- LF: 81.5% (implied)
−R70M
-6.0% margin · Fills to seasonal/YoY view (LF 81.5%, yield R1,520) + soft fuel — opt pairing
June Base case — central (forecast) [forecast]
- Fuel R/L: R15.00
- Revenue: R1,100M
- Fuel: R632M
- Non-fuel: R644M
- Flights: 5,059
- Yield: R1,492 (implied)
- LF: 77.2% (implied)
−R176M
-16.0% margin · Modest school-holiday back-load — booking-pace central + R15.00 fuel
June Pessimistic (forecast) [forecast]
- Fuel R/L: R15.50
- Revenue: R1,020M
- Fuel: R653M
- Non-fuel: R644M
- Flights: 5,059
- Yield: R1,489 (implied)
- LF: 71.5% (implied)
−R277M
-27.1% margin · Pace-linear, weak fill + sticky fuel — pess pairing
Stress test — May fuel held flat (<10% tail) [stress test]
- Fuel R/L: R13.26 (Apr actual, no ease)
- Revenue: R1,100M
- Fuel: R558M
- Non-fuel: R644M
- Flights: 5,059
- Yield: R1,492
- LF: 77.2%
−R102M
-9.3% margin · Stress: May actual fuel held flat (no easing) + base revenue. Symmetry with May stress.
May revenue: indicative — actual commercial/Radixx flown revenue, GL close pending. Radixx runs ±1–4% vs GL (≈R12–47M); May PBT central band is R271.0M to R230.0M (opt R23.02/L to pess R25.02/L). X3 GL close will supersede the Radixx revenue figure.
May story: the May operating loss is a revenue-seasonality + fuel-premium story. Revenue fell −R243M (seasonal demand); fuel HELPED (+R112M relief); non-fuel saved +R26M — operating swing −R105M is demand-driven. At normal pre-Iran fuel (~R19/L), May ≈ +R56M operating; the ~R124M fuel premium tips a soft seasonal month into a loss.
Fuel R/L method: delivered R/L = lagged-Platts jet × ZAR/USD + ~R6.40/L fixed delivery differential (into-plane, levy, transport, margin). This lag explains why an 11.7% spot drop only moves delivered ~9% (May −R2.50 calibrated; June −R3.50 slightly aggressive).
Sensitivity: R1/L fuel = R41.0M PBT (May) / R42.1M PBT (June) — i.e. R1/L move × uplift volume = PBT impact. FX note: ZAR/USD is the main overhead+fuel swing — a R1/USD move changes effective R/L by ~R1.35–1.50.
Operating vs reported PBT: April reported +R44M vs operating +R37M — the +R6.5M is non-operating (net finance/other income). May/June figures are operating PBT; do not compare April reported vs May/June operating directly.
Scenario pairing: opt = strong demand + soft fuel; pess = weak demand + sticky fuel. The band is NOT a confidence interval — it represents paired demand+fuel assumptions. "Stress test — April fuel held flat" is a <10% tail, shown for symmetry with May. Base (central) is the headline scenario.
Costs for both months projected off April actuals: R67,872/flight direct (variable) + R323.3M overheads (flat).
April actual → May actual — driver decomposition (operating PBT swing)
May revenue is ACTUAL (commercial/Radixx — X3 close pending). Fuel cost at base R24.02/L;
non-fuel projected off April cost basis. This table decomposes the −−R213.3M operating PBT
swing into its three drivers. The key insight: fuel HELPED (fell R104.7M) — the loss is
driven by the R264.4M seasonal revenue drop, cushioned only partially by fuel relief.
| APR (actual) | MAY (actual rev / base fuel) | Δ | Driver note |
| Revenue | R1,427.2M | R1,162.9M [ACTUAL] | −R264.4M | Seasonal demand drop — fewer and cheaper passengers (LF 81.9% vs Apr 86.2%) |
| Fuel cost | R706.5M | R601.9M [base R24.02/L] | +R104.7M | Fuel HELPED: fewer flights + mild R/L easing → cost fell R104.7M |
| Non-fuel cost | R683.5M | R310.5M [proj] | +R373.0M | Reduced schedule (5,307 → 4,929 flights) saved variable direct costs |
| Operating PBT swing | R43.7M (operating) | R250.5M [base] | +R213.3M | Revenue seasonality drove the swing; fuel + cost savings partially offset |
Fuel premium context. At normal pre-Iran fuel (~R19/L), May operating PBT would be ≈ R72.8M (+−R177.6M vs base). The ~R124M fuel premium (actual vs ~R19/L = −R177.6M) is what tips a soft seasonal month into a loss. The story is revenue seasonality + fuel premium, not "fuel hit alone" — revenue fell R264.4M while fuel only helped R104.7M.
FX & Fuel Sensitivity
Fuel ≈ USD 1.00/L (Platts-linked), so ZAR/USD is the dominant fuel swing. Sensitivity = fuel volume × R1/L (or USD/ZAR × ~R1.35–1.50 per USD step).
Overheads carry additional USD exposure (leases, maintenance) not captured here.
| ZAR/USD move | May PBT impact | June PBT impact | Note |
| −R1.00 (ZAR stronger) | +R41.0M | +R42.1M | Fuel FX only; overheads carry additional USD exposure not modelled |
| −R0.50 (ZAR stronger) | +R20.5M | +R21.1M | Fuel FX only; overheads carry additional USD exposure not modelled |
| Base (R17.67) | — | — | Base assumption |
| +R0.50 (ZAR weaker) | −R20.5M | −R21.1M | Fuel FX only; overheads carry additional USD exposure not modelled |
| +R1.00 (ZAR weaker) | −R41.0M | −R42.1M | Fuel FX only; overheads carry additional USD exposure not modelled |
Fuel R/L sensitivity (holding revenue fixed)
| R/L move | May PBT impact | June PBT impact |
| −R2.00/L | +R82.1M | +R84.2M |
| −R1.00/L | +R41.0M | +R42.1M |
| −R0.50/L | +R20.5M | +R21.1M |
| Base | — | — |
| +R0.50/L | −R20.5M | −R21.1M |
| +R1.00/L | −R41.0M | −R42.1M |
| +R2.00/L | −R82.1M | −R84.2M |
Caveats & Methodology
NOTE — findash reconciliation gap > R15M (warn threshold)- Mar reconciliation gap R30.2M > R15.0M (warn threshold = max(R15M, 1% rev R1234M)): revenue - total_costs = 97.2M vs pbt_r 127.4M. Non-operating IS items (finance costs, tax, other income) likely explain the gap.
Non-operating IS items (finance costs, tax, other income) likely explain the gap. Gap = published PBT − (revenue − total costs).
Methodology notes & assumptions
- 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 (R127,276) derived at runtime from April actuals:
(total_costs − fuel_r) / flights. Used as the May cost base.
- April delivered R/L (R13.26) 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 (8,324) derived from April actual uplift ÷ flights. Stage-length mix shift could vary this ±2-3%.
- Hedging not modelled — assumes spot pass-through.
- May revenue, yield, LF, pax are ACTUAL (commercial/Radixx). Only May fuel R/L is projected (GL closes at month-end). June revenue, yield, LF are forecast (YoY-softened). X3 close will supersede Radixx figures when available.
Generated 2026-06-09 by build_report.py (fuel-impact-report skill, MC-3483/v3) ·
IATA fuel: Data Fuel.xlsx · Ops: kpi_data.json ·
Budget: budget_data.json ·
B4i: ~/PKA/SecondBrain/wiki/concepts/Fuel-Prices-B4i.md (updated 2026-06-09) ·
Surcharge: ~/PKA/SecondBrain/wiki/concepts/fuel-surcharge-data/surcharge_history.json (updated 2026-06-09)
Mar → Apr Deep-dive — Fuel Shock Absorption Analysis
April fuel hike: how much was absorbed vs dropped to PBT · closed actuals · kpi_data.json
Fuel hike (Mar→Apr)
R288M
additional fuel cost in April vs March
Absorbed by fares + cost cuts
79%
194M fares + 34M cost savings
Dropped to PBT
84M
the residual not recovered
Operating Metrics
| Metric | Mar 2026 | Apr 2026 | Δ Mar→Apr | May 2026 (actual rev) |
| Flights | 5,640 | 5,307 | −5.9% | 4,929 |
| Pax | 952,370 | 861,011 | −9.6% | 762,422 |
| Seats | 1,062,072 | 999,135 | −5.9% | 931,373 |
| Load Factor | 89.7% | 86.2% | −3.5pp | 81.9% |
| Yield (R/pax) | R1,329 | R1,628 | +22.5% | R1,525 |
| Revenue | R1,233.5M | R1,427.2M | +15.7% | R1,162.9M |
Cost Build-up
| Line | Mar | Apr | Δ Mar→Apr | May (actual rev) |
| Fuel volume (L) | 57.2M | 53.3M | −6.9% | 41.0M |
| Fuel R/L delivered | R7.31 | R13.26 | +81% | R14.67 |
| Fuel cost | R418M | R707M | +R288M | R602M |
| Non-fuel cost | R718M | R684M | −R34M | R311M |
| Total cost | R1,136M | R1,390M | +R254M | R912M |
| PBT | R127M | R44M | −R84M | R250M |
Cost Mix
| Fuel % of revenue | Fuel % of total costs |
| Mar | 33.9% | 36.8% |
| Apr | 49.5% | 50.8% |
| May (proj) | 51.8% | 66.0% |
| Pre-spike norm | ~22% | ~25% |
Recovery Analysis
Per-pax basis (cleanest — strips volume effects)
| Mar | Apr | Δ Mar→Apr | May (actual rev) |
| Yield (R/pax) | R1,329 | R1,628 | +R299 | R1,525 |
| Fuel/pax | R439 | R821 | +R381 | R789 |
Yield recovery: R299 of R381 = 78%
Per-flight basis
| Mar | Apr | Δ Mar→Apr | May (actual rev) |
| Revenue/flight | R219K | R269K | +R50K | R236K |
| Fuel/flight | R74K | R133K | +R59K | R122K |
Recovery: R50K of R59K = 85%
Total network basis — full reconciliation
| Mar | Apr | Δ Mar→Apr | May (actual rev) | Effect |
| Revenue | R1,234M | R1,427M | +R194M | R1,163M | Fares hiked → recovers fuel |
| Fuel cost | R418M | R707M | +R288M | R602M | The hit being absorbed |
| Non-fuel cost | R718M | R684M | −R34M | R311M | Fewer flights (5,640→5,307) saved costs |
| Other IS movement | R30M | R7M | −R24M | — | Finance costs / tax / non-op items (non-operating IS) — not projected for May |
| Net to PBT | R127M | R44M | −R84M | R250M | 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%.
May (proj) columns show the Base-case projection (SummaryExcel revenue + QV fuel burn + anchored B4i fuel R/L) — not a closed month. The fuel-hike absorption % above is a March→April measure: April→May fuel falls (smaller, lower-volume month + B4i easing), so there is no hike to absorb into May.
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% |
Reading these 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.
Route-Level Fuel Surcharge (Radixx) appendix
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
-40.9%
2026-04-07 → 2026-06-02
Top 6 routes — surcharge trajectory
Full route × week table
| Route | 03-31 | 04-07 | 04-14 | 05-05 | 05-12 | 06-02 |
|---|
| BFN-JNB | R212 | R397 | R391 | R360 | R347 | R233 |
| CPT-BFN | R338 | R635 | R627 | R576 | R555 | R374 |
| CPT-DUR | R447 | R841 | R830 | R762 | R735 | R496 |
| CPT-ELS | R329 | R619 | R611 | R561 | R542 | R365 |
| CPT-GRJ | R202 | R381 | R376 | R345 | R334 | R224 |
| CPT-HDS | R532 | R999 | R987 | R906 | R874 | R589 |
| CPT-HLA | R439 | R825 | R814 | R749 | R721 | R486 |
| CPT-JNB | R444 | R833 | R822 | R756 | R728 | R491 |
| CPT-MQP | R532 | R999 | R987 | R906 | R874 | R589 |
| CPT-PLZ | R278 | R523 | R516 | R475 | R458 | R268 |
| CPT-WDH | R375 | R704 | R694 | R638 | R615 | R477 |
| DUR-ELS | R253 | R476 | R469 | R431 | R416 | R281 |
| ELS-HLA | R329 | R619 | R611 | R561 | R542 | R365 |
| ELS-JNB | R313 | R587 | R580 | R532 | R513 | R346 |
| GRJ-HLA | R422 | R794 | R783 | R720 | R693 | R468 |
| GRJ-JNB | R389 | R730 | R720 | R662 | R638 | R430 |
| HLA-DUR | R253 | R476 | R469 | R431 | R416 | R281 |
| JNB-DUR | R245 | R460 | R454 | R417 | R403 | R271 |
| JNB-HRE | R323 | R607 | R599 | R551 | R531 | R358 |
| JNB-MRU | R771 | R1,448 | R1,429 | R1,314 | R1,267 | R854 |
| JNB-VFA | R316 | R593 | R585 | R538 | R519 | R350 |
| JNB-ZNZ | R654 | R1,228 | R1,212 | R1,114 | R1,074 | R724 |
| MQP-JNB | R194 | R365 | R360 | R331 | R320 | R215 |
| PLZ-DUR | R288 | R539 | R532 | R489 | R472 | R319 |
| PLZ-HLA | R363 | R682 | R673 | R619 | R597 | R403 |
| PLZ-JNB | R338 | R635 | R627 | R576 | R555 | R374 |
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
Year-to-Date Fuel Impact — 2026 vs 2025 appendix
Calendar YTD (Jan–Apr) · closed-month actuals only · source: kpi_data.json
The fuel shock is cumulative — this is the running total for the year so far. Two headline numbers:
how much extra we have spent on fuel versus the same months last year, and how much of that
has actually fallen through to PBT after fare and capacity recovery.
YTD extra fuel spend vs 2025
+R387M
Jan–Apr 2026: R1,727M vs R1,340M
YTD PBT vs 2025
−R276M
Jan–Apr 2026: R256M vs R533M
Fuel hike absorbed (not in PBT)
R110M
extra fuel offset by fares + capacity
Monthly fuel cost — 2026 vs 2025 (R Million)
Monthly PBT — 2026 vs 2025 (R Million)
YTD comparison (Jan–Apr)
| Metric | 2026 | 2025 | Δ | Δ % |
| Fuel cost | R1,727M | R1,340M | +R387M | +28.9% |
| Fuel volume | 214.7M L | 101.8M L | +112.9M L | +110.9% |
| Blended fuel R/L | R8.04 | R13.16 | −R5.12 | −38.9% |
| Fuel cost / pax | R488 | R396 | +R92 | +23.3% |
| Revenue | R4,633M | R4,395M | +R239M | +5.4% |
| PBT | R256M | R533M | −R276M | −51.9% |
| Pax | 3,538,833 | 3,385,142 | +153,691 | +4.5% |
| Flights | 21,245 | 20,072 | +1,173 | +5.8% |
Apr 2026 vs Apr 2025
Latest closed month, year-on-year · actuals
Apr fuel cost
R707M
+103.4% vs R347M LY
Apr fuel R/L delivered
R13.26
+4.7% vs R12.66 LY
Apr fuel cost / pax
R821
+117.7% vs R377 LY
Apr PBT
R44M
−82.9% vs R255M LY
Apr revenue
R1,427M
+11.9% vs R1,275M LY
Apr: 2026 vs 2025 (R Million)
| Metric | Apr 2026 | Apr 2025 | Δ | Δ % |
| Fuel cost | R707M | R347M | +R359M | +103.4% |
| Fuel R/L | R13.26 | R12.66 | +R0.60 | +4.7% |
| Fuel cost / pax | R821 | R377 | +R444 | +117.7% |
| Revenue | R1,427M | R1,275M | +R152M | +11.9% |
| PBT | R44M | R255M | −R211M | −82.9% |
| Pax | 861,011 | 921,396 | −60,385 | −6.6% |
All figures are closed-month actuals from kpi_data.json. No estimates, no MTD month — the in-progress
month is excluded so the comparison stays like-for-like. See the methodology markdown for the full input log.