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.
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
| Approach | Correct of 130 | Wrong and published | No-chip filings right | Auditor'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 request | 130 | 0 | 18 / 18 | 53 / 53 | ₹38 |
| Rules promptThe seven-step rule order in the prompt, fixed-spacing text sample | 129 | 1 | 17 / 18 | 25 / 53 | not metered |
| Plain promptOnly the six chip names, fixed-spacing text sample | 112 | 18 | 1 / 18 | 25 / 53 | not metered |
| Opus 5.5, facts and checkSame pipeline on a frontier model | not run | not run | not run | not 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 label | Filings | Plain prompt | Rules prompt | Facts, then a check |
|---|---|---|---|---|
| Annual Report | 53 | 52 | 53 | 53 |
| AGM Notice | 22 | 22 | 22 | 22 |
| No chip | 18 | 1 | 17 | 18 |
| Investor Presentation | 12 | 12 | 12 | 12 |
| Transcript | 10 | 10 | 10 | 10 |
| Conference Call | 9 | 9 | 9 | 9 |
| Financial Results | 6 | 6 | 6 | 6 |
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:
- Transcript. The spoken record of an earnings call, with speakers and questions.
- Conference Call. Only the invite, the dial-in, or a note that the audio is up.
- 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.
- Investor Presentation. A slide deck, even when the slides are about the quarter.
- Financial Results. The quarterly results or limited review, when it is not a deck.
- AGM Notice. It convenes the annual general meeting, and the two reports are not in it.
- 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.






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.
- Find the evidence pagesScan every page for the headings that decide the chip: auditor's report, board's report, balance sheet, “notice is hereby given”, speaker turns, dial-in details, results, decks, corrigenda, scrutinizers, voting results, EGMs, postal ballots. Send pages 1 to 3, a window around each match, and the last page, each tagged with its page number.
- Ask for facts, not a labelSeven yes/no questions about what is in the file, and what else it might be. A mention, an agenda item or “enclosed herewith” is not the document.
- Look at pages when the text is missingThe model can reply
{"view_pages":[5,6]}and get those pages back as images, at most twice. - Pick the chip in codeThe seven-step order above, applied to the facts. The model never ranks the rules.
- Check before publishingThe facts must agree with what the page scan found. Scanned files need a second, image-only read to agree.
Agrees → publishDisagrees → hold, with the reason
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.
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.
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.