SEC XBRL company facts: fy and fp describe the filing, not the period, and values repeat

Checked 2026-09-08 · Filings and registries: SEC JSON and XBRL

In companyconcept and companyfacts, each fact appears once for every filing that reported it — the same quarter shows up four times with four different fy/fp pairs and one value. fy and fp identify the report the number was pulled out of, not the period the number covers; the period is start and end. Filter on fy and you get the wrong quarters, with no duplicate warning and no error. One row per period is recoverable from the same payload without a second request, using a field the API already fills in for exactly that purpose; the method has which field it is and how many of the rows carry it.

What we saw

The quarter starting 2018-09-30 appears four times, with fy 2019 and 2020 and fp Q1 and FY, all carrying the same value. Source (units.USD, rows where start=2018-09-30 and end=2018-12-29, 2026-09-08).

{'val': 84310000000, 'fy': 2019, 'fp': 'Q1', 'form': '10-Q', 'filed': '2019-01-30', 'frame': None}
{'val': 84310000000, 'fy': 2019, 'fp': 'FY', 'form': '10-K', 'filed': '2019-10-31', 'frame': None}
{'val': 84310000000, 'fy': 2020, 'fp': 'Q1', 'form': '10-Q', 'filed': '2020-01-29', 'frame': None}
{'val': 84310000000, 'fy': 2020, 'fp': 'FY', 'form': '10-K', 'filed': '2020-10-30', 'frame': 'CY2018Q4'}

A cross-filer 404 from this API is not JSON. It is the S3 XML error document, so json.loads on the body raises a parse error instead of showing you the message. Source (404 response body, 2026-09-08).

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>api/xbrl/frames/us-gaap/Assets/USD/CY2023Q1.json</Key>

Limits

Open question

When a company restates, which of the conflicting rows survives the deduplication in the method — the first filing or the latest? That decides whether you end up with as-first-reported or as-restated numbers.

Plain text