> ## Documentation Index
> Fetch the complete documentation index at: https://fruitstand.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Cybersyn's FRED Tables Are Deprecated: What to Use Instead

> Cybersyn's FRED tables were deprecated in November 2024. What replaced them, a verified crosswalk from Curated Data variables to 22 FRED IDs, and migration SQL.

*By [Fruit Stand Team](https://fruitstand.dev/about.md) · November 11, 2026 · Guides*

Yes. Cybersyn's FRED tables, `FINANCIAL_FRED_TIMESERIES`,
`FINANCIAL_FRED_ATTRIBUTES` and the FRED series-ID crosswalk, were deprecated
on November 7, 2024, and Snowflake later cited FRED's terms on
redistribution. What replaced them is Snowflake Curated Data's indicator
tables, which drop FRED IDs, Snowflake's Data Utilities app with your own
FRED API key, or Fruit Stand's FRED listing.

Below is what happened, how the options compare, a crosswalk from Curated
Data variables to 22 popular FRED series that we checked value by value, and
the SQL to migrate.

> [!NOTE]
>
> Fruit Stand publishes the [FRED listing on the Snowflake
> Marketplace](https://app.snowflake.com/marketplace/listing/GZTYZ40XYNE),
> one of the options below. The history comes from Cybersyn's and
> Snowflake's archived documentation and changelog. Every query here was run
> on November 11, 2026, against Snowflake Curated Data's free tier and our
> listing.

## What happened to Cybersyn's FRED tables

| Date | What changed |
| - | - |
| August 10, 2023 | Cybersyn added `FINANCIAL_FRED_VARIABLE_SERIES_ID_CROSSWALK`, mapping its variable IDs to FRED series IDs |
| June 2024 | Cybersyn's docs said its FRED tables "will be deprecated in the coming months" and pointed users to a new indicators table built from FRED's original sources |
| November 7, 2024 | `FINANCIAL_FRED_ATTRIBUTES`, `FINANCIAL_FRED_TIMESERIES` and the crosswalk were deprecated in all listings |
| May 2025 | Snowflake's changelog gave the reason, "restrictive legal terms on redistribution", and added FRED functions to its Data Utilities app |
| Since then | Cybersyn became Snowflake Public Data, then Snowflake Curated Data. `cybersyn_financial_economic_indicators_timeseries` lost its prefix and became `financial_economic_indicators_timeseries` |

The old documentation is gone too: on November 11, 2026, docs.cybersyn.com
didn't load, because its security certificate no longer matches the domain.
Links to it in old notebooks and READMEs are dead.

## What to use instead

| Option | What you get | FRED series IDs | Freshness | Price |
| - | - | - | - | - |
| [Snowflake Curated Data](https://app.snowflake.com/marketplace/listing/GZTSZ290BV255) | 167,190 indicators loaded from the BLS, Federal Reserve, BEA, Census Bureau and others | No; its own variable IDs | Free tier lags by three months | Free; the paid tier is \$25,000 a year |
| Data Utilities (Snowflake) | Functions that call the FRED API with your own key and write tables in Cybersyn's old shape | Yes | As current as FRED | Free app; you set up network access and a secret |
| [FRED listing](https://app.snowflake.com/marketplace/listing/GZTYZ40XYNE) (Fruit Stand) | 573,411 FRED series, with every ALFRED vintage | Yes | Refreshed daily | \$150/month after a 30-day trial |

Curated Data has the same numbers for the core US series, since FRED and
Curated Data both load them from the original publishers. What changes is
how you find a series, and the units and dates you get back.

## The crosswalk: 22 FRED series in Curated Data

Curated Data's attributes table has no FRED ID column. To build this
crosswalk we joined every FRED observation for 22 popular series to the
Curated Data free tier by date, and kept the variable whose values matched.
Across 93,094 dates, every value matched once the scale below was applied.

| FRED series | Curated Data variable | Multiply by |
| - | - | -: |
| `UNRATE` unemployment rate | `LNS14000000.M_SA` | 100 |
| `CIVPART` labor force participation | `LNS11300000.M_SA` | 100 |
| `PAYEMS` nonfarm payrolls | `CES0000000001.M_SA` | 0.001 |
| `JTSJOL` job openings | `JOLTSJO0000000LVL.M_SA` | 0.001 |
| `ICSA` initial jobless claims | `IC_SA` | 1 |
| `CPIAUCSL` CPI | `CUSRSA0SA01982-84.M` | 1 |
| `CPILFESL` core CPI | `CUSRSA0L1EL1E1982-84.M` | 1 |
| `PCEPI` PCE price index | `BEA_NIPA_PCE_2.8.4_DPCERG_M_SA` | 1 |
| `PCEPILFE` core PCE price index | `BEA_NIPA_PCE_2.8.4_DPCCRG_M_SA` | 1 |
| `A191RL1Q225SBEA` real GDP growth | `BEA_NIPA_1.1.1_A191RL_Q` | 1 |
| `INDPRO` industrial production | `G17_IP.B50001.S_SA` | 1 |
| `RSAFS` retail sales | `44X72SM_SA` | 0.000001 |
| `HOUST` housing starts | `ASTARTSTOTAL_SA` | 0.001 |
| `UMCSENT` consumer sentiment | `the_index_of_consumer_sentiment` | 1 |
| `M2SL` M2 money supply | `H6_M2M2.M_SA` | 0.000000001 |
| `DFF` fed funds rate, daily | `H15_RIFSPFF_N.D` | 100 |
| `FEDFUNDS` fed funds rate, monthly | `H15_RIFSPFF_N.M` | 100 |
| `SOFR` | `SOFR` | 100 |
| `DTB3` 3-month T-bill | `H15_RIFSGFSM03_N.B` | 100 |
| `DGS2` 2-year Treasury | `H15_RIFLGFCY02_N.B` | 100 |
| `DGS10` 10-year Treasury | `H15_RIFLGFCY10_N.B` | 100 |
| `MORTGAGE30US` 30-year mortgage rate | `FRM_30_YR` | 100 |

Some FRED series have no match in the free tier. GDP and real GDP levels
(`GDP`, `GDPC1`) aren't there, only real GDP growth. FRED's own calculated
series, such as `T10Y2Y`, don't exist in Curated Data either; compute that
one as `DGS10` minus `DGS2`.

## Four things that break migrated queries

* **Rates are decimals.** Curated Data stores a 4.1% unemployment rate as
  0.041, though its `unit` column says "Percent". FRED stores 4.1.
* **Levels are in whole units.** Payrolls are a count of people, retail
  sales are dollars and M2 is dollars. FRED reports them in thousands,
  millions and billions.
* **Months are dated at the end.** Curated Data dates July 2026 as
  2026-07-31, and the second quarter as 2026-06-30. FRED uses the first day
  of the period: 2026-07-01 and 2026-04-01. Daily and weekly series share
  the same dates.
* **One variable ID can cover many places.** National values have
  `geo_id = 'country/USA'`, but 1,234 variables have rows for more than one
  place, such as states or metro areas, under the same ID. Job openings, `JOLTSJO0000000LVL.M_SA`,
  has rows for 52 geographies. Without the `geo_id` filter, they get mixed in.

The free tier's three-month lag also matters: on November 11, 2026 its
latest daily rates were from August 12 and its latest unemployment rate
from July. FRED had both through October and November.

## Migration SQL

### Step 1: Save the crosswalk as a table

```sql theme={null}
create or replace table fred_crosswalk (
    series_id string, variable string, frequency string, scale float
) as
select * from values
    ('UNRATE',          'LNS14000000.M_SA',                'M', 100),
    ('CIVPART',         'LNS11300000.M_SA',                'M', 100),
    ('PAYEMS',          'CES0000000001.M_SA',              'M', 0.001),
    ('JTSJOL',          'JOLTSJO0000000LVL.M_SA',          'M', 0.001),
    ('ICSA',            'IC_SA',                           'W', 1),
    ('CPIAUCSL',        'CUSRSA0SA01982-84.M',             'M', 1),
    ('CPILFESL',        'CUSRSA0L1EL1E1982-84.M',          'M', 1),
    ('PCEPI',           'BEA_NIPA_PCE_2.8.4_DPCERG_M_SA',  'M', 1),
    ('PCEPILFE',        'BEA_NIPA_PCE_2.8.4_DPCCRG_M_SA',  'M', 1),
    ('A191RL1Q225SBEA', 'BEA_NIPA_1.1.1_A191RL_Q',         'Q', 1),
    ('INDPRO',          'G17_IP.B50001.S_SA',              'M', 1),
    ('RSAFS',           '44X72SM_SA',                      'M', 0.000001),
    ('HOUST',           'ASTARTSTOTAL_SA',                 'M', 0.001),
    ('UMCSENT',         'the_index_of_consumer_sentiment', 'M', 1),
    ('M2SL',            'H6_M2M2.M_SA',                    'M', 0.000000001),
    ('DFF',             'H15_RIFSPFF_N.D',                 'D', 100),
    ('FEDFUNDS',        'H15_RIFSPFF_N.M',                 'M', 100),
    ('SOFR',            'SOFR',                            'D', 100),
    ('DTB3',            'H15_RIFSGFSM03_N.B',              'D', 100),
    ('DGS2',            'H15_RIFLGFCY02_N.B',              'D', 100),
    ('DGS10',           'H15_RIFLGFCY10_N.B',              'D', 100),
    ('MORTGAGE30US',    'FRM_30_YR',                       'W', 100);
```

### Step 2a: Stay on Curated Data, query by FRED ID

This returns Curated Data values in FRED's units and dates, so code written
for FRED IDs keeps working:

```sql theme={null}
select x.series_id,
       case x.frequency
           when 'M' then date_trunc('month', t.date)
           when 'Q' then date_trunc('quarter', t.date)
           else t.date
       end as date,
       round(t.value * x.scale, 6) as value
from public_data_free.financial_economic_indicators_timeseries t
join fred_crosswalk x on x.variable = t.variable
where t.geo_id = 'country/USA'
  and x.series_id in ('UNRATE', 'DGS10')
order by x.series_id, date desc;
```

The top rows on November 11, 2026 were `DGS10` at 4.68 on August 12, 2026
and `UNRATE` at 4.1 for July 2026. `round` removes floating-point noise from
the scaling: the stored unemployment rate is 0.040999999999999995. Use your
own database name for Curated Data; the paid tier's schema is `public_data`.

### Step 2b: Switch to the FRED listing

In the FRED listing, the series ID is the key, and values come in FRED's
units and dates:

```sql theme={null}
select series_id, date, value
from fred.fred_series_observations_vw
where series_id in ('UNRATE', 'DGS10')
order by series_id, date desc;
```

On November 11, 2026 this returned `DGS10` at 4.88 on November 9 and
`UNRATE` at 4.1 for October 2026. Any of the 573,411 series works the same
way, including the ones outside this crosswalk.

### Step 3: Check the two sources agree

Before switching a dashboard, compare every overlapping date:

```sql theme={null}
with curated as (
    select x.series_id,
           case x.frequency
               when 'M' then date_trunc('month', t.date)
               when 'Q' then date_trunc('quarter', t.date)
               else t.date
           end as date,
           t.value * x.scale as value
    from public_data_free.financial_economic_indicators_timeseries t
    join fred_crosswalk x on x.variable = t.variable
    where t.geo_id = 'country/USA'
)
select c.series_id,
       count(*) as dates_compared,
       count_if(abs(c.value - f.value) > 0.0005 * greatest(abs(f.value), 0.01)) as mismatches,
       max(f.date) as latest_compared
from curated c
join fred.fred_series_observations_vw f
    on f.series_id = c.series_id and f.date = c.date
group by c.series_id
order by c.series_id;
```

It returned 0 mismatches for all 22 series, from 308 dates for job openings
to 26,341 for the daily fed funds rate. Both sources carry today's revised
values, so they agree. Data as first published is in Curated Data's vintage
tables and in the FRED listing's `fred_series_observations_vintages_vw`.

## If you still have a `cybersyn` schema

Accounts that mounted a Cybersyn finance listing before the rename can
still have a `cybersyn` schema. Ours has
`cybersyn_financial_economic_indicators_timeseries` with the same 167,190
variable IDs as Curated Data, and it was still updating on November 11,
2026\. Its attributes table even has a `fred_series_id` column, described as
FRED's identifier, but the column is empty for all 167,190 variables. The
crosswalk above works on it unchanged. Snowflake's current docs cover only
the `public_data` schemas, so don't count on the old one staying.

## Which should you choose?

* **A few core US series, and three months' delay is fine:** Curated Data's
  free tier, with the crosswalk above.
* **A handful of series, current, at no cost:** Data Utilities with your
  own FRED API key. You run and schedule the downloads.
* **FRED IDs across many series, kept current, with revisions:** the [FRED
  listing](https://app.snowflake.com/marketplace/listing/GZTYZ40XYNE).

For a step-by-step comparison of the Data Utilities app, an API pipeline and
the listing, see [How to Get FRED Data into
Snowflake](https://fruitstand.dev/blog/fred-data-into-snowflake.md). [What FRED Economic Data Is on
the Snowflake Marketplace?](https://fruitstand.dev/blog/fred-data-snowflake-marketplace.md) covers
every Marketplace option and the licensed series no listing can include.

## F.A.Q.

> [accordion] Are Cybersyn's FRED tables still available?
>
> No. FINANCIAL\_FRED\_TIMESERIES, FINANCIAL\_FRED\_ATTRIBUTES and FINANCIAL\_FRED\_VARIABLE\_SERIES\_ID\_CROSSWALK were deprecated in all listings on November 7, 2024. Snowflake said FRED's terms on redistribution were the reason.

> [accordion] What replaced FINANCIAL\_FRED\_TIMESERIES?
>
> Snowflake Curated Data's financial\_economic\_indicators\_timeseries, with the same kinds of indicators loaded from the original publishers under Snowflake's own variable IDs. For FRED IDs, use the Data Utilities app with your own API key or Fruit Stand's FRED listing.

> [accordion] Does Snowflake Curated Data have FRED series IDs?
>
> No. Its attributes table has no FRED ID column, and the legacy cybersyn table's fred\_series\_id column is empty. The crosswalk above maps 22 popular series, each checked against FRED's values.

> [accordion] Why don't Curated Data values match FRED?
>
> Usually it's units or dates, not the data. Curated Data stores rates as decimals (0.041 for 4.1%), levels in whole units rather than thousands or billions, and dates months at the end of the month. After the conversions above, all 22 series matched on every date.

> [accordion] Is the Cybersyn documentation still online?
>
> Not at docs.cybersyn.com, which no longer loads. Snowflake's current documentation for the same datasets is at data-docs.snowflake.com, under Snowflake Curated Data.

To query any of the 573,411 FRED series by FRED ID in Snowflake, start a free
30-day trial of the [FRED listing on the Snowflake
Marketplace](https://app.snowflake.com/marketplace/listing/GZTYZ40XYNE). The
schema is in the [dataset docs](https://fruitstand.dev/datasets/fred-series.md).
Questions? Reach out at [contact@fruitstand.dev](mailto:contact@fruitstand.dev).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.