India eProcure Tender Notices Scraper
Under maintenancePricing
from $0.96 / 1,000 item extracteds
India eProcure Tender Notices Scraper
Under maintenanceRefresh current India eProcure tender notices from CPPP central, state and IOCL feeds. Export titles, references, agencies or states, dates and source links for bid monitoring.
Pricing
from $0.96 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Refresh India eProcure tender notices from the current CPPP central and state feeds and the Indian Oil Corporation (IOCL) homepage. Export a small, normalized snapshot for supplier bid monitoring, spreadsheet review and downstream comparisons.
This is a snapshot feed scraper, not an exhaustive Indian procurement search engine. Each selected feed usually shows ten notices. Central notices include defence agencies when present in the current feed; there is no separate defence search.
Who is this for?
- Government suppliers checking newly surfaced opportunities during their daily bid review.
- Procurement analysts combining central, state and IOCL notices in a spreadsheet.
- Sales operations teams collecting dated snapshots for their own comparison pipeline.
Why use this Actor?
Three public feeds share one consistent dataset. Every notice retains its source and reference, and missing source fields remain null rather than being guessed. Lightweight requests avoid loading browsers or downloading bid documents.
The useful distinction is a bounded, source-attributed snapshot. It does not promise the richer search, detail extraction or archive coverage available from other products.
Getting started
- Open the Actor and keep the three default feeds selected.
- Set a global
maxItemsbetween 1 and 30. - Optionally enter a phrase to filter the fetched snapshot locally.
- Run the Actor and inspect the dataset.
- Export JSON, CSV or Excel through Apify's dataset tools.
The default input is:
{"sources":["central","state","iocl"],"maxItems":30,"keyword":""}
Supported India eProcure tender notices
| Feed | Public surface | Included fields |
|---|---|---|
central | CPPP latest active central tenders | Title, reference, tender ID, organisation and dates |
state | CPPP latest active state tenders | Title, reference, tender ID, state and dates |
iocl | IOCL latest-tenders homepage | Title, reference, closing/opening dates and source link |
Only the first snapshot page is fetched. Notices can change between runs. No forms are submitted and no CAPTCHA is solved. The state feed does not expose the buying agency in its list; IOCL homepage does not expose the tender ID or publication date.
Input parameters
| Parameter | Default | Meaning |
|---|---|---|
sources | All three | Nonempty selection of central, state, iocl, fetched in supplied order; duplicates removed |
keyword | Empty | One literal case-insensitive substring across title, reference, agency and state |
maxItems | 30 | Global saved-notice limit, 1–30, after filtering and deduplication |
Keyword whitespace is trimmed and collapsed. It is not whole-word matching, a source search or comma-separated ANY/ALL matching. An empty string accepts all fetched notices. A rare phrase may match nothing because it is applied only to the current snapshots.
All selected feeds are checked even if maxItems is small. The first selected feed has priority when the limit truncates results. Zero and unlimited limits, custom URLs, agency search forms and unsupported fields are rejected.
Output fields
| Field | Meaning |
|---|---|
source | central, state or iocl |
title | Displayed notice title; source truncation is preserved |
reference | Tender reference, including internal slashes |
tenderId | CPPP tender identifier; null on the IOCL homepage |
agency | Central organisation or IOCL; null for state list rows |
state | State-list jurisdiction; null otherwise, never inferred from title |
publishedAt | Source publication text; null for IOCL |
closingAt | Source bid closing date text |
openingAt | Source bid opening date text |
sourceUrl | Source-provided notice link; may be session-bound |
feedUrl | Stable snapshot page URL |
scrapedAt | UTC ISO retrieval timestamp |
Procurement dates are preserved as India-local source strings, such as 20-Oct-2026 06:00 PM; they are not converted to UTC. Only scrapedAt is a UTC timestamp. Source links may expire; use the stable feed URL and tender reference to locate a notice later.
Example result
A representative central notice observed during testing:
{"source": "central","title": "Construction of Bathing Ghat at Basundha","reference": "NTPC/Darlipali STPP/9900335586","tenderId": "2026_NTPC_112893_1","agency": "NTPC Limited","state": null,"publishedAt": "20-Oct-2026 06:30 PM","closingAt": "02-Nov-2026 04:00 PM","openingAt": "03-Nov-2026 10:00 AM","sourceUrl": "https://eprocure.gov.in/cppp/tendersfullview/...","feedUrl": "https://eprocure.gov.in/cppp/latestactivetendersnew/cpppdata","scrapedAt": "2026-10-20T14:00:00.000Z"}
The long source link above is shortened for readability. Actual output retains the full source-supplied URL.
How much does it cost to extract India eProcure tender notices?
Pay per event: a $0.003 start fee per run, plus each saved notice. Filtered-out and duplicate notices do not incur an item fee. A legitimate no-match snapshot still incurs the start fee.
| Apify plan tier | Price per saved notice |
|---|---|
| FREE | $0.00184 |
| BRONZE | $0.0016 |
| SILVER | $0.001248 |
| GOLD | $0.00096 |
| PLATINUM | $0.00096 |
| DIAMOND | $0.00096 |
At BRONZE, 1 notice costs $0.0046; 10 notices cost $0.019; 30 notices cost $0.051. These are Actor event charges, not a statement of your overall Apify subscription costs. Check current Store pricing before running. Configure an adequate run charge limit; a restrictive limit may stop saved output early.
Limits and failure behavior
- Approximately ten current rows per feed; at most 30 saved notices per run.
- No pagination, exhaustive archives, awards, document downloads, protected searches, login or automated bidding.
- No tender value, EMD, category or contact enrichment.
- No built-in historical store, cross-run comparison, alert delivery or guaranteed update frequency.
- All selected feeds must parse before output is saved; an unavailable feed fails the run instead of returning silent partial coverage.
- Transient network errors, HTTP 429 and 5xx get at most three attempts per feed, with bounded delays. Stable other HTTP errors and unexpected page/table shapes fail explicitly.
- Requests are direct and sequential. There is no paid proxy fallback or browser mode.
A deadline is not a guarantee that a tender remains open. Verify the official notice, current corrigenda and bid documents manually before taking action.
Integrations
Schedule this Actor in Apify to collect recurring snapshots, then compare source plus tenderId or reference in your database. Scheduling does not turn a first-page feed into complete tender coverage.
Use dataset exports for Excel or Google Sheets, webhooks for your own completed-run pipeline, and Make, Zapier or n8n for notifications you implement. Save the full dataset outside an AI conversation when maintaining a history.
API usage
Start a run once, then retain its run ID. Retrieve dataset items after successful completion.
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~india-government-tender-feeds/runs' \-H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \-d '{"sources":["state"],"maxItems":10}'
JavaScript with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/india-government-tender-feeds').call({ sources: ['iocl'], maxItems: 10 });if (run.status !== 'SUCCEEDED') throw new Error(run.status);const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 30 });console.log(items);
Python:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/india-government-tender-feeds').call(run_input={'sources': ['central'], 'maxItems': 10})if run['status'] != 'SUCCEEDED':raise RuntimeError(run['status'])print(client.dataset(run['defaultDatasetId']).list_items(limit=30).items)
MCP usage
Use the Actor-specific hosted endpoint in a compatible client:
claude mcp add --transport http apify \'https://mcp.apify.com?tools=automation-lab/india-government-tender-feeds'
Equivalent configuration for Claude Desktop, Cursor, and VS Code (adapt the client-specific MCP settings container):
{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/india-government-tender-feeds"}}}
Discover actual names and input schemas with tools/list; the selection also includes run/data helpers, not exactly one tool. Authentication and tool access depend on your client and Apify account. Example prompt: “Fetch the current IOCL tender snapshot with maxItems 10, then summarize closing dates.”
For an authorized execution, start once and retain the run and storage IDs. They are metadata, not records. If still running after the server wait (maximum 45 seconds), check the same run with 2/4/8-second backoff capped at 10 seconds and a 120-second total deadline. Do not restart after a client timeout; recover the known run or report uncertainty. At deadline report pending and the run ID.
After success, read dataset pages with explicit offset/limit/fields. For example, read at most 100 source rows in pages of 20 and at most 64 KiB of serialized UTF-8 result content admitted to model context, whichever comes first. Enforce the byte ceiling host-side, disclose oversized/truncated records and preserve the next source offset. A client unable to intercept oversized results cannot promise that ceiling. Failed runs are failures even if partial rows exist. Full exports belong in storage, not model context. No numeric token-savings guarantee is made.
Legality and responsible use
This independent tool is not affiliated with CPPP, NIC or Indian Oil. Use public procurement notices responsibly, comply with source terms and applicable law, and verify official records before bidding. It does not supply legal, procurement or eligibility advice.
Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days. No login credentials are accepted by this Actor. No AI is used during runs or to transform output. Public procurement text is collected without contact-detail enrichment. Apify stores results and logs under your account retention settings; delete datasets and key-value stores when no longer needed. We keep no separate tender archive. For help, open an issue on the Actor's Apify Store page.
FAQ and troubleshooting
Why are there fewer than 30 rows? A selected feed can contain fewer notices, a local filter can exclude them, or your global/charge limit can truncate output. Selecting one feed normally gives ten rows, not thirty.
Why does my keyword return nothing? It filters the snapshot, not the entire portal. Remove it to inspect the current source data; no extra pages are fetched to fill the limit.
Can I monitor every Indian tender? No. This is a current first-page snapshot. Use it as one signal, not an exhaustive procurement registry.
Why did the run fail when two feeds worked? The Actor refuses partial-source success. Retry later after a temporary outage or deliberately select only the sources you need.
Why does a source link no longer open? Some portals issue session-bound links. Use feedUrl and the reference on the official portal. The Actor does not fetch details to refresh those links.
Related workflows
For another jurisdiction, Cal eProcure Solicitations Scraper serves California contracts rather than Indian tenders. Keep jurisdiction and record identity separate when combining procurement feeds.