Gov APImahatenders.gov.in ↗
Access Maharashtra government tender listings, full tender details, and organisation-wise browsing from mahatenders.gov.in via a structured JSON API.
What is the Gov API?
This API exposes 4 endpoints covering the Maharashtra eProcurement System (mahatenders.gov.in), giving structured access to active government tenders, their full detail records, and organisation-level browsing. The list_tenders_by_closing_date endpoint returns paginated tender listings — 10 per page — with fields including bid_submission_closing_date, tender_opening_date, title, and reference_no for tenders closing within 7 days.
curl -X GET 'https://api.parse.bot/scraper/abb87e50-3d46-43a2-a900-2c9ec9928084/list_tenders_by_closing_date?page=1' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace mahatenders-gov-in-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.maharashtra_eprocurement_system_mahatenders_api import MahaTenders, Tender, TenderDetail, Organisation, Document
client = MahaTenders()
# List tenders closing soon and iterate
for tender in client.tenders.list(limit=5):
print(tender.title, tender.bid_submission_closing_date, tender.tender_id)
# Get full details for the first tender
first_tender = next(iter(client.tenders.list(limit=1)))
detail = first_tender.details()
print(detail.tender_type, detail.tender_value_in, detail.location)
# Browse organisations and their tenders
for org in client.organisations.list(limit=3):
print(org.organisation_name, org.tender_count)
for t in org.tenders(limit=2):
print(t.title, t.reference_number)
List tenders closing within 7 days from the Maharashtra eProcurement System. Returns tenders sorted by closing date with pagination support (10 tenders per page). Each tender includes basic metadata and a detail_url for fetching full information via the details() method.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (10 tenders per page) |
{
"type": "object",
"fields": {
"page": "integer - Current page number",
"tenders": "array - List of tender objects with serial_no, e_published_date, bid_submission_closing_date, tender_opening_date, title, reference_number, tender_id, detail_url, organisation_chain",
"page_title": "string - Page header describing current view",
"total_pages": "integer - Total available pages",
"tender_count": "integer - Number of tenders on current page"
},
"sample": {
"data": {
"page": 1,
"tenders": [
{
"title": "[Improvement of Passage and Drainage System Room No 417 to Gupta Kirana Store at Vijay Nagar Sion Koliwada in Beat No 174 in F/North Ward]",
"serial_no": "1.",
"tender_id": "2026_MCGM_1306679_1",
"detail_url": "https://mahatenders.gov.in/nicgep/app?component=%24DirectLink&page=FrontEndListTendersbyDate&service=direct&session=T&sp=Su64ryH1QNULALnPchmy0TA%3D%3D",
"e_published_date": "05-Jun-2026 10:00 AM",
"reference_number": "WCR/29 Dt.08.05.2026",
"organisation_chain": "Municipal Corporation of Greater Mumbai||F/North Ward||Maintenance Department",
"tender_opening_date": "12-Jun-2026 09:00 AM",
"bid_submission_closing_date": "11-Jun-2026 09:00 AM"
}
],
"page_title": "Tenders/Auctions Closing Today",
"total_pages": 30,
"tender_count": 10
},
"status": "success"
}
}About the Gov API
Tender Listings and Pagination
The list_tenders_by_closing_date endpoint retrieves tenders sorted by upcoming closing date from the Maharashtra eProcurement portal. Each page returns up to 10 tender objects with fields such as serial_no, e_published_date, bid_submission_closing_date, tender_opening_date, and title. The response also includes total_pages and tender_count so you can walk through all available results with the page parameter.
Full Tender Details
The get_tender_detail endpoint accepts a tender_url from the detail_url field returned by the listing endpoint. It returns a detailed record covering tender_id, tender_type, location, pincode, emd_amount_in, no_of_covers, covers, nit_documents, corrigendums, and critical dates. Note that session tokens embedded in tender URLs can expire; when an expired URL is passed, the endpoint falls back to returning the first currently available tender detail.
Organisation Browsing
The list_organisations endpoint returns all government bodies currently active on the platform, with each entry including organisation_name, tender_count, and a tender_list_url. That URL feeds directly into list_tenders_by_organisation, which retrieves all tenders for that specific organisation — useful when tracking procurement activity from a particular department such as a municipal corporation or public works body. Expired session tokens in org_url values are handled automatically by establishing a fresh session.
Coverage Scope
All four endpoints cover only the Maharashtra state eProcurement portal. Tenders are limited to those currently active or closing within 7 days depending on the endpoint used. Historical, archived, or awarded tender data is not part of the current response shapes.
The Gov API is a managed, monitored endpoint for mahatenders.gov.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when mahatenders.gov.in changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official mahatenders.gov.in API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor tenders closing within 7 days for a procurement team's daily digest, using
bid_submission_closing_dateto prioritise bids. - Track tender activity from a specific government department by pairing
list_organisationswithlist_tenders_by_organisation. - Pull EMD amount and document list from
get_tender_detailto pre-fill a bid preparation checklist. - Aggregate
tender_countper organisation to analyse which departments are most active in Maharashtra procurement. - Index
nit_documentsandcorrigendumsarrays from tender detail records into an internal document management system. - Alert users when new tenders appear for a target organisation by diffing
tender_countbetween polling intervals. - Build a filtered dashboard of open tenders by
locationorpincodefields returned in the detail endpoint.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does mahatenders.gov.in offer an official developer API?+
What does `get_tender_detail` return beyond what the listing endpoints show?+
tender_id, tender_type, pincode, location, emd_amount_in, no_of_covers, the covers array, nit_documents array, and corrigendums array. Listing endpoints return only summary fields like title, e_published_date, and bid_submission_closing_date.Does `list_tenders_by_closing_date` return tenders beyond the next 7 days?+
Are awarded, archived, or historical tenders accessible?+
What happens if a `tender_url` or `org_url` contains an expired session token?+
get_tender_detail, passing an expired URL causes the endpoint to fall back to the first currently available tender detail. For list_tenders_by_organisation, an expired org_url triggers a fresh session that navigates to the correct organisation's tenders automatically — the org_url value must still identify the correct organisation.