# Indian IPO Tracker — API (`contented_academy/indian-ipo-tracker-api`) Actor

Read API for the Indian IPO Tracker. Polling clients query IPO state via HTTPS; lazy-enqueues parses on demand. Backed by the same Postgres canonical store as the batch tracker.

- **URL**: https://apify.com/contented\_academy/indian-ipo-tracker-api.md
- **Developed by:** [Ujjawal Yadav](https://apify.com/contented_academy) (community)
- **Categories:** Automation, MCP servers, AI
- **Stats:** 14 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 get ipo detail + prospectuses

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Indian IPO Tracker — API & MCP server

A **fast read API** and **MCP server** for Indian IPO data — mainboard & SME, from DRHP filing to
listing. It serves a canonical Postgres store that's kept fresh by the [Indian IPO Tracker](https://apify.com/contented_academy/indian-ipo-tracker)
batch actor, so responses are **sub-second** instead of a full live scrape.

Covers: SEBI DRHP filings, grey-market premium (GMP), live subscription multiples, lifecycle status,
calendar dates (open / close / listing), full issue terms (price band, lot size, min investment,
fresh-issue vs OFS), basis-of-allotment + anchor book, listing prices, and parsed prospectus
financials (revenue / EBITDA / PAT, use of proceeds, lead managers).

Two ways to call it:

- **Run-based (recommended for AI agents via the Apify MCP):** call the Actor with an `action` input
  (e.g. `{ "action": "live_upcoming_listed" }`); results are written to the run's dataset. This is the
  zero-setup path for anyone who already has the Apify MCP configured.
- **Standby (always-on HTTP):** call the REST endpoints directly, or connect to its `/mcp` server.

### Pricing

Pay-per-event. You're charged per successful data request:

| Event | When |
|---|---|
| `api-list-request` | listing/searching IPOs (`GET /api/ipos`, MCP `list_ipos`) |
| `api-detail-request` | one IPO + prospectus (`GET /api/ipos/:id`, MCP `get_ipo`) |
| `api-timeline-request` | subscription/state timeline (MCP `get_ipo_timeline`) |
| `api-refresh-request` | force-refresh an IPO (premium; rate-limited) |

Health/meta calls (`/healthz`, `/api/freshness`, `get_freshness`) and `304 Not Modified` responses
are **free**.

### REST API

Base URL: `https://contented-academy--indian-ipo-tracker-api.apify.actor`
Authenticate with your Apify token (`?token=<APIFY_TOKEN>` or `Authorization: Bearer <APIFY_TOKEN>`).

| Method & path | Description |
|---|---|
| `GET /api/ipos` | List/search IPOs (returns ALL matching rows, no pagination). Query: `view` (`live_upcoming` | `live_upcoming_listed`, default), `category` (`mainboard`|`sme`), `q` (name search), `gmp_min`, `listing_date_gte`, `listing_date_lte`. |
| `GET /api/ipos/:id` | Full record for one IPO incl. prospectus, basis-of-allotment, anchors, and latest GMP. |
| `GET /api/ipos/:id/timeline` | Subscription-bidding timeline + lifecycle state history. |
| `POST /api/ipos/:id/refresh` | Bump an IPO to the front of the refresh queue (premium, rate-limited). |
| `GET /api/events` | Recent lifecycle state-change events (paginated). |
| `GET /api/freshness` | Pipeline health snapshot (free). |
| `GET /healthz` | Liveness (free). |

Responses are cached (60 s) and carry strong `ETag`s — send `If-None-Match` to get a free `304`.

#### Example

```bash
curl "https://contented-academy--indian-ipo-tracker-api.apify.actor/api/ipos?status=SUBSCRIPTION_OPEN&category=sme&token=$APIFY_TOKEN"
```

### MCP server

Endpoint: `/mcp` (Streamable HTTP). Discoverable + callable through the Apify hosted MCP at
`https://mcp.apify.com`, or connect directly to the standby URL `…/mcp`.

| Tool | Arguments | Returns |
|---|---|---|
| `list_ipos` | `view?` (`live_upcoming`|`live_upcoming_listed`), `category?`, `q?`, `gmp_min?`, `listing_date_gte?`, `listing_date_lte?` | IPO summaries (GMP, subscription, dates, lot size) + count |
| `get_ipo` | `ipo_id` | Full IPO record incl. prospectus financials, basis-of-allotment, anchors, latest GMP |
| `get_ipo_timeline` | `ipo_id` | Subscription timeline + state history |
| `get_freshness` | — | Pipeline health snapshot (free) |
| `refresh_ipo` | `ipo_id` | Force-refresh (premium, rate-limited) |

Typical agent flow: `list_ipos` to find an `ipo_id`, then `get_ipo` for full detail.

### Run-based (call-actor)

If you call the Actor through the Apify MCP's generic `call-actor` (or the Apify API / Console), pass
an `action` and read the run's dataset:

```json
{ "action": "live_upcoming_listed", "gmp_min": 30 }
```

`action` values: `live_upcoming`, `live_upcoming_listed` (default), `get` (needs `ipo_id`),
`timeline` (needs `ipo_id`), `freshness`. List actions return ALL matching IPOs (no pagination),
ordered by lifecycle relevance (live → upcoming → listed).

### Notes

- Data is sourced from public sources (SEBI, BSE, NSE, GMP aggregators) and parsed prospectus PDFs.
  Figures are best-effort and should be verified against the official filing before any financial
  decision.
- Freshness depends on the batch tracker's worker cadence; `GET /api/freshness` reports the most
  recent update timestamps.

# Actor input Schema

## `action` (type: `string`):

What to fetch. 'live\_upcoming' = IPOs open for subscription now + the upcoming pipeline (filed/approved, not yet open). 'live\_upcoming\_listed' = the above plus recently listed IPOs (everything except withdrawn/expired). Both return ALL matching IPOs, ordered by lifecycle (live → upcoming → listed). 'get' = one IPO + prospectus (needs ipo\_id). 'timeline' = subscription + state history (needs ipo\_id). 'freshness' = pipeline health snapshot.

## `ipo_id` (type: `string`):

Canonical IPO id (required for action 'get' and 'timeline'). Obtain it from a list run.

## `category` (type: `string`):

Board type.

## `q` (type: `string`):

Case-insensitive company-name search (2-80 chars).

## `listing_date_gte` (type: `string`):

YYYY-MM-DD lower bound on listing date.

## `listing_date_lte` (type: `string`):

YYYY-MM-DD upper bound on listing date.

## `gmp_min` (type: `integer`):

Only return IPOs whose current grey-market premium is at least this many rupees.

## Actor input object example

```json
{
  "action": "live_upcoming_listed"
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("contented_academy/indian-ipo-tracker-api").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("contented_academy/indian-ipo-tracker-api").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 '{}' |
apify call contented_academy/indian-ipo-tracker-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,contented_academy/indian-ipo-tracker-api"
        }
    }
}

```

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/GfKitkwj9Co7189iM/builds/ZnqZeDN7j4Y2cxThY/openapi.json
