Skip to main content
Technology

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 TypeAudience NeedWhat Tender Data Provides
Construction industry blogSubscribers need to find projects to bid onLive list of active construction tenders by province and value
Regional business directoryLocal SMMEs looking for government contractsHeatmap of tender activity in their province with sector breakdown
ICT / technology news siteTech companies tracking government digital spendIT tender awards, spending trends, and winning suppliers
Industry association portalMembers need market intelligenceSector-level award analytics and supplier leaderboards
Municipal / community newsResidents and local businesses want procurement transparencyRecent awards published by local government entities
Research and analysis platformsAnalysts tracking public spending patternsAggregated 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:

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.

SDKLanguagePackageRepository
@tenders-sa-org/sdk-jsTypeScript / JavaScriptnpmgithub.com/Tenders-SA/js
tendersa-sdkPython (async)PyPIgithub.com/Tenders-SA/python
@tenders-sa-org/cliCLI (wraps JS SDK)npmgithub.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:

  1. Visit the Publishers Portal
    to explore available widgets and see live demos.
  2. Choose a widget — Heatmap, Sector Trends, Top Companies, or Winners Feed — and pick your embed method (CDN script tag or npm package).
  3. Add the container element and script tag to your page, configure optional data attributes for province, category, theme, and limit.
  4. If you need programmatic access, generate an API key from the Developer Portal
    and choose an SDK.
  5. 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

WidgetsEmbedOpen DataGovernment TendersPublishersWeb DevelopmentProcurement Data
AI-Powered Matching
Never Miss a Perfect Tender Again
Our AI analyzes thousands of tenders and finds the ones YOUR company can actually win
AI Match Scoring for every tender
Instant alerts for 85%+ matches
B-BBEE level optimization
Document readiness checks

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.

https://www.tenders-sa.org/blog/why-embed-tender-data-on-your-website