—
Loading…
Every business day we measure the price of borrowing in rand — from the overnight repo rate through the full R-bond curve out to 2053, plus inflation-linked bonds and floating rate notes. The shape tells a story: of inflation expectations, political weather, and the long arc of fiscal discipline.
| — |
| — |
Quote basis: SATB 3M/6M/9M and SATB 12M Eff are annual-effective yields. SATB 12M is NACS (nominal annual compounded semi-annually) — the curve-construction convention — so it reads lower than the effective equivalent. Both 12M quotes are sourced from the same data.
| — |
The nominal R-bond curve prices yield in rand. The ILB curve prices yield in purchasing power. The gap — the breakeven curve — is what the market expects inflation to do at each tenor. Play through history to watch the three move together.
Loading…
Loading articles…
A hand-curated reading list of recent monetary-policy, rates and macro-finance stories relevant to South African bond investors. Links go to the primary source; summaries are ours.
Loading…
On-the-run government issuance across the curve.
| Bond | Yrs | Yield | R/C | Δ 1d | Δ 1w | Δ 1m | Δ 1y | 30d |
|---|
Real yields indexed to headline CPI.
| Bond | Yrs | Yield | Δ 1d | Δ 1w | Δ 1m | Δ 1y | 30d |
|---|
Short-dated paper, 3M–12M. 3/6/9M & SATB 12M Eff are annual-effective; SATB 12M is NACS (semi-annual) — same source, different basis.
| Bond | Yrs | Yield | Δ 1d | Δ 1w | Δ 1m | Δ 1y | 30d |
|---|
Synthetic par-yield at standard tenors.
| Bond | Yrs | Yield | Δ 1d | Δ 1w | Δ 1m | Δ 1y | 30d |
|---|
Swap, FRA and swap-spread quotes reference close-of-day marks; intraday dealers may differ. Forward-start dates are conventional (3×6 denotes a three-month rate starting in three months). Quotes are indicative, not executable.
RSA Retail Savings Bond Fixed Rates are reset on the first of each month, anchored to ZARGB 2/3/5-year government-bond yields at the end of the prior month and rounded to the nearest 0.25%. Each card below projects next month's reset from the month-to-date move in the underlying benchmark.
Loading…
Current row highlighted. Spread coloured from the saver's perspective: green when the RSB pays above the market yield at the same tenor, red when it's below.
Holders can restart their Fixed Rate RSB into a new rate after 12 months of holding. Requests must be lodged on or before the 20th of the month to take effect on the first of the next month. Each vintage below shows the rate you originally locked in versus what today's restart would give you.
No paywalls, no contracts. JSON, CSV, and the complete history of every rate we've tracked since 2018 — fixed R-bonds, inflation-linked, floating rate notes, treasury bills, and generics. Built for analysts, students, quants, and anyone who's ever shouted at a PDF.
/api/v1/rates/latestToday's full snapshot — every instrument with 1d/1w/1m/1y changes. Filter: ?bond_type=ilb.
curl https://rbond.co.za/api/v1/rates/latest
/api/v1/rates/{bond}Daily history for one instrument. Accepts ?from=, ?to=, ?fmt=csv.
curl https://rbond.co.za/api/v1/rates/R2030?from=2024-01-01
/api/v1/curve/{date}The full curve on any date. Use latest for today.
curl https://rbond.co.za/api/v1/curve/latest
/api/v1/spreadsKey tenor spreads — 2s10s, 5s30s, and the R-bond belly.
curl https://rbond.co.za/api/v1/spreads
/api/v1/bondsReference list of every tracked instrument.
curl https://rbond.co.za/api/v1/bonds
/api/v1/rsb/predictionNext month's 2/3/5-yr Retail Savings Bond rate projected from ZARGB month-to-date moves. Accepts ?fmt=csv.
curl https://rbond.co.za/api/v1/rsb/prediction
/api/v1/history.csvFull dataset as CSV. Filter by ?bond_type=fixed.
wget https://rbond.co.za/api/v1/history.csv
/api/v1/articlesHand-curated Commentary articles — manifest only (slug, title, summary, lede).
curl https://rbond.co.za/api/v1/articles
/api/v1/articles/{slug}Full HTML body for one article.
curl https://rbond.co.za/api/v1/articles/rsb-mechanics
/api/v1/newsHand-curated fixed-income news feed — date, source, title, summary, external URL.
curl https://rbond.co.za/api/v1/news
A true settlement-date bootstrap of the ZAR nominal government curve. Today's R-bond,
T-bill and repo yields are pulled live from this site; contractual coupon schedules are
embedded. Each accepted bond maturity discount factor is solved by bisection so that
Σ CF × DF(settle→CF) = BESA all-in price — a near-perfect repricing. Nodes
that would break a monotone discount-factor curve are rejected. Universe: short anchors
(repo + 3/6/9/12m T-bills), then the short-dated R188 (10.5%, Dec 2027) as
the first bond node, through R2030 → R2048; R2053 excluded.
Pick a trade date and settlement date (default T+3 SA business days), run the bootstrap,
and export the daily discount factors.
Discount factors are read off the bootstrapped curve at each cash-flow date (log-linear in DF). For an accepted node, Σ CF × DF reproduces the BESA all-in price the curve was solved against — the residual is pure numerical tolerance.
Set dates and press Run bootstrap.
| Indicator | Source | Update cadence |
|---|---|---|
| R-bonds, ILBs, FRNs, T-bills, ZARGB generics | JSE YieldX Daily Stats (CSV) | Weekdays, ingested 18:00 SAST |
| Repo / Policy Rate, ZARONIA | SARB current-market-rates page | Daily (ZARONIA) · on MPC decisions (Repo) |
| RSA Retail Savings Bond rates | rsaretailbonds.gov.za/rates.aspx | Monthly (first business day) |
| T-Bill auction results | SARB monetary operations page | Weekly (typically Friday) |
| RSB vs R-bond monthly spreads | Admin-maintained data/rsarsb_rates.xlsx | Monthly, end-of-month |
Every weekday at 18:00 SAST a systemd timer runs ingest_jse.py, which downloads the day's CSV (with a polite 1-hour buffer past the JSE 17:00 publish deadline), deduplicates rows by keeping the entry with the highest DaysDeal per instrument, classifies each row as fixed | frn | ilb via the instrument name, and upserts into the single rbonddata table using ON CONFLICT(report_date, bond) DO UPDATE. If the day's file isn't available yet the script walks back up to three weekdays. After ingest it rebuilds boot.json for first-paint.
RSB monthly rates and the RSB-vs-Rbond spread history come from two admin-maintained spreadsheets under /data/ and are loaded on demand via ingest_data_xlsx.py. SARB Policy Rate, ZARONIA, Retail Savings Bond rates and Treasury Bill auction results are scraped by the separate sa-rates-scraper subproject and stored in its own SQLite for audit, with HTML snapshots retained per run.
Every spread is long leg − short leg, quoted in basis points. So 2s10s_ZARGB = (ZARGB10 yield − ZARGB2 yield) × 100. A positive number means a normally-sloped curve at that point; a negative number means inversion. Week-on-week and month-on-month deltas compare the spread to the spread observed 5 and 22 weekdays ago respectively.
The time-series panel plots eight pairs: four generic-curve (2s5s, 2s10s, 5s30s, 10s30s), two R-bond (short-belly and belly-long), the repo-to-10y term premium, and the generic 2s30s. These cover the bits of the curve that move most.
RSA Retail Savings Bond rates are reset at the start of each calendar month, anchored to the preceding month's end-of-month government bond yields plus a spread. We project next month's 2/3/5-year Fixed Rate by:
The prediction is model-free (no regression, no scaling) and deliberately conservative: the quantum rounding absorbs small noise, and the spread column shows how the RSB-over-government-bond cushion is moving day-by-day. Treasury retains full discretion — this is an indicative projection, not a forecast.
Every internal "N business days ago" calculation respects South African public holidays (Good Friday, Family Day, Freedom Day, Workers' Day, Youth Day, Women's Day, Heritage Day, Day of Reconciliation, Christmas, Day of Goodwill) in addition to weekends. We use the holidays Python package with the ZA country code — it handles the Sunday-to-Monday observance shift mandated by the SA Public Holidays Act.
Consequences: the JSE backfill script skips known no-data dates; ingest_jse.py walks back through SA business days when the current day's file isn't up yet; and the RSB prediction panel reports "observed / expected SA business days month-to-date" so you can see at a glance whether the data pipeline has caught up.
html_archive/ so any parsing regression can be replayed against the original page.source_runs / ingestion_log records every fetch with its HTTP code, row count and status; surfaced via /api/v1/ingest/status.bond_maturity carries mixed date formats (legacy DD/MM/YYYY vs JSE YYYY-MM-DD) — parse defensively.API data under CC BY 4.0 — please attribute "Data: rbond.co.za". Source code under MIT. No paywalls, no contracts, no rate-limit walls unless you're hammering it.
All rates, spreads and derived metrics published on rbond.co.za are provided on an errors-and-omissions-excepted (E&OE) basis. Data is sourced in good faith from the JSE YieldX Daily Stats file, the South African Reserve Bank, and admin-curated spreadsheets; we make no warranty — express or implied — as to its accuracy, completeness, timeliness or fitness for any particular purpose.
Quotes are close-of-day mark-to-market, not live, and may differ from the prints your dealer gives you. Forward rates, breakevens and synthetic curves (ZARGB, ZARGBIL) are derived from observed instruments via the methods documented above and carry additional model risk.
Nothing published here constitutes investment, tax, accounting or legal advice. This site is a research and education resource. Do not trade, price, hedge, or settle any instrument solely on the basis of numbers displayed here. Use at your own risk; verify against your prime broker, custodian, or the primary source before taking action. Neither rbond.co.za nor its curator accepts liability for any loss, direct or consequential, arising from reliance on this information.
Enter the admin key (matches RBOND_ADMIN_KEY on the backend). Stored only in this browser via sessionStorage.