Ploutos AI

Stock Research from SEC Filings

Visit Website
September 5, 2026 We published a 2.24% dividend yield. The real number was 8.96%.

I build a tool that reads SEC filings and writes fundamental research on US stocks. The interesting engineering problem turned out to be nowhere near where I expected it.

Every US public company files financials in XBRL, a machine readable format, free, straight from the SEC. Which sounds like a solved problem: pull the tag, read the number, done. That works right up until you point it at a filer that does not look like the ones you tested on.

Here is the one that taught me. A company had migrated from filing as a foreign issuer under IFRS to filing a normal domestic 10-K under US GAAP. Its quarterly dividend rows were tagged with the annual period marker, and there was no summable trailing twelve months anywhere in the data. My code did the obvious thing, found what looked like an annual figure, and published a 2.24% yield against a real one of about 8.96%. Nothing errored. Nothing looked odd. It just quietly published a number that was wrong by a factor of four.

That was not an isolated case. A bank filed its quarterly dividend table inside the 10-K, and we returned $0.26 for the year. An insurer returned $2.83 against a real $4.55. A company that pays no dividend at all needs the answer to be "none", not zero, because zero is a claim and none is an absence. One large filer exposes no per share dividend tag whatsoever, and the only correct behaviour is to say so rather than to derive something plausible.

Then it got worse in a more interesting way.

A pre revenue biotech parks about three quarters of its liquidity in marketable securities. That position sits under an accounting element I had not mapped, so it read as zero, and the tool published a cash floor valuation of $1.43 when the real figure was $4.29. I fixed it, felt clever, and then found the same failure at a second company using a different element for the same line. Then a third, using a third element, where $25M of bank cash sat next to $234M of securities. Liquidity read ten times too small.

Three companies. One balance sheet concept. Three different tags.

That is the thing I wish someone had told me earlier. XBRL is not a schema that constrains filers into one shape. It is a vocabulary they choose from, and a tag chain that happens to cover the one ticker you tested is not a tag chain that covers the concept.

What actually fixed it

Not more unit tests. I had unit tests, and they all passed, because they were written against my own understanding of the data. A unit test proves your resolver is self consistent. It cannot tell you that your understanding is wrong.

What fixed it was a golden set: real SEC companyfacts payloads, frozen as fixtures, for the filers whose shapes break naive extraction. The foreign issuer mid migration. Two IFRS filers in different currencies. A retailer on a 52 or 53 week fiscal calendar. A June year end. A monthly dividend payer, where four times the quarterly figure is not the answer. A company that pays nothing. A company the SEC has no tag for.

The part that matters: every expectation in that file was checked against what the issuer actually disclosed, not recorded from whatever my code happened to return. That inverts what the test is for. A failure now means we disagree with reality, not that we disagree with a fixture someone captured on a Tuesday.

The whole set is a few hundred KB and runs offline, so it costs nothing to run on every commit.

The part that generalises

If your product reads data you did not produce, from sources that are allowed to disagree about shape, then your test suite is probably measuring the wrong thing. Mine was. Passing tests told me the code did what I meant. They could not tell me that what I meant was wrong for a quarter of the universe.

The bugs in this post were all found in production, by looking at outputs and asking whether the number was believable, not by anything going red. That is the uncomfortable bit. Every one of them shipped silently, and every one of them was a plausible looking number in the right units, on the right scale, next to a company name.

Happy to go deeper on any of it if it is useful to anyone.

7 Comments

  1. 2
    The golden set seems more commercially important than the engineering fix itself. Have you seen users care about these accuracy failures enough to change which research tool they trust, or is correctness still something they assume every financial product already handles?
    1. 1

      Honestly? No. Not yet.
      The objection I actually get isn't from other research tools, it's "why would I pay when ChatGPT or Perplexity already does this for free." Four times now, across Reddit, a Facebook group and one interview.
      Best example: a guy on Reddit posted the exact prompt he uses with Perplexity, got upvoted for it, said it works great. I asked if he ever checks whether the numbers are current, because I've watched those models mix up fiscal years. He said "no, the data's fine."
      That's kind of the whole answer. He isn't trading accuracy for price. He doesn't know there's anything to trade. Nobody double checks a number that looks plausible, is in the right units, and is sitting next to a company name.
      So the golden set isn't a selling point, no. It's what saves you the day someone does check. And the one they check is always the company they already know inside out, where they know the real figure by heart.
      The commercial bit is a little depressing though. Saying "we're more accurate" converts nobody. What actually worked was showing one wrong number next to the filing that contradicts it. When I answered that objection with "yeah, I used those tools too, then I started seeing wrong numbers", the conversation kept going. When I answered it with the accuracy pitch, it died.
      So correctness is table stakes nobody claps for. Being able to point at a specific screwup, ideally your own, is the part people actually react to. :)

      1. 1
        That’s a much stronger commercial signal — especially the difference between “we’re more accurate” and showing someone a concrete failure they can verify. I’d be interested in digging into what happens after that objection turns into a real conversation. Happy to continue privately — what’s the best email to reach you on?
        1. 1

          Short version while it's still in the thread, in case it's useful to anyone else: what happens is the conversation stops being about accuracy almost immediately. Once someone believes the numbers, the next question is always "ok so what do you think about X", and that's the one I can't answer. I publish research, I'm not licensed to give advice, so the moment it gets personal I have to hand it back to them.

          Took me a while to stop reading that as a dead end. It's actually the point where people work out what the thing is for.

          1. 1
            That’s an interesting point of transition — once trust is established, the question shifts to what people actually want from the product next. I’d be interested in digging into that privately. What’s the best email to reach you on?
            1. 1

              Sure, hello at ploutos-ai dot com works. Before we move to email though, what do you do? You've asked twice and I still don't know if you're a user, a builder in the same space, or selling something. Any of the three is fine, I'd just rather know which conversation I'm having.

              1. 1
                Thanks! I’ve just sent it over. Looking forward to hearing your thoughts whenever you have a chance.

About

Most stock tools hand you a score and ask you to trust it. Ploutos reads the company's own SEC filings, cites every figure back to its source, then argues the bear case against its own conclusion.