# Changelog of Indian Company Data — CIN, Directors & Financials (`foxlabs/indian-company-data`) Actor

- **URL**: https://apify.com/foxlabs/indian-company-data/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/indian-company-data.md

## Changelog

### 0.3.2 — 2026-09-10 — failed lookups become free (per-record billing)

- **You will pay only for delivered company records.** The Actor now charges a new `company-record` event for each delivered company, and rows that only report a failed lookup (`error`, `matched: false`) are pushed without a charge.
- **Timing:** Apify applies pricing changes after a 14-day notice. From **25 September 2026** the pricing switches from the per-dataset-item event to `company-record` at the same price ($0.004). Until then billing is exactly as before; the code detects the switch by itself.
- No output field changed.

### 0.3.1 — 2026-09-10 — name-match check, README + dataset schema

- **New fields for name look-ups: `query` and `nameMatchScore`.** Names are resolved through web search, and a vague or unknown name could come back as an unrelated company with nothing in the row to show it. Rows from `companyNames` now carry the searched name and the share of its words found in the resolved legal name (1 = all, 0 = none; legal suffixes ignored). Both are `null` for CIN, URL and discovery rows. Additive — no existing field changed, no row is dropped.
- README rebuilt to the current Fox Labs standard (AI agents / MCP / x402, use cases, integration, FAQ, troubleshooting, legal, support) with this Actor's real inputs: `cins`, `companyNames`, `companyUrls`, `industry`, `state`, the status / class filters and Director network. The 2026-09-07 README showed a placeholder input (`queries`) that this Actor does not read.
- Typed dataset schema restored (the 0.3 build shipped without it) and extended with the Director network fields and the two new fields.

### 0.3 — 2026-09-10 — Director network

- **New input `includeDirectorNetwork` (default off) + `maxDirectorsPerCompany` (default 25).** For every director the Actor fetches their Tofler director page (`/<slug>/director/<DIN>`) and attaches `directorships[]` — company name, CIN, company URL, status, industry, incorporation date, appointment date, "as on" date, designation — plus `directorshipsCount`. The company row gets `directorNetworkRequested` and `directorNetworkCount` (distinct other CINs across the board).
- **`directors[].profileUrl`** is now always emitted (link to the director page).
- Measured locally 2026-09-10 (Infosys + Reliance, 24 requests, 0 failed): 22 directors → 127 board seats; fill: companyName/cin/companyUrl/incorporationDate/status/appointedOn/asOn/designation 127/127, industry 124/127; uniqueness DIN+CIN 127/127; 96/127 seats have an "as on" date in 2025–2026.
- Additive change: no existing field renamed or removed. Dates in `directorships[]` are ISO (YYYY-MM-DD).
- A failed director page never drops the company: the director gets `directorships: null` + `directorNetworkError` and the company row still ships.

### 0.2.1 — 2026-07-28

- **`age` split into typed fields.** Tofler renders one string, `"1981, 45.1 years"`, and the Actor shipped it verbatim as `age` — while `incorporationYear` (1981) already carried the year half. `age` is replaced by numeric **`ageYears`** (`45.1`); `incorporationYear` is unchanged. Measured on 30 live company pages: `age` filled 30/30 before → `ageYears` filled 30/30 after, `incorporationYear` 30/30 in both.
- **Masked empties are `null`, not placeholder text.** Tofler writes `"-"` where it has no figure and `"NA"` / `"0"` where it has no address detail, and those placeholders were reaching the dataset as values. A single `unmask()` helper now maps them to `null`. Measured over the same 30 pages: `balanceSheet.items` **26 of 374 cells** were the string `"-"` (12 of 30 companies affected) → 0, now `null`; `pan` **7 of 30** was `"-"` → 0; `locations[]` 3 cells (`address:"NA"`, `pincode:"NA"`, `type:"0"`) → 0. Whole-record scan for masked empties: **35 → 0**. Numeric balance-sheet values, `balanceSheetText` and every other field are unchanged.
- **`description` is the company's business description, not Tofler's ad copy.** The field was `meta[name="description"]`, i.e. Tofler's SEO line — *"Are you looking for Infosys Limited financials? Visit Tofler for its net worth, ratios…"* — identical boilerplate on 30 of 30 companies and of no value to a buyer. It now carries the one-line business description Tofler prints above the company paragraph (*"The company manufactures and refines sugar in India and internationally"*). Measured: **17 of 30** companies have one and now return it, 0 boilerplate leaked, 0 clipped; the other 13 pages carry no description at all and return `null` rather than filler.
- Unchanged and re-verified on the same run: CIN, PAN (where present), status, company class, email, `directors[]` with DIN, balance-sheet figures, charges, subsidiaries, locations and geo-coordinates.

### 0.2 — 2026-07-17

- Discovery mode: browse companies by industry + state (30 industries × 36 states) and enrich every match.
- Prefilled example CINs (Reliance, Infosys) so the first run returns full profiles with no setup.

### 0.1

- Initial release. CIN / company-name / Tofler-URL lookup: identity, status, capital, directors with DIN, latest balance sheet, charges, subsidiaries and locations.
