Comprehensive collection of JSE-listed company financial data assembled by reverse-engineering the JSE Client Portal's internal WCF APIs. Two major datasets cover 252 companies spanning 2012–2026.
Downloaded via WebstirService API. Annual integrated reports from JSE-listed companies.
Coverage increases over time — nearly complete from 2022+. The 2026 count is partial as the reporting season is still in progress.
Downloaded via SensService API. Stock Exchange News Service announcements with PDF attachments.
The API caps per-issuer results at 15, so historical data is deeper for less active issuers. The daily harvester (Mon–Fri 22:00 SAST) captures new announcements going forward, building a complete archive over time.
Cron job runs three passes each weeknight at 22:00 SAST:
Results are deduplicated, new PDFs downloaded, and the master index is updated. First run on 20 Mar 2026 captured 32 new announcements.
All services are WCF/JSON endpoints at clientportal.jse.co.za. They require HTTP/2, specific headers (Origin, Referer, X-Requested-With), and use POST with JSON payloads.
Only Integrated Reports (highlighted) have been downloaded. All other types are available using the same API with minimal code changes.
Provides index composition, instrument data, and historical views (1 month to 5 years). Could yield historical index membership and pricing data.
These services exist in the codebase but redirect to error pages:
| Data Type | API | Effort | Value |
|---|---|---|---|
| Annual Reports | WebstirService | Low | High — fills IR gaps |
| Interim / Final Results | WebstirService | Low | High — quarterly data |
| Trading Statements | WebstirService | Low | High — profit warnings |
| Circulars | WebstirService | Low | Medium — M&A, rights |
| Sustainability Reports | WebstirService | Low | Medium — ESG data |
| All other 10 doc types | WebstirService | Low | Varies |
| Index compositions | IndicesService | Medium | High — index membership |
| Issuer descriptions | CustomerRoleService | Low | Medium — sectors |
| Code | Company | IRs | SENS |
|---|---|---|---|
| 4SI | 4Sight Holdings | 5 | Yes |
| ABG | Absa Group | 11 | Yes |
| ACL | ArcelorMittal SA | 8 | Yes |
| ACS | Acsion | 8 | Yes |
| ACT | Afrocentric Investment | 8 | Yes |
| ADH | Advtech | 7 | Yes |
| ADR | Adcorp Holdings | 7 | Yes |
| ADW | African Dawn Capital | 3 | No |
| AEG | Aveng | 6 | Yes |
| AEL | Altron | 8 | Yes |
| AFE | AECI | 9 | Yes |
| AFH | Alexander Forbes | 12 | Yes |
| AFT | Afrimat | 8 | Yes |
| AGL | Anglo American | 5 | No |
| AME | African Media Entertainment | 3 | Yes |
| ANG | AngloGold Ashanti | 6 | Yes |
| ANH | Anheuser-Busch InBev | 8 | Yes |
| ANI | Afine Investments | 1 | Yes |
| AOO | African & Overseas Enterprises | 7 | Yes |
| APF | Accelerate Property Fund | 6 | Yes |
| APH | Alphamin Resources | 0 | Yes |
| APN | Aspen Pharmacare | 6 | Yes |
| APO | aReit Prop | 0 | No |
| ARIM | African Rainbow Minerals | 8 | Yes |
| ARL | Astral Foods | 8 | Yes |
| ART | Argent Industrial | 9 | Yes |
| ASO | ASP Isotopes | 0 | No |
| ATT | Attacq | 5 | Yes |
| AVI | AVI | 9 | Yes |
| AXX | Araxi | 7 | Yes |
| BAC | Africa Bitcoin Corporation | 0 | Yes |
| BATE | Brait | 8 | No |
| BCF | Bowler Metcalf | 2 | Yes |
| BEL | Bell Equipment | 8 | Yes |
| BHG | BHP Group | 4 | Yes |
| BID | Bid Corporation | 7 | Yes |
| BIK | Brikor | 8 | Yes |
| BLU | Blu Label | 8 | Yes |
| BOX | Boxer Retail | 1 | Yes |
| BRN | Brimstone Investment | 9 | No |
| BTI | British American Tobacco | 8 | Yes |
| BTN | Burstone Group | 10 | Yes |
| BVT | Bidvest Group | 6 | Yes |
| BWN | Balwin Properties | 6 | Yes |
| BYI | Bytes Technology | 4 | Yes |
| CAA | CA Sales Holdings | 3 | Yes |
| CAC | Cafca | 5 | Yes |
| CAT | Caxton & CTP | 5 | Yes |
| CCC | Cilo Cybin Holdings | 1 | Yes |
| CCD | Cell C Holdings | 0 | Yes |
| CFR | Richemont | 8 | Yes |
| CGR | Calgro M3 | 11 | Yes |
| CHP | Choppies Enterprises | 4 | Yes |
| CKS | Crookes Brothers | 7 | Yes |
| CLH | City Lodge Hotels | 5 | Yes |
| CLI | Clientele | 5 | Yes |
| CLS | Clicks Group | 11 | Yes |
| CMH | Combined Motor Holdings | 10 | Yes |
| CML | Coronation Fund Managers | 8 | Yes |
| CPI | Capitec Bank | 9 | Yes |
| CPP | Collins Property Group | 5 | No |
| CPR | Copper 360 | 2 | Yes |
| CSB | Cashbuild | 8 | Yes |
| CVW | Castleview Property Fund | 5 | Yes |
| DCP | Dis-Chem Pharmacies | 8 | Yes |
| DLT | Delta Property Fund | 6 | Yes |
| DNB | Deneb Investments | 9 | Yes |
| DPL | Dipula Properties | 7 | Yes |
| DRD | DRDGold | 8 | Yes |
| DSY | Discovery | 12 | Yes |
| DTC | Datatec | 4 | Yes |
| EEL | Efora Energy | 5 | No |
| ELI | Ellies Holdings | 4 | No |
| EMI | Emira Property Fund | 10 | Yes |
| EMN | eMedia Holdings | 7 | Yes |
| ENX | enX Group | 6 | Yes |
| EPE | EPE Capital Partners | 8 | Yes |
| EPS | Eastern Platinum | 1 | Yes |
| EQU | Equites Property Fund | 5 | Yes |
| EUZ | Europa Metals | 3 | Yes |
| EXP | Exemplar Reitail | 7 | Yes |
| EXX | Exxaro Resources | 7 | Yes |
| FBR | Famous Brands | 8 | Yes |
| FGL | Finbond Group | 7 | Yes |
| FOR | Fortress REIT | 7 | Yes |
| FSR | FirstRand | 11 | Yes |
| FTH | Frontier Transport | 8 | Yes |
| FVT | Fairvest | 9 | No |
| GCT | Greencoat Renewables | 0 | Yes |
| GFI | Gold Fields | 6 | Yes |
| GLN | Glencore | 9 | Yes |
| GML | Gemfields Group | 7 | Yes |
| GND | Grindrod | 5 | Yes |
| GPL | Grand Parade Investments | 8 | Yes |
| GRT | Growthpoint Properties | 8 | Yes |
| GTC | Globe Trade Centre | 6 | Yes |
| HAR | Harmony Gold | 8 | Yes |
| HCI | Hosken Consolidated | 10 | Yes |
| HDC | Hudaco Industries | 6 | Yes |
| HET | Heriot REIT | 7 | Yes |
| HLM | Hulamin | 7 | Yes |
| HMN | Hammerson | 7 | Yes |
| HUG | Huge Group | 8 | Yes |
| HYP | Hyprop Investments | 4 | Yes |
| IMP | Impala Platinum | 7 | Yes |
| INL | Investec | 6 | Yes |
| INP | Investec plc | 5 | Yes |
| IOC | iOCO | 9 | Yes |
| ISA | ISA Holdings | 6 | Yes |
| ISB | Insimbi Industrial | 5 | Yes |
| ITE | Italtile | 9 | Yes |
| IVT | Invicta Holdings | 8 | Yes |
| JBL | Jubilee Metals | 3 | Yes |
| JSE | JSE Limited | 8 | Yes |
| KAL | KAL Group | 6 | Yes |
| KAP | KAP | 11 | Yes |
| KBO | Kibo Energy | 3 | No |
| KIO | Kumba Iron Ore | 9 | Yes |
| KP2 | Kore Potash | 4 | Yes |
| KRO | Karooooo | 5 | Yes |
| KST | PSG Financial Services | 7 | Yes |
| LAB | Labat Africa | 6 | Yes |
| LBR | Libstar Holdings | 5 | Yes |
| LEW | Lewis Group | 4 | Yes |
| LHC | Life Healthcare | 10 | Yes |
| LSK | Lesaka Technologies | 5 | Yes |
| LTE | Lighthouse Properties | 7 | Yes |
| MCZ | MC Mining | 4 | Yes |
| MDI | Master Drilling | 9 | Yes |
| MHB | Mahube Infrastructure | 8 | Yes |
| MKR | Montauk Renewables | 4 | Yes |
| MMP | Marshall Monteagle | 4 | Yes |
| MNP | Mondi | 5 | Yes |
| MPT | Mpact | 8 | Yes |
| MRF | Merafe Resources | 10 | Yes |
| MRP | Mr Price Group | 6 | Yes |
| MSP | MAS plc | 7 | Yes |
| MST | Mustek | 7 | Yes |
| MTA | Metair Investments | 9 | Yes |
| MTH | Motus Holdings | 6 | Yes |
| MTM | Momentum Group | 7 | Yes |
| MTN | MTN Group | 10 | Yes |
| MTU | Mantengu | 6 | Yes |
| N91 | Ninety One plc | 4 | Yes |
| NCS | Nictus | 6 | Yes |
| NED | Nedbank Group | 9 | Yes |
| NPH | Northam Platinum | 4 | Yes |
| NPK | Nampak | 7 | Yes |
| NPN | Naspers | 9 | Yes |
| NRL | Newpark REIT | 6 | Yes |
| NRP | NEPI Rockcastle | 5 | Yes |
| NTC | Netcare | 6 | Yes |
| NTU | Nutun | 8 | Yes |
| NVS | Novus Holdings | 7 | Yes |
| NWL | Nu-World Holdings | 9 | Yes |
| NY1 | Ninety One Limited | 5 | Yes |
| OAO | Oando | 1 | No |
| OAS | Oasis Crescent Property | 6 | Yes |
| OCE | Oceana Group | 5 | Yes |
| OCT | Octodec Investments | 8 | Yes |
| OML | Old Mutual | 6 | Yes |
| OMN | Omnia Holdings | 9 | Yes |
| ORN | Orion Minerals | 5 | Yes |
| OUT | OUTsurance Group | 8 | Yes |
| PAN | Pan African Resources | 11 | Yes |
| PBT | PBT Holdings | 9 | Yes |
| PHP | Primary Health Properties | 2 | Yes |
| PIK | Pick n Pay | 5 | Yes |
| PMR | Premier Group | 3 | Yes |
| PMV | Primeserv Group | 7 | Yes |
| PPC | PPC | 7 | Yes |
| PPE | Purple Group | 6 | Yes |
| PPH | Pepkor Holdings | 8 | Yes |
| PPR | Putprop | 9 | Yes |
| PRX | Prosus | 6 | Yes |
| PWR | Powerfleet | 1 | Yes |
| QFH | Quantum Foods | 5 | Yes |
| QLT | Quilter | 5 | Yes |
| RBO | Rainbow Chicken | 2 | Yes |
| RBX | Raubex Group | 4 | Yes |
| RCL | RCL Foods | 10 | Yes |
| RDF | Redefine Properties | 3 | Yes |
| REM | Remgro | 8 | Yes |
| RES | Resilient REIT | 6 | Yes |
| RFG | RFG Holdings | 11 | Yes |
| RHB | RH Bophelo | 7 | Yes |
| RLO | Reunert | 5 | Yes |
| RMH | RMB Holdings | 5 | Yes |
| RNG | Randgold & Exploration | 8 | Yes |
| RNI | Reinet Investments | 7 | Yes |
| RTO | Rex Trueform Group | 7 | Yes |
| S32 | South32 | 10 | Yes |
| SAC | SA Corporate Real Estate | 7 | Yes |
| SAP | Sappi | 7 | No |
| SBK | Standard Bank Group | 10 | Yes |
| SBP | Sabvest Capital | 4 | Yes |
| SCD | Schroder European REIT | 5 | Yes |
| SDL | Southern Palladium | 3 | Yes |
| SDO | Stadio Holdings | 8 | Yes |
| SEA | Spear REIT | 9 | Yes |
| SEB | Sebata Holdings | 11 | No |
| SEP | Sephaku Holdings | 11 | Yes |
| SHG | Sea Harvest Group | 6 | Yes |
| SHP | Shoprite Holdings | 6 | Yes |
| SKA | Shuka Minerals | 0 | Yes |
| SLG | Salungano Group | 8 | Yes |
| SLM | Sanlam | 6 | Yes |
| SNT | Santam | 8 | Yes |
| SNV | Santova | 6 | Yes |
| SOH | South Ocean Holdings | 2 | Yes |
| SOL | Sasol | 10 | Yes |
| SPG | Super Group | 10 | Yes |
| SPP | The Spar Group | 4 | Yes |
| SRE | Sirius Real Estate | 8 | Yes |
| SRI | Supermarket Income REIT | 1 | Yes |
| SSK | Stefanutti Stocks | 9 | Yes |
| SSS | Stor-Age Property REIT | 8 | Yes |
| SSU | Southern Sun | 6 | Yes |
| SSW | Sibanye Stillwater | 6 | Yes |
| SUI | Sun International | 7 | Yes |
| SUR | Spur Corporation | 6 | Yes |
| SXM | Sable Exploration & Mining | 5 | No |
| SYG | Sygnia | 8 | Yes |
| TBS | Tiger Brands | 10 | No |
| TEX | Texton Property Fund | 9 | Yes |
| TFG | The Foschini Group | 7 | Yes |
| TGA | Thungela Resources | 4 | Yes |
| THA | Tharisa | 10 | Yes |
| TKG | Telkom SA | 7 | Yes |
| TLM | Telemasters Holdings | 5 | Yes |
| TMT | Trematon Capital | 7 | Yes |
| TON | Tongaat Hulett | 4 | No |
| TPC | Transpaco | 8 | Yes |
| TRL | Trellidor Holdings | 10 | Yes |
| TRU | Truworths International | 7 | Yes |
| TSG | Tsogo Sun | 8 | Yes |
| TTO | Trustco Group | 10 | No |
| UPL | Universal Partners | 5 | Yes |
| VAL | Valterra Platinum | 8 | Yes |
| VIS | Visual International | 6 | Yes |
| VKE | Vukile Property Fund | 8 | Yes |
| VOD | Vodacom Group | 8 | Yes |
| VUN | Vunani | 9 | Yes |
| WBC | We Buy Cars | 1 | Yes |
| WBO | Wilson Bayly Holmes-Ovcon | 5 | Yes |
| WEZ | Wesizwe Platinum | 8 | No |
| WHL | Woolworths Holdings | 9 | Yes |
| WVR | Weaver Fintech | 11 | Yes |
| XII | Numeral | 1 | Yes |
| YRK | York Timber | 12 | Yes |
| ZED | Zeder Investments | 10 | Yes |
| ZZD | Zeda | 3 | Yes |
An additional ~138 issuers have SENS data but no IRs (mostly non-equity issuers: bonds, preference shares, ETFs).
Two-pass self-hosted pipeline on RunPod using vLLM for high-throughput inference. All processing stays on private GPU instances — no data leaves your infrastructure.
Pass 1 processes every page through Chandra 9B for full text and table extraction. Pass 2 runs the heavier Qwen 72B model on financial statement pages only (~15% of IR pages, ~50% of SENS pages) to cross-verify extracted numbers, flag discrepancies, and ensure data integrity on high-value content.
1,645 PDFs × ~120 pages = ~197,400 pages
| Pass | Model | Pages | GPU-Hours | Instances | Wall-Clock | Cost Range |
|---|---|---|---|---|---|---|
| Pass 1 | Chandra 9B | 197,400 | 329 hrs | 4× A100 | ~3.4 days | $540 – $819 |
| Pass 2 | Qwen 72B (AWQ) | 29,610 (15%) | 247 hrs | 2× A100 | ~5.1 days | $405 – $615 |
| IR Total | 576 hrs | ~8.5 days | $945 – $1,434 | |||
5,930 PDFs × ~3 pages = ~17,790 pages
| Pass | Model | Pages | GPU-Hours | Instances | Wall-Clock | Cost Range |
|---|---|---|---|---|---|---|
| Pass 1 | Chandra 9B | 17,790 | 30 hrs | 4× A100 | ~7.4 hrs | $49 – $75 |
| Pass 2 | Qwen 72B (AWQ) | 8,895 (50%) | 74 hrs | 2× A100 | ~1.5 days | $121 – $184 |
| SENS Total | 104 hrs | ~2.2 days | $170 – $259 | |||
| Issue | Impact | Mitigation |
|---|---|---|
| SENS 15-per-issuer cap | Historical SENS for active issuers is incomplete | Daily harvester builds forward; no archive API exists |
| SENS date window (~4 days) | Can't backfill old SENS by date range | Per-issuer endpoint partially compensates |
| 10 unmatched IR companies | Can't link AGL, TBS, SAP etc. to SENS MasterIDs | Manual MasterID lookup or fuzzy name matching |
| 19 IR companies without SENS | Missing SENS for Tiger Brands, Sappi, Anglo American | Likely delisted/suspended or alpha code mismatch |
| Dead archive services | SensArchiveService, SensSearchService unavailable | No known workaround |
| Webstir limited to 15 doc types | Limited to what JSE portal offers | Supplement with company IR pages |
| No historical index composition | IndicesService not yet explored | Needs further API investigation |
Decided Processing approach: Two-pass pipeline — Chandra 9B extraction + Qwen 72B integrity verification on RunPod A100 80GB instances.