How to Spot a Value Trap With AI and SEC EDGAR (A Nasdaq Small-Cap Walkthrough)
How to spot a value trap: run the four warning signs against free SEC EDGAR numbers. On one Nasdaq small cap, AI could answer just one of the four.
A value trap is a stock that appears to be a great deal because of its low price but stays undervalued because of problems inside the business. That is Investopedia's definition, and it arrives with four warning signs: earnings that are not reinvested, repeated changes of management, revenue that stopped growing after a period of rising profits, and historical multiples far above current ones. Read them in a row and they sound like a checklist you could tick off in an afternoon.
Then you try to fill them in from real numbers.
This walkthrough runs that attempt end to end on one company, using data anyone can pull for free. It is a different job from reading a single 10-K with AI, which is about getting through a long document. Here the document is not the problem. The numbers are already extracted, tagged and machine-readable, and the question is whether they support a verdict at all. It also comes after screening rather than instead of it: a free screener run gets you a list of names, and this is what you do to each name on the list.
Where do the numbers come from? SEC EDGAR, free and without a key
Every financial figure below came from the SEC's XBRL companyconcept endpoint, which needs no API key, no login and no paid data feed. The one hard requirement is a User-Agent header carrying your name and email address. Send a request without it and the SEC refuses you.
- 01Get the CIK
Ticker to 10-digit CIK on the SEC company list
- 02Call companyconcept
One call per tag: revenue, income, equity
- 03Take as-filed values
The filing that first carried each fact
- 04Rebuild the trailing year
Full year, minus last H1, plus this H1
The endpoint returns one accounting tag at a time, which makes tag names the thing that trips you. Querying us-gaap:Revenues for this filer looks like a dead company: the last fact is fiscal 2020 at $111,283,000, nothing after. The filer switched to RevenueFromContractWithCustomerExcludingAssessedTax from fiscal 2021 onward. An empty result from EDGAR usually means you asked for the wrong tag, not that the company stopped reporting, and there is no error message to tell you which it was.
Three tags produced the whole picture. Revenue, NetIncomeLoss, and StockholdersEquity, as originally filed rather than as later restated:
| Fiscal year | Revenue | Net income | Equity at year end | 10-K filed |
|---|---|---|---|---|
| FY2022 | $310,482,000 | -$29,214,000 | $363,044,000 | 2023-02-28 |
| FY2023 | $312,910,000 | -$1,765,000 | $382,907,000 | 2024-02-29 |
| FY2024 | $350,571,000 | +$4,041,000 | $517,829,000 | 2025-02-27 |
| FY2025 | $411,827,000 | +$9,668,000 | $542,073,000 | 2026-03-05 |
Two half-year rows from the 10-Qs make the recent picture comparable: revenue of $201,510,000 and net income of $8,185,000 for the first half of 2025, against $212,264,000 and $1,379,000 for the first half of 2026. Add the annual and half-year rows the right way around, and you can rebuild a trailing twelve months without paying anyone: fiscal 2025 revenue minus first-half 2025 plus first-half 2026 gives $422,581,000. The commercial data provider reported trailing revenue of $422,581,000. Zero difference, which is a good sign that the pull is clean before anything harder gets attempted. If you would rather script this than click through it, the open-source finance tool roundup covers the libraries that wrap these endpoints.
The prompt that makes the model refuse
The instruction doing the work is the one that gives the model permission to answer nothing. Without it you get four confident paragraphs, one per warning sign, and two of them will be built out of nothing.
Here is the prompt, run on August 13, 2026 with the tables above pasted in above it:
Below is financial data for one Nasdaq small cap, pulled from SEC EDGAR and a
market data API (dates in the table).
{annual figures, half-year figures, share counts, market data}
1) Fill the four value-trap warning signs (no reinvestment / repeated leadership
changes / stagnant revenue after growth / historical multiples far above
today's) - for each, say what this table shows, or write "this table cannot
tell me".
2) List the three numbers that would have to change for a re-rating, based only
on the table.
Rules: do not invent numbers. No buy/sell opinions. No price predictions.
Two details matter more than the phrasing. The dataset went in with what was missing named out loud, so the model knew that capital expenditure, R&D, buybacks, cash, debt and any prior-date multiple were absent by construction rather than by oversight. And every figure carried its filing date, which is what lets the answer say when a number stopped being true.
(excerpt: the reconciliation note, the four signs, and the closing. Row-level tables trimmed.)
Before the four signs, one problem with the table itself that affects two of the answers.
The trailing P/E of 259 does not reconcile with the rest of the market-data block. Market capitalization divided by that P/E implies TTM earnings of $2,433,807. But the same block's profit margin times TTM revenue gives 0.0068 × $422,581,000 = $2,873,551. Those two differ by about 18%. The cause is visible: diluted EPS is reported rounded to two decimals as $0.03, and at earnings this small, a rounding step of half a cent moves the P/E by tens of turns. So I use the EDGAR-derived TTM figures where I need precision, and I treat 259 as an order of magnitude rather than a number.
The EDGAR side of the table does reconcile. FY2025 revenue minus H1 2025 revenue plus H1 2026 revenue = $411,827,000 − $201,510,000 + $212,264,000 = $422,581,000, which matches the provider's TTM revenue exactly. The same arithmetic on net income gives $9,668,000 − $8,185,000 + $1,379,000 = $2,862,000 TTM.
Sign 1 — No reinvestment: this table cannot tell me.
There is no capital expenditure line, no R&D expense, no acquisition spend, and no share repurchase outlay. Reinvestment is measured by where operating cash goes, and none of those destinations appear here.
What the table does show, which is adjacent but not the same thing: stockholders' equity fell from $542,073,000 at 2025-12-31 to $519,925,000 at 2026-06-30, a decline of $22,148,000, or −4.09%, during a half-year in which net income was positive at +$1,379,000. So roughly $23.5M left the equity account beyond what earnings put in. Over a nearly matching window the cover-page share count fell from 85,353,771 (2026-02-27) to 81,126,881 (2026-07-24), a drop of 4,226,890 shares or −4.95%.
Sign 2 — Repeated leadership changes: this table cannot tell me.
Nothing in the dataset concerns officers, directors, or turnover. There is no proxy-statement or 8-K content here, and no tenure data of any kind. This is not a close call.
Sign 3 — Stagnant revenue after growth: the table speaks, and the answer is "not in the annual series, but the most recent half decelerated sharply."
| Period | Growth | Change |
|---|---|---|
| FY2022 → FY2023 | +0.78% | +$2,428,000 |
| FY2023 → FY2024 | +12.04% | +$37,661,000 |
| FY2024 → FY2025 | +17.47% | +$61,256,000 |
| H1 2025 → H1 2026 | +5.34% | +$10,754,000 |
The classic version of this warning sign is growth first, then stagnation. This table shows close to the opposite ordering: the flat year was FY2023 at +0.78%, and growth then accelerated for two consecutive years to +17.47%. The deceleration to +5.34% is one half-year old. One half is a slowdown, not an established stagnation, and the table has no H2 2026 to confirm which it becomes.
Half-year net income fell from $8,185,000 to $1,379,000, down $6,806,000 or −83.2%, while revenue over the same two halves rose. Net margin by period: FY2025 2.35%, H1 2025 4.06%, H1 2026 0.65%.
Sign 4 — Historical multiples far above today's: this table cannot tell me.
The dataset carries today's multiples only: trailing P/E 259, forward P/E 131.58, price-to-book 1.198. There is no P/E, no P/B, and no price-to-sales for any prior date.
One thing worth stating plainly: today's trailing P/E is arithmetically fragile rather than merely high, for the EPS-rounding reason above. Using the EDGAR-derived TTM net income of $2,862,000 against the $630,356,000 market capitalization gives a trailing multiple around 220x. Using the provider's own 259 gives 259x. The gap between those two is itself information about how little precision the earnings denominator currently carries.
What I am not saying
I have not offered a view on whether to buy or sell this security, and I have not projected a price. Every figure above is either taken directly from the table or is arithmetic on figures in the table, with the derivation shown.
What the four warning signs actually returned
One sign out of four got a real answer, and it disagreed with the shape the sign describes. Reinvestment, leadership and historical multiples all came back unanswerable, and not because the model was being cautious. Capital expenditure and R&D are cash-flow and income-statement lines that were never pulled. Officer turnover lives in proxy statements, which are not financial data at all. A past multiple needs the earnings per share that applied on that past date, and a 52-week price range does not contain one.
That leaves the revenue sign, which ran backwards from the textbook. The flat year was fiscal 2023 at 0.78% growth, after which the company accelerated for two straight years to 17.47%, and only the most recent half slowed to 5.34%. Stagnation after growth, read literally, is not what these filings show.
The move worth noticing sat below the revenue line. Net margin went from 4.06% in the first half of 2025 to 0.65% in the first half of 2026, an 83.2% drop in half-year net income while revenue over the same two periods rose $10,754,000. Selling more and earning less is a cost, mix or one-off story, and none of those three has a column in the dataset. So the check ends by telling you which statement to open next rather than by delivering a verdict, which is the same place a full single-company teardown starts from.
The vendor said 259. The filings say 220.
The provider's own fields contradict each other, and the filings settle it. Market capitalization of $630,356,000 divided by the reported trailing P/E of 259 implies trailing earnings of $2,433,807. The same provider's profit margin of 0.68% times trailing revenue of $422,581,000 implies $2,873,551. Those two numbers describe the same twelve months and differ by 18%.
Rebuilding trailing net income from EDGAR settles which one is closer: fiscal 2025 net income minus first-half 2025 plus first-half 2026 gives $2,862,000. Against the same market capitalization, the trailing multiple is 220.25. The cause of the gap is a rounding step. Diluted EPS is published to two decimals as $0.03, and when a company earns three cents a share, half a cent of rounding swings the multiple by dozens of turns.
My own read: I use the 220 and treat the 259 as noise, and I would not quote either to two decimals. Both rest on an earnings denominator small enough that next quarter's ordinary accounting noise can move it more than the difference between them. What I cannot tell you is whether the provider rounds this way on every ticker or only where earnings are tiny, because I checked one company on one day.
The same rounding problem then showed up inside the AI run itself, which is the part I did not expect. Asked what margin recovery would be worth, the model applied the first-half 2025 margin to first-half 2026 revenue and printed $8,621,918. Re-running that multiplication at full precision, using $8,185,000 divided by $201,510,000 rather than the displayed 4.06%, gives $8,621,810. The model had taken its own rounded percentage back into a calculation. The error is $108 on $8.6 million and changes nothing about the conclusion, and it is worth naming anyway: an answer printed to the dollar looks more precise than the arithmetic behind it. Verifying figures against the source is the same habit that applies to a headline calling something a record high.
The three numbers that would have to change
Only three quantities in this dataset can move the valuation, and two of them are the same story told twice.
Trailing net income of $2,862,000 is the denominator carrying the whole problem. A trailing P/E of 30 at today's market capitalization needs $21,011,867, and a P/E of 20 needs $31,517,800, which are 7.3 and 11.0 times the current figure. For scale, the largest annual profit anywhere in these four years is fiscal 2025 at $9,668,000, still under half of what the gentler of those two multiples would require. That is arithmetic about a snapshot, not a claim about what earnings will do.
Book value per share behaves less obviously. Equity fell 4.09% over the half while the cover-page share count fell 4.95%, so book value per share actually rose slightly, from $6.351 to $6.409. With price-to-book at 1.198, the asset side carries a much smaller gap than the earnings side. The provider's own cross-check holds up here: book value per share times share count comes to $520,024,070, against filed equity of $519,925,000, a difference of 0.02%. That agreement is worth more than the P/E disagreement is worth worrying about, because both sides of it come off a filed balance sheet rather than a live quote.
Where this check runs out
Three of four signs unanswered is the ceiling of a numbers-only pull, and the fix is more filings rather than a better prompt. Capital expenditure, R&D and buyback authorizations sit in the cash flow statement and the notes. Leadership tenure sits in the proxy statement. A historical multiple needs a price series paired with the EPS or book value that applied on each of those dates, which is a build rather than a lookup.
The time problem is separate and worse. One decelerating half is a data point, not a trend, and the next 10-Q either confirms it or erases it. Market data ages faster still: the market capitalization used throughout is a single unstamped snapshot from one afternoon, and everything derived from it inherits that. Anyone re-running this in a month should expect different multiples from identical filings.
There is also the thing this piece keeps circling. Both the provider and the AI produced numbers that looked precise and were not, for the same reason, and neither flagged it until the arithmetic got redone by hand. When a figure decides something for you, recompute it once from the source. That habit costs a minute, and it is the same one behind reading a CPI release rather than the summary of it and behind building a dashboard from primary series.
FAQ
How do I check a stock for value-trap warning signs myself?
Pull the figures the signs are actually about, then ask what each one can and cannot show. Investopedia lists four signs: earnings that are not reinvested, repeated changes of management, revenue that stopped growing after a period of rising profits, and historical multiples far above current ones. Revenue and net income come off SEC EDGAR in a few API calls, so sign three is reachable from a free pull. The other three are not. Reinvestment needs a capital expenditure or R&D line, leadership history sits in proxy statements rather than financial statements, and a past multiple needs the earnings per share that applied on that past date, not just the past price. In a run on Grid Dynamics data dated August 13, 2026, three of the four came back as unanswerable from the dataset. That result is the useful part: it tells you which filings you still have to open.
Can I get a company revenue and net income from SEC EDGAR for free?
Yes. The XBRL companyconcept endpoint at data.sec.gov returns every filed value of a single accounting tag for a single company, with the filing date and period attached to each one. There is no key, no login and no paid tier. The SEC does require a declared User-Agent header carrying your name and email, and a request without it is refused. Two practical traps. First, tags change: for Grid Dynamics, us-gaap:Revenues carries no facts after fiscal 2020, because the filer moved to RevenueFromContractWithCustomerExcludingAssessedTax, so a query on the obvious tag returns an empty recent history rather than an error. Second, the endpoint can lag the newest filing, so check the filing index before concluding that a number does not exist.
Why does my data provider P/E differ from the one I calculate from filings?
Most often because the provider divides by a rounded earnings per share. Alpha Vantage reported a trailing P/E of 259 for Grid Dynamics on August 13, 2026, alongside a diluted EPS of $0.03 and a profit margin of 0.68%. Those fields disagree with each other: market capitalization of $630,356,000 divided by 259 implies trailing earnings of $2,433,807, while the margin times trailing revenue implies $2,873,551, a gap of 18%. Rebuilding trailing earnings from EDGAR filings gives $2,862,000, which sits next to the margin figure and far from the P/E figure. Recomputed against that, the trailing multiple is 220.25, not 259. When earnings per share is a few cents, a half-cent of rounding moves the multiple by dozens of turns.
Is a stock with rising revenue and falling earnings a value trap?
Not by itself, and the pattern does not match the classic warning sign either. The textbook shape is revenue that stalls after a run of rising profits. Grid Dynamics reported the reverse ordering in filings through mid-2026: annual revenue growth of 0.78% in fiscal 2023, then 12.04%, then 17.47%, with the most recent half decelerating to 5.34%. One decelerating half is a slowdown, not established stagnation, and the next 10-Q is what settles it. The sharper move sat under the revenue line, where half-year net income fell from $8,185,000 to $1,379,000, down 83.2%, and net margin went from 4.06% to 0.65%. That points at cost, mix or one-off items, and the income statement in the next filing is where you would look rather than at the revenue headline.
- 01
All four value-trap warning signs can be checked from a company revenue, net income and equity history.
- 02
A trailing P/E published by a data vendor can be off by tens of turns because earnings per share was rounded to two decimals.
- 03
Getting an empty result from the SEC XBRL API means the company has not reported that item.
Disclaimer
This article is educational and is not investment advice, a recommendation, or an offer to buy or sell any security. Grid Dynamics Holdings appears only as a worked example of a data procedure, and nothing above is a judgment about the company's prospects or its share price. There are no price predictions here. All figures are snapshots: financial statement values are as originally filed for the periods and dates shown, market data was retrieved August 13, 2026 without a stamped price date, and the AI run was performed the same day. Verify any figure at the primary filing before acting on it, and consider your own circumstances or a licensed adviser before making investment decisions.
Related workflows: screening for undervalued names produces the list this check is run on, reading a 10-K with AI covers the document side of the same job, a full company teardown shows where the check leads when the numbers hold up, and open-source finance tools covers pulling EDGAR yourself instead of copying a vendor table.
Sources
- SEC, EDGAR Application Programming Interfaces (companyconcept and companyfacts endpoints; no API key required; a declared User-Agent header is required), read August 13, 2026: https://www.sec.gov/search-filings/edgar-application-programming-interfaces
- SEC XBRL companyconcept,
us-gaap/RevenueFromContractWithCustomerExcludingAssessedTax,us-gaap/NetIncomeLossandus-gaap/StockholdersEquityfor CIK 0001743725, called August 13, 2026: https://data.sec.gov/api/xbrl/companyconcept/CIK0001743725/us-gaap/NetIncomeLoss.json - SEC EDGAR, Grid Dynamics Holdings Form 10-K for fiscal 2025, accession 0001743725-26-000007, filed March 5, 2026 (revenue $411,827,000; net income $9,668,000; stockholders' equity $542,073,000 at December 31, 2025): https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001743725&type=10-K
- SEC EDGAR, Grid Dynamics Holdings Form 10-Q for the quarter ended June 30, 2026, accession 0001743725-26-000021, filed July 30, 2026 (first-half revenue $212,264,000; net income $1,379,000; equity $519,925,000; cover-page share count 81,126,881 at July 24, 2026): https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001743725&type=10-Q
- Investopedia, "Value Trap" (definition and the four warning signs), read August 13, 2026: https://www.investopedia.com/terms/v/valuetrap.asp
- Alpha Vantage OVERVIEW endpoint, called August 13, 2026 for GDYN (market capitalization $630,356,000; trailing P/E 259; forward P/E 131.58; price-to-book 1.198; book value per share $6.41; diluted EPS TTM $0.03; profit margin 0.0068; trailing revenue $422,581,000; latest quarter June 30, 2026; no price date stamped by the provider): https://www.alphavantage.co/documentation/