VIGIL Known Data Issues & Fixes

Every known defect in the seven signal datasets, with what to do about each, plus company name variations across NSE datasets.

Source data: VIGIL cross-source data-quality register · Last updated: 2026-10-19
Live tool

See the live datasets these issues relate to: BRSR analytics and the signal trackers.

This page documents known data-quality quirks in VIGIL and how they are being addressed. VIGIL pulls from multiple independent NSE datasets, each of which records a company name as it was at the time of filing - so the same company can occasionally appear under slightly different names.

Open the live VIGIL docs for the current state.

Company name variations

When a company changes its name (through a demerger, rebrand, or a formatting change like "Ltd" vs "Limited" or capitalisation), older records keep the old name while newer records use the new one. Because VIGIL pulls from multiple independent NSE datasets, the same company can appear under different names - occasionally showing up as two entries in search.

Current impact (as of 19 February 2026):

These numbers change as new filings arrive and more companies undergo corporate actions.

Note on Tata Motors

Searching "Tata Motors" returns multiple results - this is correct. In October 2025 Tata Motors executed a demerger into two separate listed companies: Tata Motors Passenger Vehicles Limited (PV + EV + JLR, symbol TMPV) and a new Tata Motors Limited (commercial vehicles, symbol TMCV). These are genuinely different companies with different ISINs.

Fix underway

VIGIL is building a company master table that uses the ISIN (a permanent security identifier) as the single source of truth. This will unify all name variants for the same company across every data source, correctly handle renames and demergers, and eliminate duplicate search results.

Data quality registry

Known defects in the seven signal datasets. We publish what the exchange filed, including the values that are wrong, because correcting them silently would mean our data no longer matches the filing you can go and check yourself. So each one is listed here instead.

These come from an automated sweep of every column of every table, looking for impossible values, extreme outliers, dates that cannot be right, and category values that are the same thing filed two ways. Row counts are as at the date shown and will drift as data arrives.

Pledge revocation is misspelled in most rows

Check before you rely on it | Table: insider_trading | as filed by the source

"Revokation of Pledge" appears on 826 rows against 20 spelled "Revocation of Pledge". The misspelling is the majority spelling, so filtering on the correct one returns almost nothing.

What to do: Match both spellings when filtering acquisition mode for pledge revocations, or you will miss 97% of them.

846 rows affected, measured 2026-08-16. Fields: acq_mode

A few filer-supplied dates are impossible

Check before you rely on it | Table: insider_trading | as filed by the source

Twelve rows carry dates in the future, the furthest being 3034, with others in 2036 and 2028. One row is dated 1925. These are filer typos in the year.

What to do: Our freshness reporting deliberately uses the exchange broadcast timestamp rather than these filer-supplied dates. Filter to a sensible date window before charting anything on them.

13 rows affected, measured 2026-08-16. Fields: acq_from_date, acq_to_date, intimation_date

A few transaction amounts are implausibly large

Check before you rely on it | Table: rpt_transactions | as filed by the source

Forty-one rows across five companies exceed one lakh crore, and the largest is about 3.3e16, which is roughly a hundred times India GDP. Allcargo accounts for most of them, all filed as "any other transaction". Amounts elsewhere in the table are consistent: the median is about 62 lakh and per-company medians run from roughly 7.5 lakh to 3.6 crore.

What to do: Sanity-check the top of the distribution before summing amounts, and consider excluding rows above a sensible ceiling. Published as filed.

41 rows affected, measured 2026-08-16. Fields: amount_during_period, outstanding_balance, approved_value

The same company appears under different names across datasets

Worth knowing | Table: all | as filed by the source

Each NSE dataset records the company name as it stood at the time of filing, so renames, demergers and formatting differences ("Ltd" versus "Limited", capitalisation) leave the same company under several names. Around 271 symbols are affected across tables.

What to do: Join on symbol or ISIN rather than company name wherever possible. Most sections in the app are already symbol-keyed.

271 rows affected, measured 2026-02-19. Fields: company_name

One rating agency filed under two spellings

Worth knowing | Table: credit_ratings | as filed by the source

Acuite Ratings & Research Limited also appears as "Acute Ratings & Research Limited". They are the same agency, one character apart. The two spellings ran side by side from early 2024 rather than one replacing the other, so a records-before / records-after split will not separate them. The "Acute" spelling was last seen in February 2026.

What to do: Grouping or filtering by rating agency splits this agency in two and understates whichever spelling you picked. Combine them when counting by agency.

199 rows affected, measured 2026-08-16. Fields: rating_agency

Outlook values differ only by capitalisation

Worth knowing | Table: credit_ratings | as filed by the source

The same outlook is filed several ways: Stable, STABLE, stable and (Stable); likewise Positive/POSITIVE/positive and Negative/NEGATIVE/negative. A handful of single-row typos sit alongside them, including "Negativet", "Postive" and "Stable`".

What to do: A case-sensitive GROUP BY on outlook produces several buckets for one value. Lower-case and trim before grouping.

10,046 rows affected, measured 2026-08-16. Fields: outlook, outlook_earlier

Rating labels carry the agency prefix inconsistently

Worth knowing | Table: credit_ratings | as filed by the source

The same rating appears as "CRISIL AAA", "Crisil AAA" and "CrisilAAA", and as "[ICRA]AAA", "ICRA AAA" and "[ICRA] AAA". Note that AA, AA+ and AA- are genuinely different ratings and are not variants of each other.

What to do: Normalise case and spacing before grouping by rating. Do not strip + or - while doing so, or you will merge three distinct rating grades.

3,225 rows affected, measured 2026-08-16. Fields: credit_rating, credit_rating_earlier

Rating action text appears in the outlook field

Worth knowing | Table: credit_ratings | as filed by the source

Some rows carry values such as "Reaffirm" in the outlook column, which belongs in rating_action, and a smaller number carry instrument or rating text there instead.

What to do: Treat outlook as free text rather than a clean category. Filter to the known outlook values if you need a category.

630 rows affected, measured 2026-03-09. Fields: outlook

Coverage is instrument-level and narrower than the row count suggests

Worth knowing | Table: credit_ratings | as filed by the source

The table holds around 13,000 rows but only about 199 distinct company names and 115 NSE symbols, because the NSE Centralised Rating Database covers issuers with listed DEBT. One large NBFC alone accounts for several thousand rows across two name spellings.

What to do: Do not read the row count as company coverage. This is not a rating feed for the whole listed universe.

13,232 rows affected, measured 2026-08-16. Fields: company_name, nse_symbol

Category values vary in case and plural form

Worth knowing | Table: insider_trading | as filed by the source

"Promoter" and "Promoters" both appear, as do "Immediate Relative" and "Immediate relative", "Warrant" and "Warrants", "Debenture" and "Debentures", and "NA" alongside a single "N/A".

What to do: Normalise case and trailing plurals before grouping by person category or security type.

7,911 rows affected, measured 2026-08-16. Fields: person_category, sec_type, exchange

The same disclosure is often filed twice, and both copies are in the data

Worth knowing | Table: insider_trading | as filed by the source

Since May 2026, 970 rows across 230 companies repeat a row from another filing exactly: same person, security, quantity, value and dates. Most are the same disclosure submitted twice as an original, usually minutes apart. 63 are a revised filing kept beside the original it replaces. The older feed shows the same pattern on 347 rows.

What to do: Row counts and summed values for insider trading are higher than the number of distinct trades. Deduplicate on person, security, quantity, value and dates before counting or summing. A company either has a trade or it does not, so the Flags on the Signals page are not affected.

1,317 rows affected, measured 2026-10-19. Fields: xbrl_url

Derivative trade values are entered on different bases by different filers

Worth knowing | Table: insider_trading | as filed by the source

For a futures or options trade the filing asks for a notional value. PETRONET and NAUKRI filers entered strike price plus premium, about Rs 252 a unit on a 250 put. The M&M filer entered the premium alone, about Rs 3 a unit. The values are published as entered.

What to do: Do not add up or compare derivative values across filers without checking the basis. Divide the value by the units and compare with the strike in the contract name to see which one was used.

61 rows affected, measured 2026-10-19. Fields: deriv_buy_value, deriv_sell_value

Ordinary shares are labelled two ways, depending on when they were filed

Worth knowing | Table: insider_trading | as filed by the source

Filings before May 2026 call ordinary shares "Equity Shares" (32,874 rows). Filings since then, from the exchange's newer XBRL feed, call them "Equity" (6,187 rows). On the insider page the Non-Equity preset counted the newer label as non-equity until 19 Oct 2026.

What to do: Treat "Equity" and "Equity Shares" as the same thing when filtering or grouping by security type.

39,061 rows affected, measured 2026-10-19. Fields: sec_type

Three companies have two listed share classes, and NSE files both under one name

Worth knowing | Table: pledge_data | as filed by the source

NSE's pledge feed identifies a company by NAME only. It carries no symbol, no ISIN, no link to the underlying filing, and no per-filing date - the endpoint ignores any date range you pass and stamps every row with the moment of that push. So a company with two separately listed lines - an ordinary share and a DVR - files two rows under one name. Future Enterprises (FEL / FELDVR), GACM Technologies (GATECH / GATECHDVR) and Jain Irrigation (JISLJALEQS / JISLDVREQS) are the three in our universe. Until 2026-09-10 both rows landed on the ordinary symbol, so each of those companies rendered TWICE on /signals with every other signal count duplicated beside it, and the headline company count was five too high. The rows are now assigned by share base: a DVR issue is always the smaller tranche (measured at 3-17% of the ordinary line across all three), confirmed independently for Jain Irrigation against its own quarterly filing, which implies 733.9M shares and matches the 714.6M row.

What to do: Each share class now appears as its own row with its own pledge percentage, which is what the exchange actually filed. Nothing is merged and nothing is dropped. If you are comparing a company total against another source, add the two lines together. The sync fails loudly if any symbol ever carries two pledge rows again.

6 rows affected, measured 2026-09-10. Fields: com_name, nse_symbol, tot_issued_shares

Two symbol-map entries pointed unrelated companies at one code

Worth knowing | Table: pledge_data

The pledge symbol map is hand-maintained (company name to NSE symbol). A regeneration on 9 March 2026 introduced three bad entries: Aban Offshore and ICSA (India) were both pointed at "ABORLSUPAM", which is not an NSE symbol at all, and Uniphos Enterprises was pointed at UPL, which is a different listed company. The effect was the same as the DVR case - those companies rendered twice, and UPL Limited could show the Uniphos pledge percentage instead of its own. Corrected 2026-09-10: Aban Offshore to ABAN, Uniphos Enterprises to UNIENTER, ICSA (India) left unmapped because it is delisted.

What to do: UPL Limited now shows its own 1.31%. Aban Offshore and Uniphos Enterprises appear under their real symbols. Separately, 92 map entries point at symbols NSE no longer lists - almost all are genuinely delisted companies whose symbols were valid at the time, and that is expected rather than a defect.

3 rows affected, measured 2026-09-10. Fields: nse_symbol

Over half of all rows use the catch-all transaction type

Worth knowing | Table: rpt_transactions | as filed by the source

About 56% of rows are filed as "any other transaction" rather than one of the specific types. Sale of goods or services is 16% and purchase is 10%, so the named categories cover well under half the table.

What to do: Grouping by transaction type puts the largest group in the least informative bucket. The counter party name and the description field carry more of the information.

1,98,266 rows affected, measured 2026-08-16. Fields: transaction_type

Acquirer date is a range string, not a date

Worth knowing | Table: sast_disclosures | as filed by the source

The field holds text such as "01-APR-2023 to 11-DEC-2024". It cannot be compared to a date, and sorting it orders the text rather than the calendar.

What to do: Use broadcast_datetime for any date filtering or sorting. The app displays this field as "Date Range" for the same reason.

12,451 rows affected, measured 2026-08-16. Fields: acquirer_date

Some values lost their escape characters before we received them

Minor | Table: credit_ratings | as filed by the source

A few values read as "Rating Watch withnDevelopingnImplications" and "tCompany Secretary & Compliance Officer", where a line break and a tab have been flattened into a literal n and t. We checked the raw XBRL on the NSE archive and the mangled text is already there, so this happened upstream and is not our parsing.

What to do: Cosmetic. These rows will not match a clean string comparison on outlook or designation.

41 rows affected, measured 2026-08-16. Fields: outlook, outlook_earlier, designation

Signatory designations contain filer typos

Minor | Table: credit_ratings | as filed by the source

Includes "Company Secetary", "Company Seretary", "Directror", and "cun Company Secretary" for "cum". Capitalisation also varies widely across the same title.

What to do: Only relevant if you are grouping by signatory designation, which most analysis will not do.

209 rows affected, measured 2026-08-16. Fields: designation

91 older rows have no security type and no quantity or value

Minor | Table: insider_trading | as filed by the source

These come from the exchange feed used before May 2026. 68 arrived empty from the exchange. 9 are sales that arrived without a security type. 14 from March and April 2026 have equity details in their XBRL filing that the old feed did not carry. Six other blank rows were option trades and have been filled from our archive of the original feed.

What to do: Open the linked XBRL filing for the detail on these rows. They are counted as insider filings but add nothing to share or value totals.

91 rows affected, measured 2026-10-19. Fields: sec_type, no_of_securities, sec_value

Negative amounts are a sign convention, not an error

Minor | Table: rpt_transactions | as filed by the source

Around 12,000 rows carry a negative outstanding balance and around 6,000 a negative transaction amount. These are spread evenly across every transaction type with ordinary magnitudes, which is what a payable-versus-receivable convention looks like. Recorded here because an automated scan flags them and they are not a defect.

What to do: Do not filter negatives out as bad data. Use absolute values only if you specifically want gross flow.

18,342 rows affected, measured 2026-08-16. Fields: outstanding_balance, amount_during_period

Open the live VIGIL docs on TIGZIG, or see all VIGIL data sources.