GeM Global Tender Scraper avatar

GeM Global Tender Scraper

Pricing

Pay per event

Go to Apify Store
GeM Global Tender Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldTypeDescription
bidIdstringInternal GeM bid identifier
bidNumberstringPublic bid number, such as GEM/2026/B/7788510
titlestringGlobal Tender Enquiry title
categorystring or nullCategory exposed by the GTE source
quantitynumber or nullTotal requested quantity
statusstringStatus view selected in the input
statusCodenumber or nullRaw GeM status code for traceability
bidTypeCodenumber or nullRaw source bid-type code
bidTypestring or nullReadable bid or reverse-auction type
isHighValuebooleanWhether GeM marks the tender high value
startDateISO date or nullBid start timestamp
endDateISO date or nullBid end timestamp
ministrystring or nullBuyer ministry
departmentstring or nullBuyer department
detailUrlURLOfficial GeM document URL
sourceUrlURLPublic GTE listing surface
quarterDirectorystring or nullSource document directory marker
uploadVersionnumber or nullSource upload version
searchKeywordstring or nullKeyword used for this result
pageNumbernumberSource results page
scrapedAtISO dateExtraction 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

{
"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 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

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 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

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 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.

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.

Explore other procurement workflows from automation-lab:

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.