{
  "openapi": "3.0.1",
  "info": {
    "title": "India Government Tenders — CPPP, GeM & State Portals",
    "description": "Live Indian government tenders from CPPP, GePNIC state portals and GeM: tender ID, title, organisation, category, EMD, tender value, location, deadlines, documents and a link that opens the tender. Plus GeM bid results with every seller's rank (L1, L2 …) and price.",
    "version": "0.1",
    "x-build-id": "AizZtmzVsgdoJQQQH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/foxlabs~india-government-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-foxlabs-india-government-tenders",
        "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/foxlabs~india-government-tenders/runs": {
      "post": {
        "operationId": "runs-sync-foxlabs-india-government-tenders",
        "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/foxlabs~india-government-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-foxlabs-india-government-tenders",
        "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": "Which procurement portals to read. The GePNIC portals (`eprocure`, `etenders_gov`, `tntenders`) give the full tender record — EMD, tender value, category, location, PIN code, documents, inviting authority — plus a link that opens the tender. `cppp_all` is the Central Public Procurement Portal's merged feed of every central portal (list fields: ID, title, organisation, dates). `gem_mirror` is GeM's open-bid list as mirrored by CPPP (works from anywhere). `gem_live` reads GeM itself and **needs an Apify Residential proxy with country India** — GeM does not answer non-Indian IPs (measured residential traffic about 3 KB per bid row — roughly $0.02 per 1,000 rows at $8/GB). Sources with full records run first; a tender listed by two sources is delivered once.",
            "items": {
              "type": "string",
              "enum": [
                "cppp_all",
                "eprocure",
                "etenders_gov",
                "tntenders",
                "gem_mirror",
                "gem_live"
              ],
              "enumTitles": [
                "CPPP — all central portals (latest active tenders, list fields)",
                "eprocure.gov.in — central GePNIC portal (full tender detail)",
                "etenders.gov.in — GePNIC portal (full tender detail)",
                "tntenders.gov.in — Tamil Nadu GePNIC portal (full tender detail)",
                "GeM open bids via the CPPP mirror (no India proxy needed)",
                "GeM live bids (needs India residential proxy)"
              ]
            },
            "default": [
              "cppp_all",
              "eprocure"
            ]
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "list_detail",
              "list",
              "awards"
            ],
            "type": "string",
            "description": "`list_detail` (default) opens each matching GePNIC tender for the full record — EMD, tender value, category, location, PIN code, documents, inviting authority. `list` stops at the list pages (far fewer requests, list fields only; a category filter still opens GePNIC tender pages, because the category is only shown there). `awards` switches to GeM **bid results**: one row per participating seller with rank (L1 = lowest price) and total price — needs the India residential proxy (measured about 8 KB of residential traffic per award row — roughly $0.07 per 1,000 rows at $8/GB).",
            "default": "list_detail"
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Keep tenders whose title, reference number or tender ID contains this text (case-insensitive). On the GeM mirror it is matched against the product category and bid number (the mirror has no title); on GeM live it is sent to GeM's own full-text search (items, BOQ title, category, department, ministry, city). Examples: `CCTV`, `road`, `laptop`."
          },
          "organisation": {
            "title": "Organisations",
            "type": "string",
            "description": "Keep tenders whose organisation, department or ministry contains one of these names (case-insensitive) — one name per line, e.g. `AIIMS`, `Railway`, `NHAI`. On the GePNIC portals only the matching organisations are visited, which makes the run much faster."
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "Keep tenders whose category contains these words — the portal's own product category on GePNIC (e.g. `Civil Works - Roads`, `Computer- H/W`, `Medicines`) and the product category on GeM. Words of 3 letters or fewer (like `IT`) match whole words only, so `IT` never matches `Items`; `IT` also covers the portals' `Information Technology`, `Info. Tech. Services` and `Computer- H/W`, `Computer- S/W`, `Computer- Data Processing` categories. Several categories: separate them with `|`. The category is only shown on the tender page, so GePNIC tenders are opened to check it, those whose titles look like the category first; CPPP list rows carry no category and are skipped when this is set."
          },
          "datePreset": {
            "title": "Published within",
            "enum": [
              "last_24_hours",
              "last_7_days",
              "last_30_days",
              "custom",
              "any"
            ],
            "type": "string",
            "description": "Time window on the tender's published date (bid start date on GeM). In `awards` mode it applies to the bid END date instead and is filtered by GeM itself.",
            "default": "last_7_days"
          },
          "dateFrom": {
            "title": "Custom range — from (YYYY-MM-DD)",
            "pattern": "^$|^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Only used when \"Published within\" is `custom`. Inclusive, Indian time."
          },
          "dateTo": {
            "title": "Custom range — to (YYYY-MM-DD)",
            "pattern": "^$|^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Only used when \"Published within\" is `custom`. Inclusive, Indian time. Leave empty for today."
          },
          "closingWithinDays": {
            "title": "Closing within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep only tenders that are still open and whose bid submission deadline falls within the next N days (e.g. `14` for two weeks). Leave empty for no deadline filter."
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many rows in total. The budget is shared across the selected sources; a source that finds fewer leaves its share to the others (the GePNIC portals are read at the same time). `0` = unlimited (bounded only by the scan limit below).",
            "default": 500
          },
          "maxScanPages": {
            "title": "Scan limit (pages per source)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Advanced. How many pages each source may read looking for matches: list pages on CPPP and GeM (10 tenders each), organisation lists on the GePNIC portals, and — with a category filter — GePNIC tender pages whose category did not match. Raise it for rare keywords or categories; lower it for quick runs. The run report says when this limit stopped a source.",
            "default": 50
          },
          "requestDelayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 500,
            "maximum": 10000,
            "type": "integer",
            "description": "Politeness delay against the public portals (per connection). GeM is always given at least 1,000 ms and one request at a time.",
            "default": 800
          },
          "maxConcurrency": {
            "title": "Concurrent requests",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "How many GePNIC pages — organisation lists and tender pages — to fetch at once on each portal. 2 is polite; 1 is safest. Either way a portal gets at most one new request per second.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "CPPP, the GeM mirror and the GePNIC portals work with the default Apify proxy (automatic). For `gem_live` or `awards` mode choose **Residential** with country **India (IN)** — GeM only answers Indian IPs. Measured residential traffic: about 3 KB per live bid row and 8 KB per award row (roughly $0.02 and $0.07 per 1,000 rows at $8/GB; TLS overhead not included). Without an Indian proxy the run stops within seconds with a summary row that says so.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": []
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}