Why Embed Live Tender Data on Your South African Website?
South African government procurement data is a public resource — but most websites don't surface it. If you run an industry blog, news site, or business directory, embedding live tender data adds real utility for your audience.
Procurement Data Is a Public Resource — Why Isn't It on More Websites?
Every week, South African government departments publish thousands of tender notices and contract awards worth billions of rand. This data is a matter of public record — published through official OCDS (Open Contracting Data Standard) feeds, departmental portals, and the Government Tender Bulletin.
Despite its public nature, this information is notoriously difficult to consume. It is scattered across dozens of sources, buried in PDF documents, and rarely presented in a format that non-specialists can use. Most industry websites, blogs, and business directories do not surface procurement data at all — even though their audiences would find it directly useful.
Tenders-SA.org solves the distribution problem. We aggregate, enrich, and surface procurement data through a set of embeddable widgets and a public REST API — so that any website, blog, or platform can display live tender information alongside their own content.
Who Benefits from Tender Data on Their Website?
The audience is broader than you might expect. Here are concrete examples of who benefits and why:
| Website Type | Audience Need | What Tender Data Provides |
|---|---|---|
| Construction industry blog | Subscribers need to find projects to bid on | Live list of active construction tenders by province and value |
| Regional business directory | Local SMMEs looking for government contracts | Heatmap of tender activity in their province with sector breakdown |
| ICT / technology news site | Tech companies tracking government digital spend | IT tender awards, spending trends, and winning suppliers |
| Industry association portal | Members need market intelligence | Sector-level award analytics and supplier leaderboards |
| Municipal / community news | Residents and local businesses want procurement transparency | Recent awards published by local government entities |
| Research and analysis platforms | Analysts tracking public spending patterns | Aggregated award data grouped by enterprise type, BEE level, and category |
If your website serves any of these audiences — or if you operate in a sector where government procurement is relevant — then displaying live tender data is a value-add for your readers.
Two Ways to Integrate: Widgets and API
Tenders-SA provides two tiers of integration, depending on how much control and data volume you need.
Option 1: Embeddable Widgets (No Code Required)
For most publishers, the widget path is the fastest way to get live data on your site. Four open-source widgets are available, each targeting a specific data view:
- Heatmap Widget — Province-level colour-coded heatmap showing where active tenders are concentrated across all nine provinces. Useful for geographic analysis. github.com/Tenders-SA/widget-heatmap
- Sector Trends Widget — SVG bar chart showing tender volume and value grouped by industry sector. No external chart libraries required. github.com/Tenders-SA/widget-sector-trends
- Top Companies Widget — Ranked leaderboard of suppliers by total award value, filterable by province, category, and year. github.com/Tenders-SA/widget-top-companies
- Winners Feed Widget — A live feed of the most recently awarded contracts with supplier names, amounts, and procuring entities. github.com/Tenders-SA/widget-winners-feed
Each widget is a zero-dependency JavaScript package published on npm under the @tenders-sa-org scope. You can install them via npm for framework integration or embed them via CDN script tags for a simple drop-in approach. Widgets auto-initialise through HTML data attributes — no JavaScript configuration needed.
For example, embedding the Heatmap widget on your page requires just a container element and a script tag:
1<div data-tendersa-heatmap 2 data-theme="light" 3 data-province="gauteng" 4 style="width: 100%; min-height: 300px;"> 5</div> 6<script src="https://unpkg.com/@tendersaorg/widget-heatmap@latest"></script>HTML
The widgets fetch data from the Tenders-SA public widget API (/api/widgets/*), which is CORS-enabled and currently open — no API key required for widget data. The widget API documentation is available at tenders-sa.org/publishers/developers.
Option 2: The Developer API (Programmatic Access)
If you need more than pre-built widgets — for example, you want to build a custom dashboard, feed tender data into a CRM, run market analysis, or build your own integrated experience — the Tenders-SA Developer API gives you direct access to the full dataset.
The API is structured into five resource groups:
- Tenders — List, search, get detail, documents, awards, timeline, AI analysis, and value estimates for every tender in the system.
- Awards — Search awarded contracts with filters for supplier, province, category, value range, and BEE level. Includes aggregated analytics grouped by enterprise type and geographic region.
- Companies — Company intelligence profiles with award history, contract values, and procurement compliance data.
- Organisations — Procurement body profiles with contact information and their published tender history.
- Meta — API health, province and category lists with tender counts, and your usage statistics.
The API base URL is https://api.tenders-sa.org/v1. Authentication is via Bearer token (tsa_prod_ format), and API keys are generated through the Developer Portal. A full reference is available at tenders-sa.org/publishers/developers.
Official SDKs: Three Languages, One Interface
To make integration seamless, we provide official SDKs that handle authentication, pagination, error mapping, rate limit tracking, and retry logic. All three are open source under the MIT license.
| SDK | Language | Package | Repository |
|---|---|---|---|
| @tenders-sa-org/sdk-js | TypeScript / JavaScript | npm | github.com/Tenders-SA/js |
| tendersa-sdk | Python (async) | PyPI | github.com/Tenders-SA/python |
| @tenders-sa-org/cli | CLI (wraps JS SDK) | npm | github.com/Tenders-SA/cli |
A common pattern for TypeScript users looks like this:
1import { TendersaClient } from '@tenders-sa-org/sdk-js' 2 3const client = new TendersaClient({ apiKey: 'tsa_prod_your_key' }) 4 5// List open tenders 6const { data } = await client.tenders.list({ 7 status: 'OPEN', 8 province: 'Western Cape', 9}) 10 11for (const tender of data) { 12 console.log(`${tender.title} — closes ${tender.closingDate}`) 13}TYPESCRIPT
And the equivalent in Python:
1import asyncio 2from tendersa import TendersaClient 3 4async def main(): 5 client = TendersaClient(api_key="tsa_prod_your_key") 6 tenders = await client.tenders.list({ 7 "status": "OPEN", 8 "province": "Gauteng", 9 }) 10 for t in tenders.data: 11 print(t.title, t.estimated_value) 12 await client.close() 13 14asyncio.run(main())PYTHON
What Makes This Data Different from What Government Portals Provide?
Raw OCDS data from government feeds is useful, but it comes with limitations that make it hard to use directly in a production application:
- Incomplete fields — Many tenders are missing values, categories, or closing dates in the source feed.
- Inconsistent formatting — Province names, sector labels, and status values vary across different issuing departments.
- No enrichment — Raw OCDS data does not include summaries, requirement extraction, or value estimation.
- Document links expire — Government document URLs become unreliable after a tender closes.
- No analytics — Raw data has no aggregated views, trend analysis, or company intelligence.
Tenders-SA addresses each of these through its AI enrichment pipeline. Every ingested tender is processed through classification, value estimation, summary generation, requirement extraction, and category mapping. The result is a dataset that is ready for consumption — not a firehose of raw XML that needs hours of cleaning.
Practical Use Cases for Website Owners
Here is how different websites are already using Tenders-SA data:
- A construction news site embeds the Sector Trends widget on its market analysis page. Readers see which sectors have the most active tenders and can click through to the interactive view for deeper filtering.
- A provincial business directory embeds the Heatmap widget on each province page. A visitor browsing Eastern Cape businesses sees a live count of active tenders in the province alongside the directory listings.
- A technology publication uses the API to pull IT tender data weekly. They publish a recurring "Government IT Spend" column with actual numbers — sourced directly from the API via the Python SDK.
- A municipal news blog embeds the Winners Feed widget to show which suppliers won contracts in their coverage area. This turns procurement transparency into local journalism.
In every case, the website is adding a data layer that its audience finds genuinely useful — without building data pipelines, writing scrapers, or maintaining integrations with dozens of government portals.
Data Freshness and Reliability
Tenders-SA ingests procurement data from official OCDS feeds provided by the South African government. This includes feeds from National Treasury's eTenders portal, major SOEs (Eskom, Transnet, SANRAL), and multiple provincial and municipal systems. Data is synced continuously, and the widget APIs serve from a caching layer that ensures fast response times.
The widget endpoints are rate-limited per IP (60 requests per minute) to maintain stability. The Developer API uses per-key rate limits tied to subscription plans, with rate limit status exposed in both response headers and body metadata.
All endpoints support sparse fields — you request only the data you need, reducing payload size and speeding up response times on lower-bandwidth connections.
Getting Started
If you run a website that serves South African businesses, industry professionals, or anyone with an interest in public procurement, here are the steps to start:
- Visit the Publishers Portal to explore available widgets and see live demos.
- Choose a widget — Heatmap, Sector Trends, Top Companies, or Winners Feed — and pick your embed method (CDN script tag or npm package).
- Add the container element and script tag to your page, configure optional data attributes for province, category, theme, and limit.
- If you need programmatic access, generate an API key from the Developer Portal and choose an SDK.
- Check the full API documentation at tenders-sa.org/publishers/developers.
All widget source code is on GitHub under the Tenders-SA organisation. The SDK repositories are github.com/Tenders-SA/js, github.com/Tenders-SA/python, and github.com/Tenders-SA/cli. Issues, feature requests, and contributions are welcome.
Tags
Based on this article's topics, here are some current tenders that might interest you
Request for Proposals (RFP) The Provision of Underwater Measurement Capabilities and Technical Expertise Related to the Development and Testing of Maritime Technology and Underwater Sensors with the CSIR for a Period of 5 Years.
The request - technology innovation
Want to see all available tenders?
Browse All Tenders →Share this article
Why Embed Live Tender Data on Your South African Website?
South African government procurement data is a public resource — but most websites don't surface it. If you run an industry blog, news site, or business directory, embedding live tender data adds real utility for your audience.