{
  "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.4",
    "x-build-id": "7kQTiaVR3iRSuGfio"
  },
  "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": "Public PRAZ eGP bulletin board URL.",
            "default": "https://egp.praz.org.zw/Indexes/index"
          },
          "maxItems": {
            "title": "Maximum tenders",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of records saved to the dataset.",
            "default": 50
          },
          "maxPages": {
            "title": "Maximum pages",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum bulletin-board pages to inspect.",
            "default": 1
          },
          "includeDetails": {
            "title": "Include tender detail pages",
            "type": "boolean",
            "description": "Visit individual tender pages for richer fields and requirement extraction.",
            "default": true
          },
          "keyword": {
            "title": "Keyword filter",
            "type": "string",
            "description": "Search title, reference, buyer, category, location, and verified requirements.",
            "default": ""
          },
          "buyerKeyword": {
            "title": "Buyer filter",
            "type": "string",
            "description": "Filter by procuring entity, such as ZETDC, a council, ministry, or agency.",
            "default": ""
          },
          "categoryKeyword": {
            "title": "Category filter",
            "type": "string",
            "description": "Filter by supplier category or category code.",
            "default": ""
          },
          "statusKeyword": {
            "title": "Status filter",
            "type": "string",
            "description": "Filter by status, for example Open.",
            "default": ""
          },
          "procurementMethodKeyword": {
            "title": "Procurement method filter",
            "type": "string",
            "description": "Filter by procurement method after detail enrichment.",
            "default": ""
          },
          "classOfProcurementKeyword": {
            "title": "Procurement class filter",
            "type": "string",
            "description": "Filter by Works, Goods, Services, or another public procurement class.",
            "default": ""
          },
          "businessCategory": {
            "title": "Business category filter",
            "type": "string",
            "description": "Filter generated categories such as Construction, ICT, Medical, Energy, or Other.",
            "default": ""
          },
          "onlyOpen": {
            "title": "Only open tenders",
            "type": "boolean",
            "description": "Keep only Open, Published, or Active tenders. Deadline scoring still detects expired dates.",
            "default": false
          },
          "minimumDaysRemaining": {
            "title": "Minimum days remaining",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Minimum days before closing; use 0 to disable.",
            "default": 0
          },
          "maximumDaysRemaining": {
            "title": "Maximum days remaining",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum days before closing; use 0 to disable.",
            "default": 0
          },
          "newOnly": {
            "title": "New and changed tenders only",
            "type": "boolean",
            "description": "Requires stateStoreId. Returns unseen tenders plus meaningful updates according to the monitoring options.",
            "default": false
          },
          "detectChanges": {
            "title": "Detect tender changes",
            "type": "boolean",
            "description": "Compare status, closing date, and a material tender fingerprint across runs when stateStoreId is configured.",
            "default": true
          },
          "includeStatusChanges": {
            "title": "Include status-change alerts",
            "type": "boolean",
            "description": "When newOnly is enabled, include existing tenders whose status changed.",
            "default": true
          },
          "stateStoreId": {
            "title": "Isolated monitoring state store ID",
            "type": "string",
            "description": "Optional user-owned Apify Key-Value Store ID or name. Use a separate store per customer or monitoring task. Leave blank to disable cross-run monitoring.",
            "default": ""
          },
          "resetSeenTenders": {
            "title": "Reset monitoring state",
            "type": "boolean",
            "description": "Clear the selected stateStoreId before this run. Requires stateStoreId.",
            "default": false
          },
          "memoryStoreName": {
            "title": "Legacy memory store name",
            "type": "string",
            "description": "Deprecated and ignored for isolation safety. Use stateStoreId instead.",
            "default": ""
          },
          "extractRequirements": {
            "title": "Extract tender requirements",
            "type": "boolean",
            "description": "Use deterministic rules to extract only requirement signals supported by accessible HTML or analyzed PDFs.",
            "default": true
          },
          "analyzeDocuments": {
            "title": "Analyze public PDF documents",
            "type": "boolean",
            "description": "Download and parse trusted, public PRAZ PDFs within the configured limits. Disabled by default for cost control.",
            "default": false
          },
          "maxDocumentsPerTender": {
            "title": "Maximum PDFs per tender",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum PDF files to analyze for each tender.",
            "default": 2
          },
          "maxDocumentSizeMB": {
            "title": "Maximum PDF size (MB)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Skip public PDFs larger than this limit.",
            "default": 10
          },
          "maxPdfBytes": {
            "title": "Legacy maximum PDF size (bytes)",
            "minimum": 0,
            "maximum": 52428800,
            "type": "integer",
            "description": "Deprecated compatibility input. Prefer maxDocumentSizeMB.",
            "default": 0
          },
          "documentTextMaxChars": {
            "title": "Maximum extracted document text",
            "minimum": 1000,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum characters retained from analyzed PDFs per tender.",
            "default": 12000
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}