GeM Global Tender Scraper
Pricing
Pay per event
GeM Global Tender Scraper
🔎 Search public GeM Global Tender Enquiries and export bid numbers, buyer ministries and departments, quantities, deadlines, statuses, high-value flags, and official document links.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
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
- Open the Actor on Apify.
- Enter a keyword such as
Cyber, or leave it blank for all matching GTE records. - Choose ongoing, evaluated, or awarded status.
- Optionally enable the high-value or deadline filters.
- Set a small
maxItemsvalue for your first run. - Click Start.
- Open the Dataset tab when the run finishes.
- 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:
ongoingtechnical_evaluatedfinancial_evaluatedawarded
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
{"keyword": "Cyber","searchType": "contains","tenderStatus": "ongoing","highValueOnly": false,"sort": "end_date_soonest","maxItems": 20,"requestDelayMs": 900}
Example input: high-value opportunities
{"tenderStatus": "ongoing","highValueOnly": true,"sort": "end_date_soonest","maxItems": 50}
Example input: awarded-tender monitoring
{"tenderStatus": "awarded","sort": "end_date_latest","maxItems": 100,"requestDelayMs": 1200}
Example output
{"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
Cyberevery morning; - run
medical equipmentevery 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
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
from apify_client import ApifyClientimport osclient = 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().itemsprint(items)
Use the GeM tender scraper with cURL
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
$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:
{"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
containsunless 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:
- Singapore GeBIZ Tender Opportunities Scraper
- Contracts Finder UK Scraper
- 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.