MCA21 company search and financial data for Indian private companies.
India's financial data gap: while US investors can look up any SEC-registered company's financials in seconds via EDGAR, Indian investors have no easy way to research private companies. mca-lookup bridges that gap using the MCA21 (Ministry of Corporate Affairs) portal.
pip install mca-lookup
mca-lookup search "Tata Motors"
mca-lookup info L28920MH1945PLC004520
mca-lookup cin L17110MH1973PLC019786- ~15 lakh active companies in India are registered with MCA
- Private companies (Pvt Ltd) file financial statements with MCA but there's no easy API
- Investment bankers and analysts spend hours on Zauba Corp / Tofler / ROC search
- CIN (Corporate Identity Number) contains structured info that most tools ignore
- Company search by name or CIN (Corporate Identity Number)
- CIN parser — extract listing status, state, year, company type from a 21-char CIN
- Director lookup — active directors with DIN, designation, appointment date
- XBRL financial parser — parse MCA annual filing XBRL data (IN-GAAP + Ind AS)
- No API key required — uses MCA21 public portal
pip install mca-lookup # basic
pip install mca-lookup[rich] # with colourful terminal output# Search by company name
mca-lookup search "Reliance Industries"
mca-lookup search "Zomato" --limit 5
# Full company profile by CIN
mca-lookup info L17110MH1973PLC019786
# Parse and validate a CIN
mca-lookup cin U72200TN2010PTC075219╭─ CIN Analysis ─────────────────────────────────────╮
│ CIN: U72200TN2010PTC075219 │
│ Listing: Unlisted │
│ NIC Code: 72200 · State: Tamil Nadu (TN) │
│ Year of Incorporation: 2010 │
│ Company Type: Private Limited Company (PTC) │
│ Serial No: 075219 │
╰─────────────────────────────────────────────────────╯
from mca_lookup import MCAClient
client = MCAClient()
# Search by name
companies = client.search("Bajaj Finance")
for c in companies:
print(c.cin, c.company_name, c.status)
# Lookup by CIN
info = client.get_company("L17110MH1973PLC019786")
print(f"{info.company_name}: ₹{info.paid_up_capital_cr:.0f} Cr paid-up capital")profile = client.get_profile("L17110MH1973PLC019786")
for d in profile.info.active_directors():
print(f"{d.din} {d.name} {d.designation}")from mca_lookup.cin import parse_cin, is_valid_cin, is_listed
cin = "L17110MH1973PLC019786"
print(is_valid_cin(cin)) # True
print(is_listed(cin)) # True (L prefix = Listed)
parsed = parse_cin(cin)
# {
# "valid": True,
# "listing": "Listed",
# "nic_code": "17110",
# "state_name": "Maharashtra",
# "year_of_incorporation": 1973,
# "company_type_name": "Public Limited Company",
# ...
# }from mca_lookup.xbrl import parse_xbrl_financials
with open("annual_filing.xml") as f:
xbrl = f.read()
financials = parse_xbrl_financials(xbrl, cin="L17110MH1973PLC019786", fiscal_year="FY2024")
print(f"Revenue: ₹{financials.revenue_cr:,.0f} Cr")
print(f"PAT Margin: {financials.pat_margin:.1%}")
print(f"Debt/Equity: {financials.debt_to_equity:.2f}x")Every Indian company has a 21-character CIN that encodes:
L 17110 MH 1973 PLC 019786
│ │ │ │ │ │
│ │ │ │ │ └── Serial number
│ │ │ │ └──────── Company type (PLC/PTC/OPC/NPL...)
│ │ │ └────────────── Year of incorporation
│ │ └─────────────────── State code (MH=Maharashtra, DL=Delhi...)
│ └────────────────────────── NIC industry code
└────────────────────────────── L=Listed, U=Unlisted, F=Foreign
| Code | Meaning |
|---|---|
| PLC | Public Limited Company |
| PTC | Private Limited Company |
| OPC | One Person Company |
| NPL | Non-Profit (Section 8) |
| FLC | Foreign Company |
| GOI | Government of India entity |
MCA21 does not provide a public documented REST API. This library uses the same endpoints used by the MCA21 public portal (www.mca.gov.in), which:
- May change without notice
- Rate-limits excessive requests
- Does not provide XBRL downloads directly via API (use the portal to download, then parse locally)
For production/commercial use, consider paid providers: Tofler, Zauba Corp, CDSL, BSE/NSE XBRL feeds.
Contributions welcome — especially improvements to XBRL tag coverage, better sector classification, and LLP (Limited Liability Partnership) support.
MIT