# India Public Tender, GeM & CPPP eProcurement Extractor (`deepaksheoran172/indian-public-tender-parser`) Actor

Automated Indian government tender scraper and parser for CPPP, GeM, and state eProcurement portals. Extracts EMD, BOQ, deadlines, and corrigendums into clean JSON for B2B bidding.

- **URL**: https://apify.com/deepaksheoran172/indian-public-tender-parser.md
- **Developed by:** [Deepak Sheoran](https://apify.com/deepaksheoran172) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 public tender search & retrievals

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

<p align="center">
  <img src="https://raw.githubusercontent.com/deepakshe/apify-b2b-super-actors/main/assets/actor_icons/indian-public-tender-parser.png" width="96" height="96" alt="Indian Public Tender & Procurement Scraper Icon" style="border-radius: 20px; box-shadow: 0 8px 24px rgba(0,0,0,0.18);" />
</p>

<p align="center">
  <a href="https://apify.com/deepaksheoran172/indian-public-tender-parser"><img src="https://img.shields.io/badge/Apify_Store-Active_PPE-blue?style=for-the-badge&logo=apify" alt="Apify Store" /></a>
  <a href="https://apify.com/deepaksheoran172/indian-public-tender-parser"><img src="https://img.shields.io/badge/Launch_Discount-60%25_OFF-success?style=for-the-badge" alt="60% Launch Discount" /></a>
  <img src="https://img.shields.io/badge/Architecture-Zero--Proxy_Fast-informational?style=for-the-badge" alt="Zero-Proxy Fast" />
  <img src="https://img.shields.io/badge/QA_Validation-Verified_Pass-brightgreen?style=for-the-badge" alt="Verified QA Pass" />
</p>

## India Public Tender & Procurement Intelligence Parser

> **Stop Paying ₹50,000–₹1,50,000/Year for Proprietary Tender Portals. Clean, Standardize, and Structure CPPP, GeM & State eProcurement Tender Notices into RFC 4180 CSV / JSON for $0.02 Base Fee ($20 / 1,000 runs).**

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue?logo=apify)](https://apify.com/deepaksheoran172/indian-public-tender-parser)
[![Pricing](https://img.shields.io/badge/Pricing-Pay--Per--Event%20\($0.02%20base\)-green)](#cost-anchoring--pricing)
[![Validation Guarantee](https://img.shields.io/badge/🛡️%20Validation-Deterministic%20Audit-orange)](#fair-execution-guarantee)
[![MCP Ready](https://img.shields.io/badge/MCP%20Server-Ready-purple)](https://mcp.apify.com/?actors=deepaksheoran172/indian-public-tender-parser)

***

### ⚡ The Pain vs. Instant Relief

B2B bidding teams, infrastructure contractors, and procurement intelligence firms waste countless hours manually copying tender notices:

- **The Catastrophic Cost of Misparsed Tenders:** Indian government notices use non-standard financial notations (`"₹ 1.55 Crore"`, `"25.50 Lakhs"`), mixed IST deadlines, and malformed HTML tables. A misread submission deadline or uncalculated EMD forfeits eligibility for ₹10Cr to ₹100Cr high-margin contracts.
- **The 1-Click Solution:** Feed in raw HTML from CPPP (Central Public Procurement Portal), GeM (Government e-Marketplace), or State eProcurement portals. This Actor sanitizes INR values to pure numerical floats, converts IST to UTC ISO-8601, and detects corrigendum updates with cryptographic SHA-256 fingerprinting. *(Note: This Actor is a dedicated parsing & normalization engine; supply HTML exported via your scraping pipeline, browser extension, or automation).*

***

### 💰 Cost Anchoring vs. Legacy Tender Aggregators

| Solution | Cost | Data Ownership | Automation Capability |
|---|---|---|---|
| **Commercial Portals (Tender247, TendersInfo)** | **₹50,000 – ₹1,50,000 / year** | Walled garden, locked dashboards | No direct API / manual exports only |
| **Manual Data Entry Operators** | **₹20,000 / month per person** | Prone to decimal & date errors | Slow, cannot scale to thousands of bids |
| **India Public Tender Parser** | **$0.02 per run (~₹1.65 / $20 per 1,000 runs)** | **100% Owned JSON/CSV datasets** | **Instant Clay/n8n/Make/MCP webhooks** |

*(Pay-Per-Event Primary Event `tender-search-query` assessed at $0.02 upon run start. Secondary per-record event \[$0.005/record] is uninvoked by code; entire notice parses under the base fee. Standard platform compute credits apply; Free plan includes $5.00/month).*

***

### 🛡️ Fair-Execution Guarantee

> **Deterministic Parsing Guarantee:** If the supplied HTML markup contains no recognizable tender metadata or is malformed, this Actor outputs detailed diagnostic logs and schema validation warnings. You never waste time deciphering silent parsing failures.

***

### 🚀 Key Capabilities

- **Normalized INR Financials:** Seamlessly parses `"1.55 Crore"`, `"45.5 Lakhs"`, `"NIL"`, and percentage EMDs into exact numeric floats (`15500000.0`).
- **UTC ISO-8601 Timestamps:** Normalizes Indian Standard Time (`IST` / `UTC+05:30`) into universal UTC format (`YYYY-MM-DDTHH:MM:SSZ`).
- **Corrigendum & Amendment Detection:** Automatically recognizes addendums, date extensions, and revisions, preserving audit trails without key collisions.
- **Zero-Dependency Core:** Ultra-fast pure Python execution with zero browser latency.

***

### 🔌 Plug-and-Play Integrations

#### 1. Claude Desktop & Cursor IDE (MCP Server)

Integrate government tender intelligence directly into your agentic workspace:

```json
{
  "mcpServers": {
    "indian-tender-parser": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-fetch", "https://mcp.apify.com/?actors=deepaksheoran172/indian-public-tender-parser"]
    }
  }
}
```

#### 2. Clay.com HTTP Enrichment

Enrich your government contractor lead lists with active tender awards:

- **Method:** `POST`
- **URL:** `https://api.apify.com/v2/acts/deepaksheoran172~indian-public-tender-parser/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN`
- **Body:**
  ```json
  {
    "raw_html": "{{tender_lead.html_notice}}",
    "portal_name": "GeM Portal"
  }
  ```

#### 3. n8n & Make.com Automated Cron

Import our pre-built n8n template (`tool3_tender_parser_n8n.json`) to listen for incoming procurement alerts, parse tender notices instantly, and post high-priority bids into your corporate Slack or CRM.

***

### 📥 Input Parameters & 1-Click Prefill

> \[!IMPORTANT]
> **Input Architecture — Dedicated Normalization Engine:** This Actor is a dedicated parser for standardizing and structuring complex Indian tender notices. **Input must be raw notice HTML markup** (`raw_html`) exported via your browser extension, cURL, or scraping pipeline. It is not an active web crawler and does not navigate live portal sessions or bypass portal CAPTCHAs.

Ready to run instantly — pre-filled with production-grade tender notice markup:

| Parameter | Type | Required | Description |
|---|---|---|---|
| `raw_html` | String | **Yes** | HTML table markup or page source of the government tender notice. |
| `source_url` | String | No | Source URL of the procurement notice (Default: eprocure.gov.in). |
| `portal_name` | String | No | Procuring authority or portal identifier (Default: Indian eProcurement Portal). |

***

### 📤 Output Artifacts

1. **Dataset**: Structured tender intelligence object containing `tender_id`, `title`, `authority`, `financials` (normalized value & EMD), `dates` (UTC submission & opening), and `flags`.
2. **Key-Value Store**: Downloadable JSON and RFC 4180 CSV export files.

***

### ❓ High-Intent B2B FAQs

##### Q: Does this Actor automatically bypass CAPTCHA on stateful portals like CPPP?

**A:** No. This Actor is a dedicated parsing and standardization engine. You supply the raw HTML table markup or page source, and it extracts and normalizes the data deterministically.

##### Q: How does it calculate EMD percentages?

**A:** When an EMD is defined as `"2% of tender value"`, the parser automatically calculates the absolute INR figure using the parsed estimated tender cost.

##### Q: How does it handle Hindi or Devanagari labels?

**A:** The parser natively recognizes bilingual headings and Devanagari Unicode strings (such as `निविदा संख्या:`, `अनुमानित लागत:`) and maps them to standard schema fields.

***

### 🚀 Ready to Structure Public Tender Notices?

Convert messy government tender tables into clean RFC 4180 CSV / JSON in seconds:

1. Click **Try for free** at the top right of this page.
2. Paste sample notice HTML into `raw_html` (pre-filled with a production sample).
3. Export structured tenders with normalized INR floats and UTC deadlines to your CRM or database.

[![Try Free on Apify](https://img.shields.io/badge/Run%20on%20Apify-Try%20Free%20\($5%20Credit\)-blue?style=for-the-badge\&logo=apify)](https://apify.com/deepaksheoran172/indian-public-tender-parser)

# Changelog

This Actor's version history is a separate document: https://apify.com/deepaksheoran172/indian-public-tender-parser/changelog.md

# Actor input Schema

## `raw_html` (type: `string`):

Paste the HTML table or page source of the government tender notice. Pre-filled with ready-to-test tender data.

## `source_url` (type: `string`):

Original portal URL of the tender document (optional).

## `portal_name` (type: `string`):

Name of the government procurement authority or portal.

## Actor input object example

```json
{
  "raw_html": "<table>\n  <tr><td>Tender Reference No:</td><td>NIT-2026-PWD-8841</td></tr>\n  <tr><td>Name of Work:</td><td>Construction of 4-Lane Bypass Road</td></tr>\n  <tr><td>Department:</td><td>Public Works Department</td></tr>\n  <tr><td>Tender Value:</td><td>₹ 1.55 Crore</td></tr>\n  <tr><td>EMD Amount:</td><td>₹ 3,10,000</td></tr>\n  <tr><td>Bid Submission Closing Date:</td><td>05-Nov-2026 05:00 PM IST</td></tr>\n</table>",
  "source_url": "https://eprocure.gov.in/eprocure/app",
  "portal_name": "Indian eProcurement Portal"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "raw_html": `<table>
  <tr><td>Tender Reference No:</td><td>NIT-2026-PWD-8841</td></tr>
  <tr><td>Name of Work:</td><td>Construction of 4-Lane Bypass Road</td></tr>
  <tr><td>Department:</td><td>Public Works Department</td></tr>
  <tr><td>Tender Value:</td><td>₹ 1.55 Crore</td></tr>
  <tr><td>EMD Amount:</td><td>₹ 3,10,000</td></tr>
  <tr><td>Bid Submission Closing Date:</td><td>05-Nov-2026 05:00 PM IST</td></tr>
</table>`,
    "source_url": "https://eprocure.gov.in/eprocure/app",
    "portal_name": "Indian eProcurement Portal"
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepaksheoran172/indian-public-tender-parser").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "raw_html": """<table>
  <tr><td>Tender Reference No:</td><td>NIT-2026-PWD-8841</td></tr>
  <tr><td>Name of Work:</td><td>Construction of 4-Lane Bypass Road</td></tr>
  <tr><td>Department:</td><td>Public Works Department</td></tr>
  <tr><td>Tender Value:</td><td>₹ 1.55 Crore</td></tr>
  <tr><td>EMD Amount:</td><td>₹ 3,10,000</td></tr>
  <tr><td>Bid Submission Closing Date:</td><td>05-Nov-2026 05:00 PM IST</td></tr>
</table>""",
    "source_url": "https://eprocure.gov.in/eprocure/app",
    "portal_name": "Indian eProcurement Portal",
}

# Run the Actor and wait for it to finish
run = client.actor("deepaksheoran172/indian-public-tender-parser").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "raw_html": "<table>\\n  <tr><td>Tender Reference No:</td><td>NIT-2026-PWD-8841</td></tr>\\n  <tr><td>Name of Work:</td><td>Construction of 4-Lane Bypass Road</td></tr>\\n  <tr><td>Department:</td><td>Public Works Department</td></tr>\\n  <tr><td>Tender Value:</td><td>₹ 1.55 Crore</td></tr>\\n  <tr><td>EMD Amount:</td><td>₹ 3,10,000</td></tr>\\n  <tr><td>Bid Submission Closing Date:</td><td>05-Nov-2026 05:00 PM IST</td></tr>\\n</table>",
  "source_url": "https://eprocure.gov.in/eprocure/app",
  "portal_name": "Indian eProcurement Portal"
}' |
apify call deepaksheoran172/indian-public-tender-parser --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepaksheoran172/indian-public-tender-parser"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qVsV97mUeFQtQFWp1/builds/RxwggqoyxAnGbPQ9b/openapi.json
