# 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zimbabwe PRAZ Tender Scraper & Bid Intelligence",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "8maFbNq8ipgRBUsCO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/balm_erasers~zimbabwe-praz-tender-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-balm_erasers-zimbabwe-praz-tender-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/balm_erasers~zimbabwe-praz-tender-scraper/runs": {
            "post": {
                "operationId": "runs-sync-balm_erasers-zimbabwe-praz-tender-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/balm_erasers~zimbabwe-praz-tender-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-balm_erasers-zimbabwe-praz-tender-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrl",
                    "maxItems"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "The PRAZ eGP bulletin board URL to scrape. Leave the default unless PRAZ changes its public bulletin board route.",
                        "default": "https://egp.praz.org.zw/Indexes/index"
                    },
                    "maxItems": {
                        "title": "Maximum tenders",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of tender records to save from the current listing page.",
                        "default": 50
                    },
                    "keyword": {
                        "title": "Keyword filter",
                        "type": "string",
                        "description": "Optional keyword filter. Searches tender title, buyer, category, reference number, status, procurement method, and class of procurement. Examples: construction, ICT, medical, cleaning, ZETDC.",
                        "default": ""
                    },
                    "onlyOpen": {
                        "title": "Only open tenders",
                        "type": "boolean",
                        "description": "If enabled, the Actor only returns tenders with active/open-type statuses.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
