# Egypt Government Tenders Monitor (`madwezza/egypt-government-tenders-monitor`) Actor

Monitor public Egypt government tender announcements from EPS-GAGS/EONEPS, with optional MCIT collection when reachable, and export normalized bid-ready procurement data.

- **URL**: https://apify.com/madwezza/egypt-government-tenders-monitor.md
- **Developed by:** [Omar Elwaziry](https://apify.com/madwezza) (community)
- **Categories:** Automation, E-commerce, Jobs
- **Stats:** 2 total users, 1 monthly users, 94.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Egypt Government Tenders Monitor

Monitor public Egypt government tender announcements and export normalized procurement records for bid tracking, market research, sales intelligence, and alerting workflows.

### What this Actor does

Egypt Government Tenders Monitor collects public tender announcements from selected Egyptian government procurement sources and converts them into structured dataset records.

It is designed for users who need an easier way to track public procurement opportunities, filter tenders by keyword or category, and export clean records for spreadsheets, databases, alerts, or downstream enrichment.

### Who it is for

- Companies tracking public procurement opportunities in Egypt
- Sales and business development teams monitoring new tenders
- Procurement consultants and bid teams
- Market researchers analyzing public-sector demand
- Developers building tender alerts, dashboards, or procurement data pipelines

### Sources

| Source key | Source | Notes |
|---|---|---|
| `epsGags` | EPS-GAGS / EONEPS public tender announcements | Enabled by default. |
| `mcit` | MCIT Egypt public tender listings | Optional source for ICT-related tender pages when reachable. |

### Data extracted

Records can include:

- Tender or operation reference number
- Original tender title as published
- Arabic title when detected
- English title when available
- Buyer or beneficiary entity when available
- Procurement type
- Operation type
- Selection method
- Publish date
- Submission deadline
- Status
- Category guess
- Keyword matches
- Official source URL
- Optional public detail fields from EPS-GAGS, when enabled
- Scrape timestamp
- Compliance notice

Optional EPS-GAGS detail enrichment can add fields such as stage, envelope type, opening place, bidding files, lots, and item tables when those fields are publicly available.

### Example input

```json
{
  "sources": ["epsGags"],
  "keywords": ["firewall", "حواسب", "software"],
  "categories": [],
  "maxItemsPerSource": 50,
  "includeEpsGagsDetails": false,
  "maxDetailItems": 10,
  "politeDelayMs": 1200,
  "requestTimeoutSecs": 30
}
````

### Input options

| Field | Type | Description |
|---|---:|---|
| `sources` | array | Public sources to collect. Use `epsGags` by default; add `mcit` when you want MCIT listings as well. |
| `keywords` | array | Optional words or phrases to match in tender titles, references, categories, or buyer text. Leave empty to return all visible records. |
| `categories` | array | Optional normalized categories such as `it_software`, `medical`, `logistics`, `vehicles`, `construction`, or `general_goods`. |
| `maxItemsPerSource` | integer | Maximum number of records to emit from each source. |
| `includeEpsGagsDetails` | boolean | Enables public EPS-GAGS detail enrichment for a capped number of records. Disabled by default to keep runs lighter. |
| `maxDetailItems` | integer | Maximum EPS-GAGS detail records to enrich when detail enrichment is enabled. |
| `politeDelayMs` | integer | Delay between source requests. Useful for respectful collection. |
| `requestTimeoutSecs` | integer | Timeout for each request. |

### Example output

```json
{
  "id": "epsgags-12345",
  "source_key": "epsGags",
  "source": "EPS-GAGS / EONEPS",
  "operation_no": "12345",
  "original_title": "توريد أجهزة وشبكات",
  "title_ar": "توريد أجهزة وشبكات",
  "title_en": null,
  "procurement_type": "مناقصة عامة",
  "operation_type": "توريد",
  "selection_method": "Public tender",
  "publish_date": "2026-01-01",
  "submission_deadline": "2026-01-15",
  "status": "Published",
  "category_guess": "it_hardware",
  "keyword_matches": ["حواسب"],
  "url": "https://www.eps-gags.gov.eg/...",
  "source_url": "https://www.eps-gags.gov.eg/...",
  "detail_enriched": false,
  "scraped_at": "2026-01-01T00:00:00.000Z",
  "compliance_notice": "Verify all tender details on the official source before making bidding decisions."
}
```

### Common use cases

- Track new public tender announcements in Egypt
- Monitor tenders matching specific products, services, or keywords
- Build internal bid-alert workflows
- Export procurement opportunities to spreadsheets or CRMs
- Analyze public-sector demand by category or buyer entity
- Feed tender records into dashboards or business intelligence tools

### Tips for best results

- Start with `epsGags` only for the most reliable default run.
- Use keyword filters for targeted monitoring, especially when tracking a specific product or service line.
- Keep detail enrichment disabled for broad scans and enable it only for smaller, capped runs.
- Increase `politeDelayMs` for larger runs.
- Always open the official source URL before making bidding, legal, or commercial decisions.

### Limitations

This Actor collects selected public pages visible without login. It does not access private supplier accounts, submit forms, bypass CAPTCHA, bypass access controls, scrape paywalled content, or provide legal or bid-qualification advice.

The Actor is not affiliated with any Egyptian government entity. Output completeness depends on what each public source exposes at run time. Users should verify deadlines, documents, eligibility requirements, and submission instructions on the official source before acting.

### Changelog

- `0.2` Added normalized public tender output, keyword/category filtering, and optional EPS-GAGS public detail enrichment.

# Actor input Schema

## `sources` (type: `array`):

Conservative public sources to collect. EPS-GAGS is enabled by default. MCIT is optional/experimental because the source can be unavailable from some cloud networks. v1 intentionally excludes sources that returned 403 or need login/session access.

## `keywords` (type: `array`):

Optional words/phrases to match in tender titles, reference numbers, categories, or buyer text. Empty means all records.

## `categories` (type: `array`):

Optional normalized categories, e.g. it\_software, medical, logistics, vehicles, food, agriculture, construction, facilities, real\_estate, general\_goods.

## `maxItemsPerSource` (type: `integer`):

Maximum records to emit from each source.

## `includeEpsGagsDetails` (type: `boolean`):

If enabled, safely opens public EPS-GAGS detail records through the visible public form. Disabled by default to keep request volume low.

## `maxDetailItems` (type: `integer`):

Maximum EPS-GAGS records to enrich with detail-page fields when detail enrichment is enabled.

## `politeDelayMs` (type: `integer`):

Delay between source requests. Keep this non-zero for respectful collection.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout.

## `userAgent` (type: `string`):

Descriptive User-Agent for polite public-page collection. Add your contact URL/email before publishing.

## Actor input object example

```json
{
  "sources": [
    "epsGags"
  ],
  "keywords": [],
  "categories": [],
  "maxItemsPerSource": 50,
  "includeEpsGagsDetails": false,
  "maxDetailItems": 10,
  "politeDelayMs": 1200,
  "requestTimeoutSecs": 30,
  "userAgent": "EgyptGovernmentTendersMonitor/0.2 (+https://apify.com)"
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset containing normalized public tender announcements and optional EPS-GAGS public detail enrichment.

## `runStats` (type: `string`):

Summary of parsed, emitted, failed, and detail-enriched source counts.

# 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 = {
    "sources": [
        "epsGags"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("madwezza/egypt-government-tenders-monitor").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 = { "sources": ["epsGags"] }

# Run the Actor and wait for it to finish
run = client.actor("madwezza/egypt-government-tenders-monitor").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 '{
  "sources": [
    "epsGags"
  ]
}' |
apify call madwezza/egypt-government-tenders-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=madwezza/egypt-government-tenders-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Egypt Government Tenders Monitor",
        "description": "Monitor public Egypt government tender announcements from EPS-GAGS/EONEPS, with optional MCIT collection when reachable, and export normalized bid-ready procurement data.",
        "version": "0.2",
        "x-build-id": "3P2fAr6TgiJMm6rde"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/madwezza~egypt-government-tenders-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-madwezza-egypt-government-tenders-monitor",
                "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/madwezza~egypt-government-tenders-monitor/runs": {
            "post": {
                "operationId": "runs-sync-madwezza-egypt-government-tenders-monitor",
                "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/madwezza~egypt-government-tenders-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-madwezza-egypt-government-tenders-monitor",
                "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",
                "properties": {
                    "sources": {
                        "title": "Sources",
                        "type": "array",
                        "description": "Conservative public sources to collect. EPS-GAGS is enabled by default. MCIT is optional/experimental because the source can be unavailable from some cloud networks. v1 intentionally excludes sources that returned 403 or need login/session access.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "epsGags"
                        ]
                    },
                    "keywords": {
                        "title": "Keyword filters",
                        "type": "array",
                        "description": "Optional words/phrases to match in tender titles, reference numbers, categories, or buyer text. Empty means all records.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "categories": {
                        "title": "Category filters",
                        "type": "array",
                        "description": "Optional normalized categories, e.g. it_software, medical, logistics, vehicles, food, agriculture, construction, facilities, real_estate, general_goods.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "maxItemsPerSource": {
                        "title": "Max items per source",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum records to emit from each source.",
                        "default": 50
                    },
                    "includeEpsGagsDetails": {
                        "title": "Include EPS-GAGS public detail enrichment",
                        "type": "boolean",
                        "description": "If enabled, safely opens public EPS-GAGS detail records through the visible public form. Disabled by default to keep request volume low.",
                        "default": false
                    },
                    "maxDetailItems": {
                        "title": "Max EPS-GAGS detail records",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum EPS-GAGS records to enrich with detail-page fields when detail enrichment is enabled.",
                        "default": 10
                    },
                    "politeDelayMs": {
                        "title": "Polite delay in milliseconds",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Delay between source requests. Keep this non-zero for respectful collection.",
                        "default": 1200
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout seconds",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Per-request timeout.",
                        "default": 30
                    },
                    "userAgent": {
                        "title": "User-Agent",
                        "type": "string",
                        "description": "Descriptive User-Agent for polite public-page collection. Add your contact URL/email before publishing.",
                        "default": "EgyptGovernmentTendersMonitor/0.2 (+https://apify.com)"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
