The SEC Fund Holdings "Ticker" Field Trap: Why AI Agents Keep Getting It Wrong

SEC N-PORT's ticker field isn't a stock ticker—misreading it silently corrupts fund holdings data.
The SEC Form N-PORT dataset labels IDENTIFIER_TICKER simply as "Ticker," but the form only defines it as a fallback when ISIN is unavailable. Analysis of 17.36M rows shows only 72% are common stock tickers; MBS rows carry pool prefixes (FN, GN, FNMA), bond rows carry issuer tickers (AT&T bonds as "T"), and derivative rows carry futures and currency codes. Direct joins cause silent errors—FG is both a Freddie Mac prefix and F&G Annuities' ticker. The article recommends classifying by ASSET_CAT first and treating placeholder values as nulls.
AI agents or models built on fund holdings data often read a field called IDENTIFIER_TICKER and assume it's a stock ticker. But in SEC Form N-PORT, the actual contents of this field are far more complex than the label suggests—it may represent a bond issuer's stock ticker, a mortgage pool prefix, a futures contract code, or even a currency code. This misreading quietly contaminates holdings counts, "smart money" signals, and capital flow features.

Root Cause: Form Definition vs. Dataset Documentation
SEC's dataset documentation describes IDENTIFIER_TICKER in a single word: "Ticker." But Form N-PORT itself (Item C.1.e) is more precise: it requires "at least one" other identifier—ISIN, "Ticker (if ISIN is unavailable)," or another identifier. Nothing requires this ticker to be an exchange code. It is fundamentally a fallback option.
This gap in definitions directly leads developers who take the field at face value to introduce systematic errors.
What Form N-PORT is. N-PORT is the SEC's monthly holdings reporting regime, adopted in 2016 and fully effective from 2019 (Rule 30b1-9 and Form N-PORT). It requires registered funds (including mutual funds, ETFs, and closed-end funds) to file complete holdings details with the SEC every month; data for the first and second months is for regulatory use only, while the third month's data is made public. The SEC later converts these structured XML filings into machine-readable datasets published to the public, and the field discussed here comes from that dataset. Understanding this background is critical: N-PORT field semantics are defined by the regulatory filing form, not by developer-facing dataset documentation—and the wording gap between the two is exactly where misreadings originate.
ISIN vs. CUSIP vs. LEI vs. ticker. ISIN is a 12-character international securities identifier used globally; CUSIP is a 9-character North American securities identifier covering primarily U.S. and Canadian issues; LEI is a 20-character legal entity identifier that identifies the issuing entity rather than a specific security; ticker is an exchange-level trading code whose length, format, and meaning are entirely set by each exchange, with no unified standard. This is precisely why the first three can serve as cross-market primary keys while ticker can only serve as an auxiliary identifier within a specific exchange—and why N-PORT positions ticker as a fallback when ISIN is unavailable.
Empirical Data: 72% of the Field Looks Normal Across Seven Quarters
A statistical analysis of all SEC quarterly data published to date (2019 Q4 through 2026 Q2) found:
- A total of 17,361,050 rows carry a ticker.
- 72% of them appear in common stock rows and look like real tickers: MSFT, AMZN, AAPL.
- For mortgage-backed securities rows (676,336 rows), the "ticker" is an agency pool-type prefix: FN appears in 161,550 rows, GN in 109,156, FNMA in 55,140, and FHLMC in 45,223.
- For bond rows (2,312,102 rows), the ticker is the issuer's stock ticker, not the bond's own identifier: AT&T bonds carry "T" in 86,298 rows.
- Derivative rows show futures contract codes (TYZ2, ESZ2) and currency codes (USD, EUR).
ASSET_CAT and holdings classification. The ASSET_CAT (asset category) field in N-PORT filings classifies each holding into categories such as derivatives, real estate, debt securities, equity securities, loans, and ABS/MBS—making it the first-hand basis for determining what a row actually "is." Since the same IDENTIFIER_TICKER field carries completely different semantics under different categories, reliable parsing logic should first split by ASSET_CAT, then apply parsing rules to each category separately, rather than treating the entire table as stock tickers. This is also the underlying logic behind the defensive practices recommended in this article: the context provided by the classification field determines parsing correctness far more than the identifier field itself.
Real Consequences of Bad Joins
FG is a Freddie Mac pool prefix, and it is also the NYSE ticker for F&G Annuities & Life. If you join N-PORT's ticker field directly against a stock ticker list, Freddie Mac mortgage pools get misclassified as holdings of an insurance company. Bond holdings also get counted as stock holdings.
These errors propagate down the data pipeline: holdings counts, "smart money" signals, and capital flow features all inherit the same mistakes—and nothing throws an error.
Two More Traps in the Same Files
Placeholders disguised as data. ISSUER_CUSIP is "N/A" in 47.5 million rows, "000000000" in 15.2 million rows, and "999999999" in 210,000 rows. ISSUER_LEI is "N/A" in 67.6 million rows. Treat these values as valid fills and your coverage statistics will be distorted.
Field lists are distributed as-is across all historical quarters. As a result, a "defined" field may not exist at all in older files—the VaR table, for instance, is listed as far back as 2019 but only actually appears starting in 2022 Q1.
Why placeholders appear in bulk. N-PORT's XML filing template imposes mandatory constraints on most identifier fields. When filers (or the compliance software filing on their behalf) genuinely have no corresponding value, they often insert sentinel values like "N/A," "000000000," or "999999999" to satisfy format validation rather than leaving the field blank. Such values are perfectly legal at the string level but carry no identifying meaning. If they participate directly in deduplication, joins, or coverage statistics, they disguise "missing" as "filled," overstating data completeness. The safe approach is to map all known sentinel values uniformly to NULL at ingestion time and to document that mapping explicitly in the data dictionary.
Why field lists "run ahead" of the data. SEC's field lists are generated from the current template and distributed alongside all historical quarters, whereas a fund's actual filing content depends on the template version in effect at the time of filing. The N-PORT template has undergone multiple revisions (for example, revisions effective in 2024 introduced more granular liquidity risk and swing pricing fields), so when you read old quarterly files against the latest list, some "defined" columns may be entirely empty or may not exist at all. Downstream pipelines should be tolerant of missing columns rather than assuming the list maps one-to-one to the data.
Defensive Practices for Building Data Pipelines
Before trusting any identifier in an N-PORT row, first confirm the row's holding type via the ASSET_CAT field, then decide how to parse the ticker. At the same time, treat all placeholder values ("N/A," all zeros, all nines, etc.) as nulls rather than valid data.
For non-stock rows, you can currently either map them or discard them outright. The author has also released a free N-PORT field dictionary (CC BY 4.0 license) containing SEC's official definitions and citations, official code lists, and the actual content distribution for each field, making it easy for developers to cross-check.
Open Questions That Remain Unresolved
The author openly acknowledges two unknowns: first, no publicly released mapping from N-PORT pool prefixes (FN, GN, FG, etc.) to the corresponding agency programs has been found; second, it remains unclear how much of the bond-row practice of using an "issuer ticker" stems from filers' own habits versus the software vendors who prepare the filings.
For teams building fund holdings data, the answers to these questions will directly shape the design of data cleaning rules. If you have a better approach, the author says he's happy to credit you in the dictionary.
One-line Summary
The SEC N-PORT ticker field isn't a stock ticker, and misreading it silently corrupts fund holdings data.
Paragraph Summary
The article points out that the IDENTIFIER_TICKER field in the SEC Form N-PORT dataset is labeled simply as "Ticker" in the documentation, but the form itself only defines it as a fallback identifier when ISIN is unavailable, and never requires it to be an exchange code. Analysis of 17.36 million rows from 2019 Q4 through 2026 Q2 shows that only 72% appear in common stock rows and look like real tickers; MBS rows carry agency pool prefixes such as FN, GN, and FNMA; bond rows carry the issuer's stock ticker (e.g., AT&T bonds labeled "T"); and derivative rows carry futures contract codes and currency codes. Direct joins against a stock ticker table cause silent mismatches—for example, FG is both a Freddie Mac pool prefix and the ticker for F&G Annuities. The article also reveals large numbers of placeholders in ISSUER_CUSIP and ISSUER_LEI, plus the problem of field lists being distributed as-is across historical quarters, causing missing columns in older files, and recommends classifying by ASSET_CAT before parsing identifiers.
Related articles

Why Does the Tesla Roadster Need to Fly? A Deep Dive into Musk's Wild Demo
Tesla's Roadster launch showed wall-climbing, upside-down driving, and flying stunts—but The Vergecast notes the demo car may lack a battery, the Rocket version is invite-only and not street-legal, and the website terms don't guarantee delivery. After nine years of delays, why does this car still need to exist?

AI Is Not a Replacement: Human-AI Collaboration Through the Lens of Factory Root Cause Analysis
Starting from factory root cause analysis, this article explains how AI accelerates evidence chain construction rather than replacing human experts, exploring the pragmatic implementation logic and business value of 'AI supporting people rather than replacing them.'

AI Agent Decision Auditing: Building an Evidence Chain in Regulated Workflows
Starting from a Reddit discussion, this article analyzes three core issues in AI agent decision auditing within regulated workflows: what fields audit records should contain, how to handle feedback latency for erroneous decisions, and how to continuously calibrate LLM judge consistency with human judgment.