# Zimbabwe PRAZ Tender Scraper & Bid Intelligence (`balm_erasers/zimbabwe-praz-tender-scraper`) Actor

This Actor collects tender IDs, reference numbers, titles, procuring entities, categories, status, publish dates, closing dates, procurement methods, bid details, summaries, and direct source URLs for procurement monitoring, lead generation, and market research.

- **URL**: https://apify.com/balm\_erasers/zimbabwe-praz-tender-scraper.md
- **Developed by:** [Owen Chapinduka](https://apify.com/balm_erasers) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.05 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Zimbabwe PRAZ Tender Scraper & Bid Intelligence

Extract public tender opportunities from Zimbabwe's PRAZ eGP bulletin board.

### What this Actor does

This Actor scrapes public tender records from the Zimbabwe electronic Government Procurement system and returns clean structured data for procurement monitoring, supplier lead generation, tender alerts, and market research.

### Output includes

- Tender ID
- Tender reference number
- Tender title
- Procuring entity / buyer
- Supplier category
- Tender status
- Publish date
- Closing date
- Days remaining
- Procurement method
- Class of procurement
- Delivery/project location
- Bid form fee
- Bid security information
- Public document links where available
- Direct source URL
- Short tender summary

### Use cases

- Tender alert businesses
- Procurement consultants
- Construction suppliers
- ICT suppliers
- Medical suppliers
- Cleaning and security companies
- NGOs and donor-funded procurement teams
- Companies tracking Zimbabwe government opportunities

### Input options

- `startUrl` - PRAZ bulletin board URL
- `maxItems` - Maximum number of tenders to scrape
- `keyword` - Optional search filter, for example construction, medical, ICT, ZETDC
- `onlyOpen` - Return only open/active tenders

### Example output

````json
{
  "country": "Zimbabwe",
  "source": "PRAZ eGP",
  "tenderId": "39797",
  "tenderReferenceNumber": "ZETDC/INTER/22/2025",
  "title": "Construction of a 40km, 132kV Double Lynx line",
  "buyer": "ZIMBABWE ELECTRICITY TRANSMISSION AND DISTRIBUTION COMPANY",
  "status": "Open",
  "closingDate": "10-Jul-2026 10:00 AM",
  "procurementMethod": "Competitive Bidding Method",
  "classOfProcurement": "Work (Non Complex Works)",
  "sourceUrl": "https://egp.praz.org.zw/Indexes/viewLiveTenderDetails/39797"
}

# Actor input Schema

## `startUrl` (type: `string`):

The PRAZ eGP bulletin board URL to scrape. Leave the default unless PRAZ changes its public bulletin board route.
## `maxItems` (type: `integer`):

Maximum number of tender records to save from the current listing page.
## `keyword` (type: `string`):

Optional keyword filter. Searches tender title, buyer, category, reference number, status, procurement method, and class of procurement. Examples: construction, ICT, medical, cleaning, ZETDC.
## `onlyOpen` (type: `boolean`):

If enabled, the Actor only returns tenders with active/open-type statuses.

## Actor input object example

```json
{
  "startUrl": "https://egp.praz.org.zw/Indexes/index",
  "maxItems": 100,
  "keyword": "construction",
  "onlyOpen": false
}
````

# Actor output Schema

## `tenderResults` (type: `string`):

Structured public tender records extracted from the PRAZ eGP bulletin board.

## `bidDetails` (type: `string`):

Bid-related tender fields including bid form fee, bid security information, procurement class, and delivery location.

## `runSummary` (type: `string`):

Summary of the Actor run, including total saved tenders and scrape timestamp.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrl": "https://egp.praz.org.zw/Indexes/index",
    "maxItems": 20,
    "keyword": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("balm_erasers/zimbabwe-praz-tender-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrl": "https://egp.praz.org.zw/Indexes/index",
    "maxItems": 20,
    "keyword": "",
}

# Run the Actor and wait for it to finish
run = client.actor("balm_erasers/zimbabwe-praz-tender-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrl": "https://egp.praz.org.zw/Indexes/index",
  "maxItems": 20,
  "keyword": ""
}' |
apify call balm_erasers/zimbabwe-praz-tender-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=balm_erasers/zimbabwe-praz-tender-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8AVKxE8O1aQeQIh5y/builds/8maFbNq8ipgRBUsCO/openapi.json
