Draft. Numbers are from the runs so far on GLM 5.3 Flash. The multi-model comparison has not been run yet.

Labelling Indian exchange filings: make the model read the right pages

On 130 hand-labelled NSE and BSE filings, a prompt that spelled out the rules already got 129 right, but in more than half the annual reports it never saw the auditor's report its own rule depends on. Sending the pages that hold the evidence, asking for facts instead of a label, and checking every label before it goes live published no wrong chips in the last four full runs, at ₹38 per thousand filings.

53 / 53reports actually readAnnual reports where the model saw the independent auditor's report. The old reading window showed it in 25 of 53, and the Annual Report rule depends on it.
0wrong chips publishedIn each of the last four full runs over the 130 filings. In one of them the model proposed a wrong label, and the check held it.
₹38per 1,000 filingsOn GLM 5.3 Flash, read off token usage. The same tokens on Opus 5.5 would cost about ₹1,510, roughly 40× more. That one is an estimate, not a run.

Dvar makes models do one job well for one business. This is a worked example of that on a job every Indian market data product runs: deciding what a newly filed company document actually is, so it shows up in the right place.

Raise labels every new NSE and BSE filing with one chip on the ScanX company page. Annual Report is the chip that matters most in AGM season, and it is wrong about 8 to 10% of the time in production. We pulled 147 real filings, labelled 130 of them by reading every PDF, and compared three ways of asking the same model. The first two were prompt changes. The third changed what the model reads, what it is asked, and what happens to its answer.

Three ways to ask, one set of filings

ApproachCorrect of 130Wrong and publishedNo-chip filings rightAuditor's report seen₹ / 1,000 filings
Facts, then a checkEvidence pages, seven yes/no facts, rule order in code, checks before publishing, page images on request130018 / 1853 / 53₹38
Rules promptThe seven-step rule order in the prompt, fixed-spacing text sample129117 / 1825 / 53not metered
Plain promptOnly the six chip names, fixed-spacing text sample112181 / 1825 / 53not metered
Opus 5.5, facts and checkSame pipeline on a frontier modelnot runnot runnot runnot run≈ ₹1,510 estimate

All measured arms use GLM 5.3 Flash at temperature 0. The two prompt arms publish every answer, so every miss is a published miss. “No-chip filings” are the 18 EGM notices, corrigenda, postal ballots, scrutinizer reports, voting results and meeting outcomes that should get no chip. “Auditor's report seen” counts the 53 annual reports where that heading, in any spelling, was in the text the model was given. The Opus cost applies Opus 5.5 prices to the token counts GLM used and is not a measured run.

Where the misses were

Hand labelFilingsPlain promptRules promptFacts, then a check
Annual Report53525353
AGM Notice22222222
No chip1811718
Investor Presentation12121212
Transcript10101010
Conference Call9999
Financial Results6666

Correct answers by hand label.

The plain prompt knew what an AGM notice looks like and called almost everything that mentions an AGM one: 37 filings, of which 22 were. Fourteen scrutinizer reports, meeting outcomes, postal ballots and corrigenda went onto the AGM Notice shelf, two postal-ballot results became transcripts, and a board-meeting outcome became an annual report. Spelling out the rules fixed nearly all of that, which is why the next section matters more than the table.

The decision behind every chip

A company files a document with the exchange and it lands on ScanX within minutes. Somebody, or something, has to decide which shelf it goes on. An investor looking for the annual report clicks the Annual Report chip and expects the annual report, not the notice that convenes the meeting where it will be adopted.

Each PDF gets one of seven outcomes, applied in this order:

  1. Transcript. The spoken record of an earnings call, with speakers and questions.
  2. Conference Call. Only the invite, the dial-in, or a note that the audio is up.
  3. Annual Report. The board's report and the independent auditor's report are in the file. A notice bound in front does not change that.
  4. Investor Presentation. A slide deck, even when the slides are about the quarter.
  5. Financial Results. The quarterly results or limited review, when it is not a deck.
  6. AGM Notice. It convenes the annual general meeting, and the two reports are not in it.
  7. No chip. An EGM notice, a corrigendum, a postal ballot, a scrutinizer's report, voting results, or the proceedings of a meeting already held.

The hard part is that the same words appear in documents that are not the same. A notice says the annual report is enclosed. A report carries the notice on its first ten pages. A scrutinizer's report is full of “Annual General Meeting”. The exchange subject line often names both, and is often wrong about which one was attached.

Same words, different documents

Four filings from the labelled set. Each shows the page that decides it, what the exchange subject said, and what each approach answered.

Balmer Lawrie Investments · 166 pages
Subject: “Notice For The 24th Annual General Meeting And Annual Report For The Financial Year 2024-25”
Page 1 of the Balmer Lawrie filing
Page 1. The file opens with the AGM notice.
Page 77, the Independent Auditor's Report
Page 77. The Independent Auditor's Report. The Board's Report starts on page 24.
Plain promptAGM Notice
Rules promptAnnual Report
Facts, then a checkAnnual Report
The plain prompt read the opening notice and stopped there. The facts approach reported the board's report from page 24 and the auditor's report on the annual accounts from page 77, and the rule order makes that an Annual Report whatever sits in front of it.
Petronet LNG · 354 pages
Subject: “Corrigendum To The Annual Report For FY 2024-25”
Page 1 of the Petronet LNG filing
Page 1. A corrigendum letter, with the updated annual report attached as Annexure-2.
Page 206, the Independent Auditor's Report
Page 206. The Independent Auditor's Report on the standalone statements.
Plain promptAnnual Report
Rules promptAnnual Report
Facts, then a checkAnnual Report
Every arm got this one, and it is here for the subject line. “Corrigendum” is one of the words our check treats as a warning, because corrigenda get no chip. The file is the full corrected report, so the board's report and auditor's report win, and a complete report is the one case where the check lets the file outrank the subject line.
MRP Agro · 4 pages
Subject: “Corrigendum To The AGM Notice Dated July 29, 2025”
Page 1 of the MRP Agro corrigendum
Page 1. A correction adding one agenda item to a notice already sent.
Plain promptAGM Notice
Rules promptAGM Notice
Facts, then a checkNo chip
Everything on the page is about the AGM, and both prompts took the bait. This was the rules prompt's only miss. Asked for facts, the model reported other_kind = corrigendum, and a corrigendum can never become an AGM Notice in the code.
Ather Energy · 9 pages, scanned after page 1
Subject: “Shareholder Meeting / Postal Ballot-Outcome of Postal_Ballot”
Page 1 of the Ather Energy filing
Page 1. Postal ballot results. The pages after it are scans with no text.
Plain promptTranscript
Rules promptNo chip
Facts, then a checkNo chip
With almost no text to go on, the plain prompt picked the nearest-sounding label. The facts approach answered from page 1, and because the file is mostly scanned, a second read from page images alone had to agree before it was published.

Two more from the set go the other way. Brigade Hotel Ventures filed a “Corrigendum” letter with the whole corrected investor deck behind it, which is a deck, and an early version of our rules wrongly gave it no chip. 360 ONE WAM's “Outcome of AGM” is the proceedings of a meeting already held, which the plain prompt called an AGM Notice.

Right for the wrong reasons

The rules prompt scoring 129 of 130 looks like the problem is solved. It is not, and the reason is what the model was reading.

Both prompt arms saw the first 6,000 characters of the file and six evenly spaced slices of 2,500 characters, capped at 24,000. On a 300-page annual report that is under 3% of the text. The Annual Report rule depends on the independent auditor's report being in the file, so we checked how often that report was actually in what the model read.

Hand-labelled annual reports where the heading “Independent Auditor's Report”, in any spelling, appeared in the text the model was given.

In 28 of 53 annual reports the rules prompt never saw the evidence its own rule asks for, and called all 28 annual reports anyway. Balmer Lawrie shows what that looks like. The 24,000 characters the rules prompt read from that 166-page file mention auditors 13 times, and none of them is the auditor's report. They are agenda items, appointments and passing references: fix the statutory auditors' pay, appoint a secretarial auditor, and this one:

“…for the Financial Year ended on 31st March, 2025 together with the Reports of the Board of Directors and Auditors thereon…”

That is a resolution in the AGM notice, which the prompt's own rules say is not the report. Its answer was right, and its reason was not:

“The 166-page file is the AGM notice bound with the audited standalone and consolidated financial statements, board-signed reports and secretarial audit report for FY 2024-25, so it is the Annual Report with the notice in front.”

The likeliest cues are the page count we passed in and what a 166-page file with a notice on top usually is. That guess is right on this set. It is the same guess that goes wrong in production, when a long notice or a thick cover letter lists the report it is sending.

Facts, then a check

The fix changes four things and keeps the model the same.

What the model returns

For Balmer Lawrie, in full:

{
  "earnings_call_transcript": false,
  "call_logistics_only": false,
  "board_report_present": true,
  "auditor_report_on_annual_accounts": true,
  "slide_deck": false,
  "periodic_results": false,
  "convenes_agm": true,
  "other_kind": "none",
  "reason": "The file is the FY 2024-25 Annual Report containing the Notice
             convening the 24th AGM (pages 1-9), the Board's Report (page 24
             onwards), and the Independent Auditor's Report on the Standalone
             Financial Statements (page 77)."
}

convenes_agm is true, and it does not matter. Board's report and auditor's report both true is rule three, and rule three comes before rule six. Every published chip traces back to named pages a reviewer can open.

The tool call is plain JSON

The gateway we call ignores the standard tools field, so the page-image tool runs over text. The model writes the request, code renders the pages as grayscale JPEGs of about 55 KB, and the next message carries them. Requests are capped near 256 KB, so after each look the earlier images are replaced by the model's own notes on them. On the latest full run the model asked to look at pages in 4 of 147 filings. With the text of an AGM notice, a transcript and a scrutinizer's report blanked out entirely, it asked for the pages it needed and got all three right from images alone.

Nothing ships unchecked

A model at temperature 0 does not give the same answer twice. Between two fresh runs over the same filings, 14 facts changed across 13 filings. In twelve of them the change was whether a cover letter or corrigendum got noted, and the chip stayed the same. One was not: on the second run the model said Machino Plastics' 158-page annual report had no board's report, which would have made it an AGM Notice.

The page scan had found the auditor's report, the board's report and the financial statements across the file. The check refused to publish an AGM Notice over that, and held the filing with the reason written next to it. The same run also held the three scanned PDFs, correctly labelled but, at that point, with no way to check them because the model could not yet read page images. So that run published 126, held 4, and got none wrong. Once the model could read page images, the full runs published all 130. That is the job of the check: not to be clever, but to make one wrong answer a held filing instead of a wrong chip on a company page.

The checks, in full: an Annual Report needs the auditor's report and statements in the text; a long file with all three report sections cannot be anything else; a Transcript needs speaker turns; a Conference Call needs call details and a short file; an AGM Notice needs convening language; Financial Results need results language; and a chip is held when the exchange subject names a filing that gets no chip, unless the file is a complete report.

The data

147 filings. 100 came from the BSE announcement feed on twelve peak AGM days between August 2025 and September 2026, chosen to over-represent the documents that get confused: AGM notices, annual reports, notices with both words in the subject, and meeting outcomes, voting results, postal ballots and corrigenda. The other 47 are transcripts, conference call notices, results and investor presentations, so every chip is represented.

147filings, 1 to 662 pages, 10,354 pages in all
130labelled by hand from the PDF, not the subject line
3scanned files with almost no extractable text

The 130 labels: Annual Report 53, AGM Notice 22, no chip 18, Investor Presentation 12, Transcript 10, Conference Call 9, Financial Results 6. Each was labelled by opening the PDF and applying the order above. The exchange subject was recorded but never used as the label.

The bill

Costs are read off the token counts the API returns for every call, including the looks at page images and the second reads on scanned files.

155model calls for 147 filings
482,795tokens in, 19,108 out
₹5.59for all 147 on GLM 5.3 Flash

Per 1,000 filings. GLM 5.3 Flash at ₹10 per million input tokens and ₹40 per million output tokens. Opus 5.5 at $4 and $20 per million, converted at ₹96 to the dollar, on the same token counts.

The most expensive filing was Patel Engineering's 204-page annual report, where the model asked to see four pages as images: ₹0.13 across two calls. A typical text filing is one call and about four paise. A 322-page annual report took 8 seconds end to end in the browser, a transcript 6 seconds, and a scanned postal-ballot result 24 seconds.

At 10,000 filings a month the line reads about ₹380 on GLM 5.3 Flash and about ₹15,100 on Opus 5.5 with the same pipeline. These are working numbers from a measured run, not a price quote.

What this does not show

130 filings is a small set

One miss is 0.8 points. The honest reading of 130 of 130 is that the error rate on documents like these is low, not that it is zero, and the set was built from AGM season, where Annual Report and AGM Notice are over-represented on purpose.

The checks were tuned on these labels

The speaker-turn pattern, the order of the no-chip rule and the exception that lets a complete report outrank the subject line were all adjusted after looking at misses in this set. The first full run, before the no-chip rule was fixed, published one wrong chip on the Brigade deck. A fresh, untouched set of filings is the next number that means something.

One person labelled them

Each filing was labelled once, by one reviewer on the team building this, reading the PDF. We have no second labeller and no agreement figure.

Opus 5.5 is an estimate, not a run

The Opus cost uses GLM's token counts. Opus counts tokens differently, especially for images, and we have not measured its accuracy on this set at all.

The prompt arms were not metered

The plain and rules arms ran before usage was recorded, so their cost is missing rather than guessed.

The model does not answer the same way twice

14 facts changed between two fresh runs at temperature 0, and one run proposed a wrong label that only the check stopped. Any single run is a sample.

One model, one season

Every measured arm ran on GLM 5.3 Flash, and 100 of the 147 filings come from AGM season. Financial Results has only 6 labelled examples, so nothing here says much about results season.

Three scanned files

Reading from page images was tested on three real scans and three filings with their text blanked out. That is enough to show it works, not enough to say how often.

The 8 to 10% is Raise's number

The production error rate on the Annual Report chip comes from Raise's live pipeline, which is not the one tested here. We did not measure it.

The links go to BSE

Every stored filing points at its BSE copy. NSE-only filings and non-English filings are not in this set.

What we would run next

The honest next number comes from filings nobody has looked at yet. About 300 of them, including some outside AGM season, labelled before any model output is seen, with a second person labelling 50 to measure agreement. The page selection, the questions and the checks stay frozen before the set is scored.

Four arms: the plain prompt, the rules prompt, the seven facts on the old fixed-spacing text, and the full facts-then-check pipeline. The third arm separates what the questions buy from what the evidence pages buy. Each runs three times on GLM 5.3 Flash, Opus 5.5, GPT-5.6 and one open model, and each run reports proposed accuracy, wrong chips published, hold rate, per-chip results, run-to-run agreement, metered rupees per thousand, and median and 95th-percentile time. At the rates above that is roughly ₹10,000 to ₹15,000, most of it on the two frontier models.

Try it on a filing

The live dashboard shows all 147 filings with the pages that decided each one, the facts the model returned, and what the run cost. “Try your own filing” reads a PDF in your browser and sends only its text, plus pictures of pages with no text, to the model. Nothing is stored.

Most businesses run a decision like this somewhere: a document type, a queue, a review flag. It fires thousands of times a day, the answer comes off a list somebody wrote down years ago, and a wrong answer is visible to a customer.

If you have one, write to us with the decision and roughly how often it happens. We will tell you what it scores today before anybody talks about training anything.