Scrape IBBI Insolvency Cases for Credit Risk Analysis (2026)
Extract IBBI insolvency and bankruptcy case data for credit risk research. Corporate debtor records, CIRP timelines, IP details, and case status via API.

Thirdwatch's IBBI Scraper returns structured insolvency and bankruptcy records from India's IBBI registry — corporate debtor cases, CIRP announcements, claim deadlines, insolvency professional assignments, and case status. Built for credit risk researchers, lenders, trade-credit teams, and compliance analysts tracking the Insolvency and Bankruptcy Code ecosystem.
Why scrape IBBI for credit risk research
India's Insolvency and Bankruptcy Board of India (IBBI) registry is the single authoritative source for all insolvency proceedings under the Insolvency and Bankruptcy Code, 2016. According to IBBI's quarterly newsletter (Q4 FY2025), the registry has processed over 7,700 CIRP cases since inception, with aggregate claims admitted exceeding INR 10 lakh crore. The Reserve Bank of India's Financial Stability Report identifies IBC resolution data as a key input for assessing systemic credit risk in the Indian banking sector. For credit risk research, this is ground-truth data — every CIRP admission, every liquidation order, every resolution plan is published here before it appears in any commercial credit database.
The job-to-be-done is structured. A credit research team monitors new CIRP admissions against their loan portfolio for early-warning signals. A trade-credit function screens counterparty CINs weekly against the registry to catch insolvency filings before they cascade into supply-chain defaults. A distressed-debt fund tracks resolution plan timelines and liquidation outcomes to price distressed assets. An academic researcher builds longitudinal datasets on IBC resolution efficiency. All reduce to CIN or company-name queries plus status filtering plus time-series aggregation.
How does this compare to the alternatives?
Three options for IBBI insolvency data:
| Approach | Coverage | Reliability | Setup time | Maintenance |
|---|---|---|---|---|
| IBBI website manual lookup | Full registry | Low throughput, no bulk export | Continuous | Per-query manual work |
| Commercial credit bureaus (CIBIL, CRIF) | Partial, 30-90 day lag | High (curated) | Weeks (contract + integration) | Annual subscription |
| Thirdwatch IBBI Scraper | Full registry, real-time | Structured API output | 5 minutes | Thirdwatch tracks IBBI changes |
Commercial credit bureaus bundle IBBI data into broader credit reports but with a 30-90 day lag and no case-level granularity. The IBBI Scraper actor page gives you raw case-level records with same-day freshness.
How to scrape IBBI in 5 steps
Step 1: How do I authenticate against Apify?
Sign in at apify.com (free tier, no credit card), open Settings and Integrations, and copy your personal API token:
export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"Step 2: How do I look up corporate debtors by CIN?
Pass CIN numbers to search the corporate debtor registry.
import os, requests, pandas as pd
ACTOR = "thirdwatch~ibbi-scraper"
TOKEN = os.environ["APIFY_TOKEN"]
CINS = ["U72200DL2007PTC165970", "L24231GJ1966PLC001543", "U45200MH2007PTC170862"]
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json={
"queries": CINS,
"searchType": "corporate_debtor",
"maxResults": 50
},
timeout=3600,
)
df = pd.DataFrame(resp.json())
print(f"{len(df)} insolvency records across {df.company_name.nunique()} companies")Three CINs with up to 50 results each — sufficient for a portfolio-screening proof of concept.
Step 3: How do I filter by case status?
Use the status parameter to narrow results to ongoing, closed, or all cases. The input accepts "ongoing" (active CIRP cases), "closed" (resolved or liquidated), or "all".
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json={
"queries": ["Reliance", "Tata", "Adani"],
"searchType": "corporate_debtor",
"status": "ongoing",
"maxResults": 100
},
timeout=3600,
)
admitted = pd.DataFrame(resp.json())
print(f"{len(admitted)} ongoing CIRP cases for portfolio companies")Filtering to "ongoing" status surfaces only active CIRP cases — the highest-signal subset for credit risk early warning.
Step 4: How do I build a CIRP timeline dataset?
Parse announcement dates and claim deadlines to build case-lifecycle timelines.
admitted["announcement_date"] = pd.to_datetime(admitted.announcement_date)
admitted["claim_submission_deadline"] = pd.to_datetime(admitted.claim_submission_deadline)
admitted["days_to_deadline"] = (
admitted.claim_submission_deadline - admitted.announcement_date
).dt.days
timeline = admitted.groupby("company_name").agg(
earliest_filing=("announcement_date", "min"),
latest_filing=("announcement_date", "max"),
avg_days_to_deadline=("days_to_deadline", "mean"),
case_count=("company_name", "count")
).sort_values("case_count", ascending=False)
print(timeline.head(20))The gap between announcement date and claim submission deadline reveals NCLT processing speed per case — a leading indicator of resolution complexity.
Step 5: How do I cross-reference insolvency professionals?
Query insolvency professionals assigned to portfolio cases for due-diligence background checks.
ip_names = admitted.insolvency_professional_name.dropna().unique().tolist()[:10]
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json={
"queries": ip_names,
"searchType": "insolvency_professional",
"maxResults": 20
},
timeout=3600,
)
ip_df = pd.DataFrame(resp.json())
print(f"{len(ip_df)} IP records — check registration status and IPA affiliation")Cross-referencing IP registration status against case assignments catches suspended or de-registered IPs early.
Sample output
A corporate debtor record from the IBBI registry looks like this. Three records weigh approximately 3 KB.
[
{
"entity_type": "corporate_debtor",
"company_name": "Essar Steel India Limited",
"cin": "L27100GJ1976PLC002883",
"case_type": "CIRP",
"announcement_type_full": "Public Announcement under Section 15 of IBC",
"status": "Admitted",
"announcement_date": "2017-08-02",
"claim_submission_deadline": "2017-08-16",
"applicant_name": "Standard Chartered Bank",
"insolvency_professional_name": "Satish Kumar Gupta",
"remarks": "NCLT Ahmedabad Bench",
"notice_url": "https://ibbi.gov.in/uploads/notice/essar_steel.pdf",
"source_url": "https://ibbi.gov.in/corporate-debtor",
"data_source": "IBBI"
},
{
"entity_type": "corporate_debtor",
"company_name": "Bhushan Power & Steel Ltd",
"cin": "L27100OR1999PLC005985",
"case_type": "CIRP",
"announcement_type_full": "Public Announcement under Section 15 of IBC",
"status": "Resolved",
"announcement_date": "2017-07-26",
"claim_submission_deadline": "2017-08-09",
"applicant_name": "Punjab National Bank",
"insolvency_professional_name": "Mahender Kumar Khandelwal",
"remarks": "Resolution plan approved by NCLT",
"notice_url": "https://ibbi.gov.in/uploads/notice/bpsl.pdf",
"source_url": "https://ibbi.gov.in/corporate-debtor",
"data_source": "IBBI"
},
{
"entity_type": "corporate_debtor",
"company_name": "Jaypee Infratech Limited",
"cin": "U45200UP2007PLC033190",
"case_type": "CIRP",
"announcement_type_full": "Public Announcement inviting claims",
"status": "Admitted",
"announcement_date": "2017-08-10",
"claim_submission_deadline": "2017-08-24",
"applicant_name": "IDBI Bank",
"insolvency_professional_name": "Anuj Jain",
"remarks": "NCLT Allahabad Bench",
"notice_url": "https://ibbi.gov.in/uploads/notice/jaypee.pdf",
"source_url": "https://ibbi.gov.in/corporate-debtor",
"data_source": "IBBI"
}
]case_type + status + announcement_date are the core fields for credit-risk time-series. insolvency_professional_name enables IP-level performance tracking across cases.
Common pitfalls
Six things go wrong in IBBI data pipelines. CIN format inconsistency — IBBI records sometimes contain CINs with leading/trailing spaces or mixed casing. Normalize CINs before dedup or join operations. Duplicate announcements — a single CIRP case can generate multiple public announcements (initial admission, revised deadlines, resolution plan approval). Deduplicate on CIN + case_type + announcement_type_full to avoid inflating case counts. Status lag — the registry updates case status on NCLT order publication, which can lag the actual order date by 2-4 weeks. For time-sensitive credit decisions, supplement with NCLT cause-list monitoring.
Claim deadline expiry — many records show claim submission deadlines in the past; these are historical records, not active opportunities. Filter on status and announcement date for actionable cases. IP name variations — insolvency professional names may appear differently across cases (initials vs. full names, honorifics). Fuzzy-match on registration number when cross-referencing. Voluntary liquidation vs. CIRP — voluntary liquidation (Section 59) is a solvent-company process, fundamentally different from CIRP (distressed). Mixing the two in credit-risk models produces misleading signals. Always filter on case_type explicitly.
Operational best practices for production pipelines
Tier the monitoring cadence to signal urgency. For active loan-portfolio screening, run CIN lookups daily — new CIRP admissions against your exposure book should trigger same-day alerts. For trade-credit counterparty monitoring, weekly is sufficient since CIRP admissions take 2-4 weeks to cascade into payment defaults. For longitudinal research datasets, monthly snapshots produce stable time-series without over-sampling the registry.
Build a change-detection layer on top of raw snapshots. The highest-signal event in IBBI data is a status transition — "Admitted" to "Resolved" (resolution plan approved) or "Admitted" to "Liquidation" (case failed). Persist status per CIN per snapshot and alert on transitions. A status transition from Admitted to Liquidation typically precedes a 60-80% haircut on unsecured claims — catching this transition early is materially valuable for recovery-rate estimation.
Integrate IBBI data with MCA filings and NCLT cause lists for a complete picture. IBBI provides the case-level view; MCA filings provide the financial-statement context (balance sheet, P&L before distress); NCLT cause lists provide hearing-date granularity. The three sources triangulated produce institutional-grade credit intelligence.
Related use cases
- Build India bankruptcy database from IBBI
- Monitor IBBI CIRP cases for legal compliance
- Lookup insolvency professionals on IBBI registry
- Scrape MCA India company data for due diligence — Cross-reference CINs with MCA registry for complete corporate intelligence.
- Track India company incorporations by state — Monitor new entity formation alongside insolvency trends.
- The complete guide to scraping compliance data
- All Thirdwatch use-case guides
Frequently asked questions
What insolvency data does the IBBI registry contain?
The IBBI registry publishes corporate debtor records including company name, CIN, case type (CIRP/liquidation/voluntary liquidation), announcement type, status, announcement date, claim submission deadline, applicant name, assigned insolvency professional, and remarks. As of 2026, the registry covers 7,700+ cases filed since the IBC came into force in 2016. Each record includes a direct link to the official IBBI notice PDF.
How does IBBI data improve credit risk models?
IBBI insolvency filings are leading indicators of corporate distress that surface 6-18 months before rating-agency downgrades. Integrating CIRP admission dates, case status transitions, and resolution timelines into credit-scoring models adds a regulatory-ground-truth signal absent from financial-statement-only models. Research by IBBI's annual reports shows that ~33% of CIRP cases result in resolution plans, ~45% end in liquidation, and the remainder are withdrawn or appealed — each outcome class maps to a distinct credit-risk trajectory.
Related
100 free credits, no credit card.
About 30 real searches. Add the MCP to Claude or Cursor in two minutes.