# GeM Global Tender Scraper (`automation-lab/gem-global-tender-scraper`) Actor

🔎 Search public GeM Global Tender Enquiries and export bid numbers, buyer ministries and departments, quantities, deadlines, statuses, high-value flags, and official document links.

- **URL**: https://apify.com/automation-lab/gem-global-tender-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## GeM Global Tender Scraper

Search and export public **Government e-Marketplace Global Tender Enquiries (GTE)** as clean procurement records.

Use this Apify Actor to monitor active, evaluated, or awarded global tenders without copying rows from the GeM website by hand.

It returns bid numbers, titles, quantities, ministries, departments, deadlines, high-value flags, status metadata, and official bid-document links.

> Scope note: this Actor covers the public **Global Tender Enquiry** surface at `bidplus-global.gem.gov.in`. It does not claim the broader routine GeM inventory on other hosts.

### What does GeM Global Tender Scraper do?

The Actor turns GeM's public GTE search into a repeatable dataset.

It can:

- 🔎 search tender titles, bid numbers, categories, ministries, and departments by keyword;
- 🎯 use contains or exact keyword matching;
- 📌 collect ongoing, technically evaluated, financially evaluated, or awarded bids;
- 💰 restrict results to records GeM marks as high value;
- 📅 filter and sort by bid deadlines;
- 🔗 create canonical links to official GeM bid or reverse-auction documents;
- ♻️ deduplicate records by bid number;
- 📦 export results through datasets, APIs, webhooks, and integrations.

### Who is this tender scraper for?

#### Suppliers and manufacturers

Discover global procurement opportunities related to your products before deadlines pass.

#### B2G sales teams

Feed new GeM opportunities into a lead queue and assign them by ministry, department, category, or closing date.

#### Bid consultants

Monitor several client themes on a schedule and export a consistent shortlist instead of repeating manual searches.

#### Procurement-intelligence teams

Track which ministries publish or award global tenders and retain timestamped snapshots for analysis.

#### Market researchers

Study categories, buyer organizations, quantities, and tender timing from a structured public source.

### Why use this GeM tender extractor?

The official search page is useful for browsing, but recurring procurement work needs stable data.

This Actor adds:

- normalized field names across every result;
- JSON, CSV, Excel, XML, RSS, and table exports through Apify;
- search settings that can be saved and scheduled;
- direct API access from existing applications;
- duplicate prevention inside each run;
- response validation so WAF/error HTML is not mistaken for tender data;
- bounded retries and conservative request pacing;
- honest GTE-only product boundaries.

### What GeM tender data can I extract?

| Field | Type | Description |
|---|---|---|
| `bidId` | string | Internal GeM bid identifier |
| `bidNumber` | string | Public bid number, such as `GEM/2026/B/7788510` |
| `title` | string | Global Tender Enquiry title |
| `category` | string or null | Category exposed by the GTE source |
| `quantity` | number or null | Total requested quantity |
| `status` | string | Status view selected in the input |
| `statusCode` | number or null | Raw GeM status code for traceability |
| `bidTypeCode` | number or null | Raw source bid-type code |
| `bidType` | string or null | Readable bid or reverse-auction type |
| `isHighValue` | boolean | Whether GeM marks the tender high value |
| `startDate` | ISO date or null | Bid start timestamp |
| `endDate` | ISO date or null | Bid end timestamp |
| `ministry` | string or null | Buyer ministry |
| `department` | string or null | Buyer department |
| `detailUrl` | URL | Official GeM document URL |
| `sourceUrl` | URL | Public GTE listing surface |
| `quarterDirectory` | string or null | Source document directory marker |
| `uploadVersion` | number or null | Source upload version |
| `searchKeyword` | string or null | Keyword used for this result |
| `pageNumber` | number | Source results page |
| `scrapedAt` | ISO date | Extraction timestamp |

The Actor does not fabricate tender values, EMD amounts, locations, or contacts when the public GTE listing does not expose them.

### How to scrape GeM Global Tender Enquiries

1. Open the Actor on Apify.
2. Enter a keyword such as `Cyber`, or leave it blank for all matching GTE records.
3. Choose ongoing, evaluated, or awarded status.
4. Optionally enable the high-value or deadline filters.
5. Set a small `maxItems` value for your first run.
6. Click **Start**.
7. Open the **Dataset** tab when the run finishes.
8. Export the records or connect them to another system.

The default input is designed to finish quickly and demonstrate a real keyword search.

### Input options

#### `keyword`

A search term of at least three characters.

Leave it empty to request the complete matching source view.

#### `searchType`

Choose `contains` for discovery or `exact` for a complete phrase or known bid number.

#### `tenderStatus`

Supported values are:

- `ongoing`
- `technical_evaluated`
- `financial_evaluated`
- `awarded`

#### `highValueOnly`

When true, asks the source for tenders tagged as high value.

#### `endDateFrom` and `endDateTo`

Optional date bounds in `YYYY-MM-DD` format.

GeM states that GTE schedules and deadlines are governed by India Standard Time.

#### `sort`

Sort by earliest/latest end date or newest/oldest start date.

#### `maxItems`

The maximum number of unique tenders saved, from 1 to 5,000.

The live GTE inventory can naturally contain only a small number of records.

#### `requestDelayMs`

A polite delay between source pages, from 500 to 10,000 milliseconds.

#### Proxy options

Direct access is the default and lowest-cost route.

Enable `useApifyProxy` only when your run receives persistent source blocking.

### Example input: active cyber tenders

```json
{
  "keyword": "Cyber",
  "searchType": "contains",
  "tenderStatus": "ongoing",
  "highValueOnly": false,
  "sort": "end_date_soonest",
  "maxItems": 20,
  "requestDelayMs": 900
}
````

### Example input: high-value opportunities

```json
{
  "tenderStatus": "ongoing",
  "highValueOnly": true,
  "sort": "end_date_soonest",
  "maxItems": 50
}
```

### Example input: awarded-tender monitoring

```json
{
  "tenderStatus": "awarded",
  "sort": "end_date_latest",
  "maxItems": 100,
  "requestDelayMs": 1200
}
```

### Example output

```json
{
  "bidId": "9608521",
  "bidNumber": "GEM/2026/B/7788510",
  "title": "Cyber Forensic Hardware and Software",
  "category": "GlobalTenderCategory",
  "quantity": 1,
  "status": "ongoing",
  "statusCode": 1,
  "bidTypeCode": 1,
  "bidType": "Bid",
  "isHighValue": true,
  "startDate": "2026-07-17T16:47:51Z",
  "endDate": "2026-07-30T16:00:00Z",
  "ministry": "Ministry of Electronics and Information Technology",
  "department": "Department of Electronics and Information Technology",
  "detailUrl": "https://bidplus-global.gem.gov.in/showbidDocument/9608521/JulQ326/3",
  "sourceUrl": "https://bidplus-global.gem.gov.in/",
  "quarterDirectory": "JulQ326",
  "uploadVersion": 3,
  "searchKeyword": "Cyber",
  "pageNumber": 1,
  "scrapedAt": "2026-07-22T00:00:00.000Z"
}
```

### How much does it cost to scrape GeM global tenders?

This Actor uses pay-per-event pricing.

You pay a small Actor-start charge and a per-tender charge for each normalized record saved.

Apify plan tiers receive volume discounts on the per-record event.

The Console shows the exact active price before a run starts.

A narrow monitor that finds only a few matching opportunities costs less than a broad historical or award-status collection.

Set `maxItems` to control the maximum possible result volume.

### Scheduling a GeM tender monitor

Create separate scheduled tasks for product families or buyer organizations.

For example:

- run `Cyber` every morning;
- run `medical equipment` every four hours;
- collect awarded tenders weekly;
- monitor high-value GTE records before bid-review meetings.

Use Apify schedules to run each saved task automatically.

Store the latest bid numbers in your downstream system to detect genuinely new opportunities between runs.

### Export formats

From the Dataset tab, download results as:

- JSON
- JSONL
- CSV
- Excel
- XML
- RSS
- HTML table

You can also query the dataset API without downloading a file.

### Integrations and procurement workflows

#### Google Sheets

Send new tender rows to a shared qualification sheet for sales and bid teams.

#### Slack or Microsoft Teams

Trigger a webhook when a scheduled run finds a tender closing within your review window.

#### CRM systems

Create one opportunity per `bidNumber`, assign ownership by ministry, and store `detailUrl` as the official source.

#### Data warehouses

Append timestamped snapshots to BigQuery, Snowflake, PostgreSQL, or another analytical store.

#### Make and Zapier

Build no-code flows that filter `isHighValue`, route by department, and notify account owners.

### API usage

Call the Actor from JavaScript, Python, or cURL and read normalized records from the run's default dataset.

### Use the GeM tender scraper with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/gem-global-tender-scraper').call({
  keyword: 'Cyber',
  tenderStatus: 'ongoing',
  maxItems: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use the GeM tender scraper with Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/gem-global-tender-scraper').call(run_input={
    'keyword': 'Cyber',
    'tenderStatus': 'ongoing',
    'maxItems': 20,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use the GeM tender scraper with cURL

```bash
curl "https://api.apify.com/v2/acts/automation-lab~gem-global-tender-scraper/runs?token=$APIFY_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"keyword":"Cyber","tenderStatus":"ongoing","maxItems":20}'
```

Use the returned run's `defaultDatasetId` to fetch the resulting records.

### Connect through Apify MCP

The Actor can be exposed as a tool through the Apify MCP server.

Use this endpoint:

`https://mcp.apify.com/?tools=automation-lab/gem-global-tender-scraper`

#### Claude Code setup

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/gem-global-tender-scraper" --header "Authorization: Bearer $APIFY_TOKEN"
```

Then ask:

> Use the GeM Global Tender Scraper MCP tool to find current cyber security tenders and rank them by deadline.

#### Claude Desktop setup

#### Cursor setup

#### VS Code setup

Claude Desktop, Cursor, and VS Code can use the same MCP JSON configuration:

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.apify.com/?tools=automation-lab/gem-global-tender-scraper",
        "--header",
        "Authorization: Bearer ${APIFY_TOKEN}"
      ]
    }
  }
}
```

After setup, try:

> Use MCP to extract high-value GeM global tenders and summarize which ministries are buying.

#### Example prompts for MCP usage

- “Use the GeM scraper MCP tool to monitor awarded GTE records and compare departments week over week.”
- “Run the tender extractor through MCP and export current global tenders to a CSV-ready table.”
- “Use MCP to show GeM tenders closing in my selected date range.”

### Data quality and reliability

The Actor initializes an anonymous source session before requesting data.

It reproduces the public search form's structured payload and pagination contract.

Every response is checked for valid JSON and the expected record shape.

If GeM returns an HTML block page with HTTP 200, the Actor treats it as a failure rather than emitting garbage.

Failed page requests use bounded retries, fresh session bootstrap, and backoff.

Records missing essential bid ID, bid number, or title are skipped with a warning.

Duplicate bid numbers are saved only once per run.

### Tips for better tender searches

- Start with a broad three-character-or-longer keyword.
- Use `contains` unless you know the exact phrase.
- Leave the keyword empty when auditing the whole current GTE surface.
- Use the earliest deadline sort for bid-planning queues.
- Use the latest deadline sort for award-history exploration.
- Keep the default delay unless the source is responding slowly.
- Run separate schedules for unrelated categories.
- Deduplicate recurring exports downstream by `bidNumber`.

### Troubleshooting

#### Why did my run return zero tenders?

A valid zero-result response means the current source view has no records matching all selected filters.

Remove the date range, turn off `highValueOnly`, switch to `contains`, or leave `keyword` empty.

#### Why was my keyword rejected?

GeM requires at least three characters and rejects several punctuation characters.

The Actor validates the same constraints before requesting the source.

#### Why did the run fail with non-JSON content?

Government infrastructure or a WAF can temporarily return an HTML error page with a successful HTTP status.

Retry later, increase `requestDelayMs`, or enable Apify Proxy if direct access remains blocked.

#### Why are there only a few records?

The Global Tender Enquiry surface is a focused inventory, not the entire GeM marketplace.

A low count can be the complete current source result.

### Responsible and legal use

This Actor collects tender metadata visible on a public government search surface without login.

Public availability does not remove your responsibilities.

Follow GeM terms, applicable procurement rules, robots guidance, the Indian Digital Personal Data Protection framework, and laws relevant to your jurisdiction.

Do not use extracted data for harassment, spam, unauthorized access, bid manipulation, or misrepresentation.

Always open the official `detailUrl` and verify the latest tender documents before making a procurement decision.

This Actor is a discovery and monitoring tool, not legal, financial, or bidding advice.

### Limits and honest scope

The Actor covers `bidplus-global.gem.gov.in` Global Tender Enquiries only.

It does not bypass CAPTCHA, login, private buyer systems, or paid data products.

It does not guarantee that a tender remains open after the scrape timestamp.

It does not enrich listing rows with values or contacts absent from the public GTE response.

Source fields and availability can change; response validation is designed to fail visibly when the contract changes.

### Related government procurement scrapers

Explore other procurement workflows from [automation-lab](https://apify.com/automation-lab):

- [Singapore GeBIZ Tender Opportunities Scraper](https://apify.com/automation-lab/singapore-gebiz-tender-opportunities-scraper)
- [Contracts Finder UK Scraper](https://apify.com/automation-lab/contracts-finder-uk-scraper)
- [SAM.gov Opportunities Scraper](https://apify.com/automation-lab/sam-gov-opportunities-scraper)

Choose the source-specific Actor that matches the jurisdiction and procurement system you need.

### FAQ

#### Can I search by bid number?

Yes. Put the complete bid number in `keyword` and use exact matching.

#### Can I monitor only high-value tenders?

Yes. Enable `highValueOnly` and optionally combine it with keyword and date filters.

#### Can I scrape awarded tenders?

Yes. Select `awarded` as the status and consider sorting by latest end date.

#### Does it scrape all GeM bids?

No. It intentionally covers only the proven Global Tender Enquiry surface.

#### Do I need an Indian proxy?

No for the currently proven anonymous route. Direct HTTP is the default; proxy use is an optional fallback.

#### Can I schedule it?

Yes. Save input as an Apify task and attach an hourly, daily, or weekly schedule.

#### Can I use the results commercially?

You are responsible for verifying source terms and applicable laws for your use case.

#### Are official documents included?

Each row includes the canonical public document URL constructed using fields exposed by GeM.

#### How should I identify changes between runs?

Use `bidNumber` as the stable key and compare status, upload version, end date, and scrape timestamp.

#### Is this affiliated with GeM?

No. This is an independent automation tool using publicly available tender information.

### Support

If a source change causes failures or a field is missing, open an issue from the Actor page.

Include the run URL, non-sensitive input, expected result, and observed result.

Do not post API tokens, private credentials, or confidential procurement documents.

# Actor input Schema

## `keyword` (type: `string`):

Search bid numbers, tender titles, categories, ministries, and departments. Leave empty to collect all matching Global Tender Enquiries.

## `searchType` (type: `string`):

Use Contains for discovery or Exact when you know the complete phrase or bid number.

## `tenderStatus` (type: `string`):

Choose ongoing bids or one of the public GeM evaluation/award status views.

## `highValueOnly` (type: `boolean`):

Return only records marked as high value by the GeM Global Tender surface.

## `endDateFrom` (type: `string`):

Optional lower deadline bound in YYYY-MM-DD format, interpreted by GeM using India Standard Time.

## `endDateTo` (type: `string`):

Optional upper deadline bound in YYYY-MM-DD format, interpreted by GeM using India Standard Time.

## `sort` (type: `string`):

Order results using the same start/end date options available on the GeM GTE page.

## `maxItems` (type: `integer`):

Maximum normalized tender records to save. The current GTE inventory can be small; scheduled monitors often need only the newest records.

## `requestDelayMs` (type: `integer`):

Polite pause between paginated requests. Increase this if the government endpoint is temporarily unstable.

## `useApifyProxy` (type: `boolean`):

Route requests through Apify Proxy only when direct anonymous access is unavailable. Direct access is the default and cheapest route.

## `proxyGroups` (type: `array`):

Optional proxy groups, for example RESIDENTIAL. Leave empty to use your account's default proxy routing.

## `proxyCountryCode` (type: `string`):

Optional two-letter proxy country code such as IN. Leave empty for default routing.

## Actor input object example

```json
{
  "keyword": "Cyber",
  "searchType": "contains",
  "tenderStatus": "ongoing",
  "highValueOnly": false,
  "endDateFrom": "",
  "endDateTo": "",
  "sort": "end_date_soonest",
  "maxItems": 20,
  "requestDelayMs": 900,
  "useApifyProxy": false,
  "proxyGroups": [],
  "proxyCountryCode": ""
}
```

# Actor output Schema

## `overview` (type: `string`):

Open the normalized GeM Global Tender Enquiry dataset with bid, buyer, deadline, status, and document-link fields.

# 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 = {
    "keyword": "Cyber",
    "searchType": "contains",
    "tenderStatus": "ongoing",
    "highValueOnly": false,
    "endDateFrom": "",
    "endDateTo": "",
    "sort": "end_date_soonest",
    "maxItems": 20,
    "requestDelayMs": 900,
    "useApifyProxy": false,
    "proxyGroups": [],
    "proxyCountryCode": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/gem-global-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 = {
    "keyword": "Cyber",
    "searchType": "contains",
    "tenderStatus": "ongoing",
    "highValueOnly": False,
    "endDateFrom": "",
    "endDateTo": "",
    "sort": "end_date_soonest",
    "maxItems": 20,
    "requestDelayMs": 900,
    "useApifyProxy": False,
    "proxyGroups": [],
    "proxyCountryCode": "",
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/gem-global-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 '{
  "keyword": "Cyber",
  "searchType": "contains",
  "tenderStatus": "ongoing",
  "highValueOnly": false,
  "endDateFrom": "",
  "endDateTo": "",
  "sort": "end_date_soonest",
  "maxItems": 20,
  "requestDelayMs": 900,
  "useApifyProxy": false,
  "proxyGroups": [],
  "proxyCountryCode": ""
}' |
apify call automation-lab/gem-global-tender-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GeM Global Tender Scraper",
        "description": "🔎 Search public GeM Global Tender Enquiries and export bid numbers, buyer ministries and departments, quantities, deadlines, statuses, high-value flags, and official document links.",
        "version": "0.1",
        "x-build-id": "VjhFYxHl6sO58TebA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~gem-global-tender-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-gem-global-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/automation-lab~gem-global-tender-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-gem-global-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/automation-lab~gem-global-tender-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-gem-global-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",
                "properties": {
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Search bid numbers, tender titles, categories, ministries, and departments. Leave empty to collect all matching Global Tender Enquiries."
                    },
                    "searchType": {
                        "title": "Keyword matching",
                        "enum": [
                            "contains",
                            "exact"
                        ],
                        "type": "string",
                        "description": "Use Contains for discovery or Exact when you know the complete phrase or bid number.",
                        "default": "contains"
                    },
                    "tenderStatus": {
                        "title": "Tender status",
                        "enum": [
                            "ongoing",
                            "technical_evaluated",
                            "financial_evaluated",
                            "awarded"
                        ],
                        "type": "string",
                        "description": "Choose ongoing bids or one of the public GeM evaluation/award status views.",
                        "default": "ongoing"
                    },
                    "highValueOnly": {
                        "title": "High-value tenders only",
                        "type": "boolean",
                        "description": "Return only records marked as high value by the GeM Global Tender surface.",
                        "default": false
                    },
                    "endDateFrom": {
                        "title": "Bid end date from",
                        "type": "string",
                        "description": "Optional lower deadline bound in YYYY-MM-DD format, interpreted by GeM using India Standard Time.",
                        "default": ""
                    },
                    "endDateTo": {
                        "title": "Bid end date to",
                        "type": "string",
                        "description": "Optional upper deadline bound in YYYY-MM-DD format, interpreted by GeM using India Standard Time.",
                        "default": ""
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "end_date_soonest",
                            "end_date_latest",
                            "start_date_latest",
                            "start_date_oldest"
                        ],
                        "type": "string",
                        "description": "Order results using the same start/end date options available on the GeM GTE page.",
                        "default": "end_date_soonest"
                    },
                    "maxItems": {
                        "title": "Maximum tenders",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum normalized tender records to save. The current GTE inventory can be small; scheduled monitors often need only the newest records.",
                        "default": 20
                    },
                    "requestDelayMs": {
                        "title": "Delay between source pages (ms)",
                        "minimum": 500,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Polite pause between paginated requests. Increase this if the government endpoint is temporarily unstable.",
                        "default": 900
                    },
                    "useApifyProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Route requests through Apify Proxy only when direct anonymous access is unavailable. Direct access is the default and cheapest route.",
                        "default": false
                    },
                    "proxyGroups": {
                        "title": "Apify Proxy groups",
                        "type": "array",
                        "description": "Optional proxy groups, for example RESIDENTIAL. Leave empty to use your account's default proxy routing.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyCountryCode": {
                        "title": "Proxy country code",
                        "type": "string",
                        "description": "Optional two-letter proxy country code such as IN. Leave empty for default routing.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
