Catalog / Tenders & public contracts
TENDERS & PUBLIC CONTRACTS · INDIA
GeM India Government Tenders | Bids & PDF Details
Find Indian government tenders on GeM by keyword, ministry, buyer or delivery state, and deadline.
About this data
Find Indian government tenders on GeM by keyword, ministry, buyer or delivery state, and deadline. Export bids and reverse auctions with document links; add PDF details for EMD, eligibility, estimated value and published grievance emails. Build daily tender alerts in JSON, CSV or Excel.
From the actor’s Apify Store listing. The per-call endpoint may return a bounded subset; its own description is below.
Buy per call over x402
One endpoint at api.ssh.autos. Each call is one JSON POST, paid in USDC with no account or API key, and answered in the same HTTP response.
POST /v1/in/gem/global-tenders
Read the first page of open Global Tender Enquiry (GTE) bids, up to 10 records, optionally narrowed by keyword.
This endpoint covers only GeM international bids and leaves out domestic tenders.
Records include bid numbers and IDs, titles, quantities, ministries, departments, start/end times and document URLs.
No later pages, ministry/consignee filter lookups, PDF downloads, technical specifications or buyer/contact enrichment are requested.
Input
Send a JSON body to POST https://api.ssh.autos/v1/in/gem/global-tenders.
| Field | Type | Required | Notes |
|---|---|---|---|
keyword | string | optional | up to 150 characters |
maxResults | integer | optional | 1–10; default 5 |
Returned fields
The answer is JSON: records, a list of up to 10, and summary, the run status and counts. Each record has these 48 fields; a field the source does not publish comes back null.
48 fields per record
| Field | Type | Notes |
|---|---|---|
buyerEmail | string | Buyer grievance-redressal email published in the bid document; with details on. |
hodEmail | string | Head-of-department grievance-redressal email published in the bid document; with details on. |
bidKey | string | Unique key: source:bid:bidNumber (e.g. bidplus.gem.gov.in:bid:GEM/2026/B/8123845). One row per bid. Falls back to source:id:numericId when the bid number is missing. |
bidNumber | string | GeM bid or RA number, e.g. 'GEM/2026/B/8123845' (B = bid, R = reverse auction). Null when GeM supplies only a numeric bid id. |
bidId | integer | GeM numeric bid id (used in the document URL). |
bidKind | string | 'bid', 'reverseAuction' (an RA run after a bid) or 'directReverseAuction'. |
parentBidNumber | string | For a reverse auction, the number of the bid it came from. |
parentBidId | integer | For a reverse auction, the numeric id of the bid it came from. |
items | string | Items or services being bought, as listed by the buyer (comma-separated for bunch bids). |
boqTitle | string | Bill-of-quantities title for BOQ bids, e.g. 'MEDICINE'. |
quantity | integer | Total quantity across the bid's items. |
ministry | string | Buyer's ministry, e.g. 'Ministry of Railways'. Empty for many state-government buyers. |
department | string | Buyer's department, e.g. 'Indian Railways' or a state department. |
startAt | string | Bid start (publication) time, ISO 8601 with the India offset (+05:30). |
endAt | string | Bid end (submission deadline) time, ISO 8601 (+05:30). |
status | string | 'open' (end time still ahead), 'closed' or 'cancelled'. |
isOpenForBids | boolean | True while the bid is not cancelled and its end time is in the future. |
evaluationStage | string | Buyer's evaluation stage: 'Not evaluated', 'Technical evaluation', 'Financial evaluation' or 'Awarded'. |
isHighValue | boolean | True when the buyer declared an estimated value of Rs 2 crore or more. |
isRateContract | boolean | True for a rate-contract bid. |
isGlobalTender | boolean | True for a global tender. |
isLimitedTender | boolean | True for a limited tender. |
isSinglePacket | boolean | True for a single-packet bid (technical and financial offers together). |
isBoq | boolean | True for a bill-of-quantities bid. |
categoryId | string | GeM category id of the bid, e.g. 'home_boq_boql_boql_boq'. |
url | string | Bid document link on bidplus.gem.gov.in (the PDF the bid card links to; an RA schedule list for scheduled RAs). |
parentBidUrl | string | For a reverse auction, the parent bid's document link. |
bidOpeningAt | string | Bid opening time, ISO 8601 (+05:30). Details only. |
offerValidityDays | integer | Offer validity from the end date, in days. Details only. |
organisation | string | Buyer organisation from the bid document, e.g. 'Central Railway'. Details only. |
office | string | Buyer office from the bid document. Details only. |
estimatedBidValue | number | Estimated bid value in INR, when the buyer declared one. Details only. |
emdRequired | boolean | True when an earnest money deposit (EMD) is required. Details only. |
emdAmount | number | EMD amount in INR. Details only. |
epbgRequired | boolean | True when a performance bank guarantee (ePBG) is required. Details only. |
epbgPercent | number | ePBG as a percentage of the contract value. Details only. |
minimumTurnover | number | Minimum average annual turnover asked of bidders, in INR (lakh and crore converted). Details only. |
pastExperienceYears | integer | Years of past experience required for the same or similar items. Details only. |
pastPerformancePercent | number | Past-performance criterion, percent of the bid quantity. Details only. |
bidToRaEnabled | boolean | True when the bid can move to a reverse auction. Details only. |
typeOfBid | string | 'Single Packet Bid' or 'Two Packet Bid'. Details only. |
evaluationMethod | string | e.g. 'Total value wise evaluation' or 'Item wise evaluation'. Details only. |
primaryProductCategory | string | Primary product category from the bid document. Details only. |
detailsError | string | Why the bid document could not be read, when details are on; null otherwise. |
detailsParsed | boolean | True when the bid document was read and its detail fields filled. Only these rows carry the bid-details charge; false when details are off or the document failed, is missing or could not be read. |
sourceQuery | string | The filters this row was collected with, e.g. 'status=open'. |
source | string | Always 'bidplus.gem.gov.in'. |
scrapedAt | string | When the row was collected, ISO 8601 UTC. |
Example call
npx agentcash@latest fetch https://api.ssh.autos/v1/in/gem/global-tenders -m POST -b '{"maxResults": 5}'
The example values come from the API spec or the actor’s own sample input. Running it is a paid call.
What is and isn’t charged
You pay the call price for
- An answer, including a definitive “not found” or an empty result.
- Confirmed no matches returns records: [] (charged: it is an answer).
Free
- Invalid input (422), busy (503), source failure (502), timeout (504) and calls whose client hung up are never charged.
- Invalid input and source failures are not charged.
Prefer a subscription? Run it on Apify
This data source is a public actor on the Apify Store: GeM India Government Tenders Scraper | Bids & PDF Details. Run it with your Apify account and plan for larger, scheduled or exported runs; it may offer more input options than the per-call endpoint.
How x402 payment works
- Your client sends the request. The API answers
402 Payment Requiredwith the price and where to pay. - The client pays from its own wallet: USDC on Base or Solana over x402, or over MPP on Tempo. No account, sign-up or API key.
- The client retries with the payment attached and gets the JSON answer in the same call. You are only charged for answers.
The AgentCash CLI in the example does all three steps for you and pays from your AgentCash wallet. Any x402 or MPP client works the same way.
Machine-readable: openapi.json · llms.txt