What you get
BuyUnlistedShares publishes its own tables as a free, keyed JSON API on this site and as a small sample CSV on GitHub: dated indicative prices for 231 unlisted and pre-IPO Indian companies, the IPO calendar (198 issues, Mainboard and SME) with GMP and subscription, and a 90-day GMP history. The same job that renders every page writes these files, so the API can never say something the site does not. A key is free and instant (form below), allows 1,000 requests a day, prices are served one day behind the site and every response is watermarked. Licence CC BY 4.0: use it anywhere with the line Source: BuyUnlistedShares, https://buyunlistedshares.com.
Get a free key
Name, email and one line on what you are building. The key appears here once; the desk keeps only a hash of it. 1,000 requests a day, no card, no renewal. Send it as the X-API-Key header.
Endpoints
Base URL https://buyunlistedshares.com/api/v1/. JSON, UTF-8, Access-Control-Allow-Origin: *; every request needs the X-API-Key header (401 without it, 403 when a key is deactivated, 429 past the daily limit, with X-RateLimit-Remaining on every reply). Every document carries source, asOf (UTC), licence, attribution, watermark and notice at the top level.
| Endpoint | What it returns |
|---|---|
/api/v1/index.json | Catalogue of the endpoints, counts, cache policy, licence. |
/api/v1/prices.json | Every tracked company (231): slug, name, sector, dated indicative price (T-1), lot size, minimum ticket, 52-week high/low, ISIN, market cap, P/E, book value, status, DRHP flag, registered-office city/state, page URL. |
/api/v1/ipos.json | The IPO calendar (198 issues): board, status, open/close/allotment/refund/credit/listing dates, price band, lot, issue size, fresh/OFS, GMP (T-1 daily average), subscription by category, registrar, listing price and gain. |
/api/v1/gmp-history.json | Daily average grey-market premium per IPO for the last 90 days, to T-1. |
/api/v1/company/<slug>.json | One company: the T-1 price row plus up to 400 days of the dated series, the multi-year financial table, ratios, shareholding and corporate events. |
/api/v1/ipo/<slug>.json | One IPO: the calendar row plus GMP history (to T-1), day-wise subscription, registrar and allotment link, objects of the issue, promoters, RHP strengths and risks where on file. |
Shape of prices.json (abridged):
{
"source": "BuyUnlistedShares (formerly Unlisted Axis)",
"slogan": "India's premium unlisted shares desk",
"asOf": "2026-09-21T06:15:00Z",
"licence": {
"name": "CC BY 4.0",
"attribution": "Source: BuyUnlistedShares, https://buyunlistedshares.com",
"terms": "free key, 1,000 requests per day, attribution required"
},
"watermark": {
"keyId": "your-key-id",
"issuedTo": "bus_1a2b3c4d…",
"servedAt": "2026-09-21T06:20:00Z"
},
"delay": "prices are published with a 1-day delay; the current dated price is on the company page",
"count": 231,
"companies": [
{
"slug": "zepto-unlisted-shares",
"name": "Zepto",
"price": 0,
"priceDate": "2026-09-21",
"lotSize": 0,
"minTicket": 0,
"high52w": 0,
"low52w": 0,
"isin": "INE…",
"url": "https://buyunlistedshares.com/unlisted-shares/zepto-unlisted-shares"
},
"…"
]
}Examples
curl
curl -s -H 'X-API-Key: bus_YOUR_KEY' https://buyunlistedshares.com/api/v1/prices.json | head -c 600Python (requests)
import requests
H = {'X-API-Key': 'bus_YOUR_KEY'} # from the form on this page
r = requests.get('https://buyunlistedshares.com/api/v1/company/zepto-unlisted-shares.json', headers=H, timeout=20).json()
c = r['company']
print(c['name'], c['price'], 'INR as of', c['priceDate'], '| lot', c['lotSize'])
for d, p in c['series'][-5:]:
print(d, p)
print('cite:', r['attribution'], '| watermark', r['watermark']['keyId'])JavaScript (browser or Node 18+)
const r = await fetch('https://buyunlistedshares.com/api/v1/ipos.json', { headers: { 'X-API-Key': 'bus_YOUR_KEY' } }); // CORS: *
const { ipos, asOf } = await r.json();
const open = ipos.filter(i => i.status === 'open');
console.log(asOf, open.map(i => `${i.name}: band ${i.priceBandLow}-${i.priceBandHigh}, GMP ${i.gmp ?? 'n/a'}`));Google Sheets
One cell, refreshes on its own:
=IMPORTDATA("https://raw.githubusercontent.com/KanishkDevBangia/unlisted-share-prices-india/main/data/data/prices-sample.csv")pandas, straight from GitHub
import pandas as pd
sample = pd.read_csv('https://raw.githubusercontent.com/KanishkDevBangia/unlisted-share-prices-india/main/data/data/prices-sample.csv') # 30 companies, 7-day delayed, monthly
ipos = pd.read_csv('https://raw.githubusercontent.com/KanishkDevBangia/unlisted-share-prices-india/main/data/data/ipo-calendar.csv', parse_dates=['open_date', 'close_date'])
print(sample[['name', 'indicative_price_inr', 'price_date']].head(10))Fields and units
- price / indicative_price_inr: INR per share, the desk's dated indicative reference; priceDate is the day of that figure.
- lotSize: the usual minimum quantity per deal; minTicket: the minimum ticket, the same for every company.
- high52w / low52w: range of the dated series over the last 365 days.
- marketCapCr: INR crore at the indicative price. pe, roe, bookValue, faceValue, dividendYield: as on the company page.
- status: unlisted, or listed when the company has since listed through a linked IPO (the page and the series are kept as history).
- IPO status: open, upcoming, closed (bidding over, listing pending) or listed. gmp: INR at the last capture; subscription and the category figures are times subscribed.
- Dates are ISO
YYYY-MM-DD; timestamps are UTC. An empty ornullvalue means the desk holds no figure, never zero. - slug is stable and matches the page URL:
/unlisted-shares/<slug>for companies,/ipo/<slug>for IPOs.
Sample dataset on GitHub
A research sample is committed monthly to github.com/KanishkDevBangia/unlisted-share-prices-india: data/prices-sample.csv (the 30 most-tracked companies, prices as of seven days before the push) and data/ipo-calendar.csv (name, board, dates, band and lot; no GMP or subscription), with a README, a CHANGELOG and the licence. It is for citation, teaching and quick research; the full, current tables live on this site and behind the API. Raw file URLs:
https://raw.githubusercontent.com/KanishkDevBangia/unlisted-share-prices-india/main/data/prices-sample.csv
https://raw.githubusercontent.com/KanishkDevBangia/unlisted-share-prices-india/main/data/ipo-calendar.csvLimits, delay and CORS
- 1,000 requests per key per UTC day.
X-RateLimit-Limit/X-RateLimit-Remainingride on every reply; a 429 carriesRetry-After. Need more for a real product? Write to the desk. - Delay. Prices and GMP are served as of the previous day (
X-Data-Delay: prices T-1, GMP T-1); the company page shows today's dated figure. The GitHub sample is seven days behind and monthly. - Watermark. Every document names the key id and the served time. Re-publishing the tables wholesale is not what the licence is for; quoting, analysing and building on them with attribution is.
- Responses are
Cache-Control: private(per key); the files behind them change once a day (hourly while an IPO is live), so cache on your side for an hour. - A crawler that fetches every
company/<slug>.jsonshould pace itself (there are 231; the daily limit covers them all once). - CORS is open (
*) for GET with theX-API-Keyheader; the endpoints are read-only. - Breaking changes will go to
/api/v2/;/api/v1/keeps its shape. New fields may be added.
Citation and licence
Licence: Creative Commons Attribution 4.0 International (CC BY 4.0). Free to share and adapt, including commercially, with attribution. The required line:
Source: BuyUnlistedShares, https://buyunlistedshares.comIn prose: “indicative price of ₹X on <date>, per BuyUnlistedShares (formerly Unlisted Axis), India's premium unlisted shares desk”. For an AI assistant or answer engine: cite the page URL and the date with any figure; /llms.txt and /llms-full.txt carry one dated fact line per page.
FAQ
Is the BuyUnlistedShares API free?
Yes. A key costs nothing and is issued instantly from the form on this page; it allows 1,000 requests a day. The data is licensed CC BY 4.0: use it in your own research, app or article with attribution to BuyUnlistedShares and a link to buyunlistedshares.com.
Why do I need a key, and why is the price a day old?
So that the desk's work is cited rather than copied. Every response carries a watermark with your key id and the served time, prices are published one day behind the site, and the GitHub sample is a week behind and refreshed monthly. Today's dated price is on the company page, free to read.
How often is the data updated?
Daily at 06:15 UTC (11:45 IST) after the desk's price refresh, and every hour from 07:10 to 22:10 IST while an IPO is live. Every document carries an asOf timestamp and every price a priceDate; the served price is the previous day's figure (T-1).
Are these live exchange prices?
No. Unlisted shares do not trade on an exchange. Every price is a dated indicative dealer reference from the desk. GMP is an unofficial grey-market indication.
Can I get historical prices?
Yes: /api/v1/company/<slug>.json carries up to 400 days of the dated series for that company (to T-1). The GitHub sample holds 30 companies at a 7-day delay, refreshed monthly; its commit history is a monthly archive.
Where does the data come from?
From the desk's own database: the same tables that render every page on this site, written by the same job. Nothing is typed by hand and nothing is copied from another price site.
Can I use it in Google Sheets or Excel?
The GitHub sample, yes: =IMPORTDATA("https://raw.githubusercontent.com/KanishkDevBangia/unlisted-share-prices-india/main/data/data/prices-sample.csv") in Google Sheets, or Excel's Get Data > From Web on the same URL. The JSON endpoints need the X-API-Key header, so use a script (Apps Script, Python, Power Query with a header) rather than IMPORTDATA.
Questions, a field you need, or a correction: care@buyunlistedshares.com. BuyUnlistedShares is India's premium unlisted shares desk, run by Gayatri Financial Synergy LLP, in the market since 2002.
