feat(fred): triple the curated series list to the codes people actually search - #4415
Merged
Merged
Conversation
…ly search The economic-data pages are the best-ranking template we have: Search Console puts them at average position 5.4 over the 28 days to 2026-08-17. They are also the smallest, at 42 series out of the roughly 800,000 FRED publishes, and this is the one surface where the query IS the identifier. Somebody types BAMLH0A0HYM2 and wants exactly that series; that single code drew 1,064 impressions and 9 clicks in those 28 days. The constraint on the template is codes carried, not ranking. So the list grows to 114, chosen against FRED's own popularity score with a floor of 50 and confined to the families already here rather than opening new ones. Every id was resolved through the FRED series API before being written down, not recalled: the first draft contained WILL5000INDFC, which does not exist. What was missing is mostly structural. The Treasury curve started at the 2-year, so nothing could answer a question about the front end. The high-yield aggregate had no rating buckets under it, so a widening spread could not be told apart from a rotation within high yield. Housing had starts and the 30-year mortgage rate but no price. The trade-weighted dollar index had no bilateral pairs beneath it. Money supply had no reverse repo facility. Two series cleared the popularity floor and are excluded on purpose, with a test to keep them out: USSLIND stopped updating in April 2020, and FPCPITOTLZGUSA is an annual World Bank restatement of US CPI that lags the series already carried. A frozen series is worse than a missing one because it renders a current-looking page over a stale number, which is exactly the trap STLFSI2 sprang. That rule is now written down as a test rather than as a comment about one series.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The economic-data pages are the best-ranking template on the deployment that consumes this module: Search Console puts
/EconomicData/*at average position 5.4 over the 28 days to 2026-08-17. They are also the smallest surface we publish, 42 series out of the roughly 800,000 FRED carries.This is the one place where the query is the identifier. Somebody types
BAMLH0A0HYM2and wants exactly that series, and that one code drew 1,064 impressions and 9 clicks in those 28 days. The constraint on the template is codes carried, not ranking.What changes
The curated list goes from 42 to 114. Selection rule, now written into the file's header comment:
popularityscore, floor of 50;WILL5000INDFC, which does not exist. None of these are from memory.What was missing was mostly structural:
Deliberate exclusions
Two series cleared the popularity floor and are kept out, with a test to keep them out:
CPIAUCSLby a year.A frozen series is worse than a missing one: it renders a current-looking page over a stale number, which is exactly the trap
STLFSI2sprang. That rule was a comment about one series; it is nowSeries_ExcludesTheSeriesFredHasStoppedUpdating, so the next curation pass cannot reintroduce a dead series on popularity alone.Tests
Existing coverage already pins uniqueness, valid categories and every category being represented, so the additions are covered by it. New:
Series_ExcludesTheSeriesFredHasStoppedUpdatingInterestRates_CoverTheWholeTreasuryCurve(1M, 3M, 6M, 1, 2, 3, 5, 7, 10, 20, 30)CorporateBondSpreads_SeparateTheRatingBuckets(BB, B, CCC)dotnet csharpier check .clean,dotnet build Equibles.sln -c Release0 errors,dotnet test tests/Equibles.UnitTests4,439 passed, 0 failed. Mutation-checked after committing: swapping one curve member for USSLIND failed both new guards, and the change was restored.Cost
72 more series is 72 more rows in the daily refresh, well inside FRED's rate limit, and the observation history is fetched once.