DEV Community

Cover image for Building with South African Government Tender Data: A Look at the Tenders-SA API
mobius-crypt
mobius-crypt

Posted on

Building with South African Government Tender Data: A Look at the Tenders-SA API

If you've ever tried to track South African government tenders programmatically, you know the pain: data scattered across eTenders, municipal portals, and SOE websites, with no consistent format. Tenders-SA set out to fix that, and they've opened up a REST API that gives developers structured access to tenders, awards, companies, and government organizations — enriched with AI-generated summaries and B-BBEE analytics.

Here's a practical walkthrough of what the API offers and how to start using it.

Two tiers of access

Tenders-SA actually exposes API access in two different ways, and it's worth knowing the difference:

  1. Public widget API (https://www.tenders-sa.org/api/widgets/*) — no auth required, free, designed for embedding sector trends, leaderboards, and a live award feed into your own site.
  2. Full Developer API (https://api.tenders-sa.org/v1) — requires a Bearer token from a Professional or Enterprise subscription, and gives you 19 endpoints across 6 resource groups: tenders, awards, companies, organizations, analysis/estimates, and meta.

This post focuses on the full Developer API, since that's where the interesting data lives.

Authentication

Every authenticated request needs a Bearer token in the header:

curl -H "Authorization: Bearer tsa_prod_YOUR_API_KEY" \
  "https://api.tenders-sa.org/v1/tenders?category=ict-technology&limit=10"
Enter fullscreen mode Exit fullscreen mode

Keys are generated from your dashboard once you're on a paid plan. Professional gives you 500 requests/day (15k/month) across up to 3 keys; Enterprise bumps that to 10,000/day (300k/month) across 25 keys. Every response includes rate limit headers so you can track consumption without guessing — or just hit /v1/meta/usage for a direct readout.

Core resources

Tenders

GET /v1/tenders is the main search endpoint, supporting filters like category, province, status, closingAfter/closingBefore, minValue/maxValue, and full-text q. Each tender comes enriched with an AI summary, key requirements extracted from the source documents, and a value estimate with a confidence score:

import requests

response = requests.get(
    'https://api.tenders-sa.org/v1/tenders',
    params={'category': 'ict-technology', 'province': 'gauteng', 'limit': 10},
    headers={'Authorization': 'Bearer tsa_prod_YOUR_API_KEY'}
)
data = response.json()
Enter fullscreen mode Exit fullscreen mode

There's also a dedicated /v1/tenders/search for full-text queries, plus sub-resources per tender: /documents, /awards, /timeline, /analysis, and /value-estimate. The /analysis endpoint is particularly useful — it returns structured evaluation criteria, submission guidelines, technical specs, and compliance requirements pulled straight from the tender document by an AI extraction pipeline.

Awards

GET /v1/awards lets you filter award data by supplier, enterprise type (EME/QSE/Large), B-BBEE level, amount range, and award date. Each award record includes subcontractor breakdowns with B-BBEE designations (black youth-owned, women-owned, etc.), which is handy if you're building procurement transparency or compliance tooling.

There's also /v1/awards/analytics, which returns pre-aggregated stats grouped by enterpriseType, beeLevel, province, category, or time period — cached for 6 hours, so it's cheap to poll for dashboards.

Companies

GET /v1/companies/{name} builds a full company profile from aggregated award history: B-BBEE level, CIDB grading, compliance score, a forensic risk score, director listings, and contact details. /v1/companies/search lets you query by partial name with the same filter set as awards.

Organizations

GET /v1/organizations/{id} returns enriched buyer profiles — government departments, municipalities, SOEs — pulling from OCDS, Wikidata, SALGA, and CSD data sources. You get organization type classification, contact info, and tender stats in one call. /tenders on the same resource lists everything that organization has published.

Meta endpoints

A few endpoints don't require auth at all: /v1/meta/status (system health and last sync times per data table) and /v1/meta/provinces (province-level tender counts). Good for health checks or populating filter UIs without burning your rate limit.

SDKs

If you'd rather not hand-roll HTTP calls, official SDKs are available:

npm install @tenders-sa-org/sdk-js   # TypeScript
pip install tendersa-sdk             # Python
npm install -g @tenders-sa-org/cli   # CLI
Enter fullscreen mode Exit fullscreen mode

There are also standalone npm packages for the public widgets (@tenders-sa-org/widget-heatmap, widget-sector-trends, widget-top-companies, widget-winners-feed) if you just want to drop a tender heatmap or leaderboard into a page without writing fetch logic yourself.

A quick example: tracking ICT tenders in Gauteng

import requests

API_KEY = "tsa_prod_YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

resp = requests.get(
    "https://api.tenders-sa.org/v1/tenders",
    params={
        "category": "ict-technology",
        "province": "gauteng",
        "status": "active",
        "sort": "-closing_date",
        "limit": 20,
    },
    headers=HEADERS,
)
tenders = resp.json()["data"]

for t in tenders:
    print(f"{t['title']} — closes {t['closingDate']}")
    print(f"  Est. value: R{t['estimatedValue']['median']:,}")
    print(f"  AI summary: {t['aiSummary']}")
Enter fullscreen mode Exit fullscreen mode

Pair that with /v1/tenders/{id}/analysis and you can build something like an automated bid-readiness checker that flags missing compliance documents before a deadline.

Final thoughts

What stands out about this API compared to most government-data wrappers is the enrichment layer — AI summaries, extracted compliance requirements, value estimates with stated methodology, and forensic risk scoring on companies. That's a lot of the manual reading procurement teams normally do, already done for you.

If you're building anything in the SA GovTech or compliance space — tender alert tools, supplier risk dashboards, BEE analytics — it's worth a look at the developer docs directly, since endpoint details and rate limits may evolve.

Top comments (0)