Technical writing

DOL UI Claims: The Federal Database Behind Weekly US Unemployment Statistics Since 1967

· 15 min read· AI Analytics
DOLUI ClaimsUnemploymentEconomic IndicatorsFederal Data

Every Thursday morning at 8:30 a.m. Eastern time, the Department of Labor publishes a number that moves financial markets: the count of Americans who filed new unemployment insurance claims during the prior week. That figure — along with its four-week moving average, the companion continuing claims count, and state-by-state breakdowns — has been released with near-perfect regularity since 1967, making DOL's weekly UI claims report one of the oldest and most closely watched high-frequency economic data series in the United States.

This article covers the institutional structure of the weekly UI claims program, what initial claims and continuing claims actually measure, how seasonal adjustment is applied, why a 27% recipiency rate means the data undercounts true unemployment, the COVID-19 pandemic surge that shattered six decades of records in a single week, how extended benefit programs work during recessions, the substantial variation in benefit generosity across states, the relationship between UI administrative counts and the BLS household survey unemployment rate, and how to access the full historical series via the Federal Reserve's FRED database and the DOL's own ETA portal.

What Weekly UI Claims Are

Unemployment insurance is a federal-state partnership. The program is authorized under the Federal Unemployment Tax Act and administered by individual state workforce agencies, which operate under rules established partly by federal law and partly by state legislation. Workers who lose their jobs through no fault of their own — layoffs, business closures, significant reductions in hours — may apply for UI benefits through their state agency. The federal government, through the DOL Employment and Training Administration (ETA), funds administrative costs, operates the extended benefits backstop, and collects and publishes the weekly claims statistics.

The weekly claims report covers 53 reporting jurisdictions: the 50 states, the District of Columbia, Puerto Rico, and the U.S. Virgin Islands. Each jurisdiction operates its own UI program with its own eligibility rules, benefit calculation formulas, and maximum benefit amounts. State agencies transmit their weekly counts to DOL via form ETA-539 (Initial Claims) and form ETA-5159 (Continued Claims) on a standardized schedule. DOL ETA aggregates the submissions, applies seasonal adjustment to produce the national headline numbers, and publishes the release every Thursday at 8:30 a.m. for the week ending the prior Saturday.

The historical depth of the series is one of its most valuable properties. Initial claims data stretches back to January 1967 — nearly six decades of consistent weekly observations. That time span covers eleven recessions, the stagflation of the 1970s, the Volcker disinflation and 1982 recession that pushed claims to then-record highs near 700,000, the long expansion of the 1990s, the dot-com bust, the 2008–2009 financial crisis, and the COVID-19 shock of 2020. No other weekly economic indicator offers that length of unbroken historical record.

The Thursday Morning Release

The release is published simultaneously with equity markets closed and often minutes before futures markets open, creating a brief window in which professional traders can position ahead of the equity open. The number is watched because it is genuinely timely: the data are only one week old at release, compared to the Bureau of Labor Statistics monthly employment situation report (the “jobs report”) which covers a reference week three to five weeks before publication. UI claims serve as a high-frequency leading indicator, confirming or contradicting the monthly employment narrative on a weekly basis.

The headline figure for financial markets is the seasonally adjusted initial claims count for the nation. Below the headline, the release includes: the four-week moving average of initial claims (the preferred smoothed indicator), the insured unemployment rate (continuing claims as a percentage of covered employment), state-by-state unadjusted initial claims, and the continuing claims count for the nation (released with a one-week lag relative to initial claims, as state agencies need additional time to tabulate active benefit recipients). Subsequent revisions to the prior week's number are published simultaneously and are typically small — on the order of 1,000 to 5,000 claims — because the reporting window is short and most states submit complete data on time.

The release is sometimes delayed by a day when Thursday falls on a federal holiday; in those cases, DOL publishes on Wednesday. Major revisions to the seasonal adjustment factors are incorporated in the first release of each calendar year, which can cause apparent level shifts in the series that are purely statistical rather than reflecting real changes in filing activity.

Initial Claims vs. Continuing Claims

Initial claims (IC) and continuing claims (CC) measure fundamentally different phenomena and move independently. Initial claims count new UI applications filed during a reference week — they capture the flow of newly unemployed workers entering the UI system. A spike in initial claims reflects a wave of layoffs or furloughs; sustained elevated initial claims indicate an ongoing deterioration in the labor market. Conversely, declining initial claims signal that layoff rates are subsiding.

Continuing claims — also called insured unemployment — count the number of people actively receiving UI benefits during a reference week. They represent the stock of unemployed workers currently on UI, and reflect both the inflow of newly approved claimants and the outflow of workers who have found new employment, exhausted their benefit entitlement, or become ineligible for other reasons. Continuing claims lag the labor market conditions by more than initial claims do: they can remain elevated for weeks or months after the layoff wave has passed, because recently laid-off workers remain on benefits while searching for work.

The FRED series identifiers for the four primary UI claims series are:

FRED IDSeriesNotes
ICSAInitial Claims, Seasonally AdjustedHeadline number; national; weekly; back to 1967
ICNSAInitial Claims, Not Seasonally AdjustedRaw count; used for state-level analysis
CCSAContinuing Claims, Seasonally AdjustedStock of active UI recipients; 1-week lag vs. IC
CCNSAContinuing Claims, Not Seasonally AdjustedUnadjusted continuing claims; useful for state comparison
IC4WSA4-Week Moving Average, Initial Claims SAStandard smoothed indicator; preferred by analysts
CC4WSA4-Week Moving Average, Continuing Claims SASmoothed insured unemployment for trend analysis

The four-week moving average is widely used because week-to-week initial claims are noisy. Holiday calendar effects, severe weather, state reporting delays, and seasonal patterns that seasonal adjustment does not fully eliminate all produce single-week volatility that is analytically uninformative. The four-week average filters much of that noise while remaining timelier than monthly indicators. Fed economists, market strategists, and DOL economists themselves typically lead their commentary with the four-week average rather than the single-week headline.

Seasonal Adjustment

Unemployment insurance filing rates are highly seasonal. Construction layoffs surge in winter in cold-weather states. Retail layoffs spike in January after the holiday hiring season ends. Auto assembly plants take scheduled shutdowns for model-year changeovers that historically clustered in July and August. Agricultural employment — and the UI claims that follow harvest-season layoffs — follows a predictable annual pattern. Without seasonal adjustment, these recurring patterns would make it impossible to tell whether a week-to-week change in claims reflects a genuine deterioration in the labor market or simply the normal January retail purge.

DOL applies the X-13ARIMA-SEATS seasonal adjustment procedure to the national initial and continuing claims series. The procedure estimates seasonal factors from the historical series — currently using five years of data as the primary window — and divides the raw count by the estimated seasonal factor to produce the seasonally adjusted value. A seasonal factor greater than 1.0 for a given week means claims are historically elevated during that time of year; the adjusted value will therefore be lower than the raw count. A seasonal factor below 1.0 means claims are historically depressed during that period; the adjusted value will exceed the raw count.

State-level claims data is published in unadjusted form only. DOL does not apply seasonal adjustment to individual state series, partly because many individual state series are too small and volatile for reliable seasonal estimation, and partly because the primary policy use of state-level data is in triggering the federal-state Extended Benefits program (which uses unadjusted insured unemployment rates by design). Analysts who want state-level seasonally adjusted data must apply their own adjustment procedures.

State-by-State Variation

The decentralized federal-state structure of UI produces enormous variation in benefit generosity, duration, and eligibility across states. Maximum weekly benefit amounts range from roughly $235 in Mississippi to $1,050 or more in Massachusetts (as of the mid-2020s), reflecting differences in state wage levels and political choices about replacement rates. Most states target a replacement rate of 40–50% of a claimant's prior weekly wage, up to the state maximum. The practical effect is that high-wage states with high maxima provide meaningful income replacement for a large share of workers, while low-wage states with low maxima leave many workers at the benefit floor with replacement rates below 40%.

Standard benefit duration in most states is 26 weeks, a figure that has been the baseline since the 1970s. However, a significant number of states have reduced maximum duration since 2011 in response to budget pressures, the post-Great Recession drive to reduce UI trust fund debt, and arguments that shorter duration encourages faster reemployment. Florida, North Carolina, Georgia, Missouri, and Kansas are among the states that cut maximum duration to between 12 and 20 weeks for standard unemployment. During the 2021 labor shortage, Missouri and Georgia drew particular attention when they ended participation in federally funded pandemic supplement programs early, citing labor supply effects.

UI recipiency is the share of unemployed workers actually receiving benefits. In normal economic times, only about 27% of workers classified as unemployed by the BLS household survey are receiving UI benefits. The gap reflects multiple eligibility filters: workers must have sufficient work history in covered employment (typically earnings in at least two quarters of the base year); must not have quit voluntarily without good cause; must not have been fired for misconduct; must be able and available to work; and must actively seek new employment. Self-employed workers, gig workers, agricultural workers, and domestic workers have historically been excluded from standard UI coverage. Workers who exhaust their benefit entitlement also exit the continuing claims count but remain unemployed.

Extended Benefits During Recessions

The standard UI program is supplemented by the permanent federal-state Extended Benefits (EB) program and, during severe downturns, by emergency federal programs that Congress enacts on an ad hoc basis. Understanding these layers is essential for interpreting the claims series during recession periods, when the headline continuing claims count captures only the standard state program.

The permanent EB program, established in 1970, provides up to 13 additional weeks of benefits in states where the insured unemployment rate (IUR) — the ratio of continuing claims to covered employment — exceeds statutory trigger thresholds. The standard trigger requires a state IUR of at least 5% for thirteen consecutive weeks and at least 120% of the same period two years prior. Many states have adopted an optional higher trigger at a 6.5% IUR, which provides benefits without the 120% lookback requirement. Some states have adopted a total unemployment rate trigger option at 6.5% or higher. When a state triggers “on” EB, costs are split 50/50 between the federal government and the state; this shared cost structure creates political pressure on states to avoid triggering if possible.

During the Great Recession of 2007–2009, the permanent EB program was supplemented by the Emergency Unemployment Compensation (EUC) program, which Congress enacted in June 2008 and repeatedly extended through January 2014. EUC eventually provided up to 53 additional weeks of federal benefits (four tiers of 14, 14, 13, and 6 weeks in the final structure), bringing total potential duration to 99 weeks in high-unemployment states — a figure that entered the political vocabulary as “99ers,” referring to workers who had exhausted the full 99 weeks of available benefits without finding work. At the peak of EUC enrollment in early 2010, more than 5.5 million people were receiving federal extended benefits, a count that did not appear in the standard continuing claims series and required separate tracking.

COVID-19 produced two separate federal emergency programs enacted under the CARES Act of March 2020. Pandemic Emergency Unemployment Compensation (PEUC) provided up to 13 additional weeks (later extended to 53 weeks) of benefits to workers who exhausted state benefits. More consequentially, Pandemic Unemployment Assistance (PUA) extended UI eligibility to self-employed workers, gig workers, independent contractors, and others not normally covered by state UI — a category explicitly excluded from the traditional program since its inception. PUA enrollment eventually reached approximately 8–9 million people, creating a class of UI recipients who would never have appeared in the standard continuing claims count under pre-pandemic eligibility rules.

Pandemic-Era Claims

The COVID-19 pandemic produced the most extreme shock in the history of the weekly UI claims series. In the week ending March 21, 2020 — the first full week after pandemic-related business shutdowns began spreading across states — initial claims surged to 3.3 million, more than quadruple the prior record of approximately 695,000 set in October 1982 during the Volcker recession. The following week, ending March 28, 2020, claims reached 6.9 million — a figure that had been essentially inconceivable to labor market economists prior to that spring.

The 6.9 million figure represented roughly 4% of the entire U.S. civilian labor force filing new unemployment claims in a single week. To put the scale in context: the previous record of 695,000 had stood for 38 years; the pandemic peak exceeded it by a factor of ten in a matter of days. The claims surge reflected the simultaneous closure of restaurants, hotels, retail establishments, entertainment venues, and service businesses across essentially every major metropolitan area in the country. In states with large hospitality and tourism sectors — Nevada, Hawaii, Florida — the share of covered workers filing claims in a single week approached or exceeded 20%.

State UI systems were overwhelmed. Initial claims processing times extended to weeks or months in many states as agencies that had not modernized their COBOL-based mainframe systems in decades were inundated with volumes they had never been designed to handle. New Jersey, California, New York, and other large states experienced processing backlogs of millions of claims. The implementation of PUA — which required states to build entirely new administrative pathways for a novel class of claimants — compounded the processing challenges.

Continuing claims peaked in the week ending May 9, 2020, at approximately 24.9 million for standard state UI alone. Including PEUC and PUA enrollment, total persons receiving some form of pandemic UI benefits peaked at approximately 33 million in June 2020 — roughly one in five workers in the covered labor force. The CARES Act added a $600 federal supplement (Federal Pandemic Unemployment Compensation, or FPUC) to all UI payments through July 2020, later replaced by a $300 supplement through September 2021 under the American Rescue Plan. These supplements made the total benefit amount for many low-wage workers exceed their prior-employment wages, producing both political controversy and measurable effects on the pace of labor market recovery.

Relationship to BLS Unemployment Rate

UI continuing claims and the BLS unemployment rate are related but distinct measures, and treating them as interchangeable produces systematic errors. The BLS unemployment rate is derived from the Current Population Survey (CPS), a monthly household survey of approximately 60,000 households conducted by the Census Bureau for BLS. The CPS measures unemployment as the share of the civilian labor force that is not employed, has actively searched for work in the prior four weeks, and is currently available for work. UI continuing claims are an administrative count of persons receiving UI benefits.

The conceptual gap between the two series flows from the 27% recipiency rate discussed above. Workers who are unemployed by the BLS definition but not receiving UI benefits — because they are ineligible, have exhausted benefits, have not applied, or are self-employed — are counted in the BLS unemployment rate but not in continuing claims. In normal times, this means the BLS unemployed count substantially exceeds continuing claims. The insured unemployment rate (IUR) — continuing claims as a percentage of covered employment — is typically three to four percentage points below the BLS unemployment rate for this reason.

The COVID-19 pandemic temporarily inverted this relationship. In spring 2020, PUA expanded UI eligibility to self-employed and gig workers who had never been eligible before, and processing backlogs meant that claims filed for weeks in March and April were not recorded in the continuing claims count until May or June. The result was a brief period in May–June 2020 when total persons receiving some form of pandemic UI benefits (including PUA) exceeded the BLS count of unemployed persons — a statistical anomaly that reflected the expanded eligibility, processing backlogs, and the difficulty of accurately measuring labor market conditions during an unprecedented shock.

For the Federal Reserve, both series matter but serve different purposes in the monetary policy framework. UI claims provide high-frequency evidence on labor market tightening or loosening between FOMC meetings. The BLS unemployment rate and nonfarm payrolls are the authoritative monthly benchmarks. Fed economists typically use claims as a real-time leading indicator that informs the tone of the inter-meeting labor market assessment rather than as a direct input to the unemployment rate target built into the reaction function.

Data Access: FRED and DOL ETA

The Federal Reserve Bank of St. Louis FRED database is the standard access point for UI claims research. FRED hosts the complete historical series for ICSA, ICNSA, CCSA, CCNSA, IC4WSA, CC4WSA, and the insured unemployment rate series (IURSA), updated automatically each Thursday morning after the DOL release. FRED provides a free API at api.stlouisfed.org/fred/series/observationswith JSON, XML, and CSV output formats. API keys are free and available at fred.stlouisfed.org. Rate limits are generous for research use — 1,000 requests per API key per day.

The primary DOL ETA source is the Office of Unemployment Insurance's claims portal at oui.doleta.gov/unemploy/claims.asp. That page links to the weekly Advance Claims press release (the official Thursday release), the historical data file (r539cy.csv for initial claims by state, r5159.csv for continued claims), and the ETA Handbook No. 401, which documents the definitions, collection methodology, and seasonal adjustment approach in full technical detail.

For state-level analysis, the DOL ETA CSV files are the preferred source because they contain unadjusted weekly initial and continuing claims for all 53 jurisdictions going back to the 1980s. Each row represents one state-week observation with the claim count, the applicable week-ending date, and identifiers for the reporting jurisdiction. The files are updated each Thursday and are publicly available without authentication. Researchers comparing state responses to recessions, analyzing benefit exhaustion rates by state, or studying how state UI generosity affects labor market recovery should start with these files rather than FRED, which hosts only the national aggregate series.

Additional resources: the Bureau of Labor Statistics publishes an annual mass layoff statistics program (discontinued in 2013 but historically useful for pre-2013 event-driven analysis); the Census Bureau's Local Area Unemployment Statistics (LAUS) program publishes monthly state and county unemployment rates that can be used to contextualize weekly claims trends at the subnational level. For researchers working with microdata on individual claimants — benefit amounts, duration, reemployment wages — DOL ETA administers the UI Longitudinal Data Collection (UILDC) program, which provides restricted-access individual claimant records to approved researchers through a formal data agreement process.

Python Code

The following script fetches ICSA (initial claims, seasonally adjusted) and CC4WSA (four-week moving average of continuing claims, SA) from the FRED API for all weeks since 2019, identifies the COVID-19 peak, computes a 52-week rolling average to show the underlying trend, prints the latest 12 weeks with year-over-year comparison, and optionally fetches state-level data from the DOL ETA CSV files. Replace YOUR_FRED_API_KEY_HERE with a free key obtained from fred.stlouisfed.org. The script requiresrequests and pandas.

import requests
import pandas as pd
from datetime import datetime, timedelta

# ---------------------------------------------------------------------------
# FRED API: DOL Weekly Unemployment Insurance Claims
# ---------------------------------------------------------------------------
# Required series:
#   ICSA   -- Initial Claims, Seasonally Adjusted (weekly)
#   ICNSA  -- Initial Claims, Not Seasonally Adjusted (weekly)
#   CC4WSA -- 4-Week Moving Average of Continuing Claims, SA
#   CCSA   -- Continuing Claims, Seasonally Adjusted
#
# Get a free FRED API key at: https://fred.stlouisfed.org/docs/api/api_key.html
# Then set: FRED_API_KEY = "your_key_here"

FRED_API_KEY = "YOUR_FRED_API_KEY_HERE"
FRED_BASE    = "https://api.stlouisfed.org/fred/series/observations"

def fetch_fred(series_id: str, observation_start: str = "2019-01-01") -> pd.DataFrame:
    """Fetch a FRED series and return a DataFrame with date and value columns."""
    params = {
        "series_id":        series_id,
        "api_key":          FRED_API_KEY,
        "file_type":        "json",
        "observation_start": observation_start,
        "observation_end":  datetime.today().strftime("%Y-%m-%d"),
        "sort_order":       "asc",
    }
    resp = requests.get(FRED_BASE, params=params, timeout=30)
    resp.raise_for_status()
    data = resp.json()
    observations = data.get("observations", [])
    df = pd.DataFrame(observations)[["date", "value"]].copy()
    df["date"]  = pd.to_datetime(df["date"])
    # FRED uses "." for missing; coerce to NaN
    df["value"] = pd.to_numeric(df["value"], errors="coerce")
    df.rename(columns={"value": series_id}, inplace=True)
    return df.set_index("date")

# ---------------------------------------------------------------------------
# Part 1: Fetch ICSA and CC4WSA
# ---------------------------------------------------------------------------
print("Fetching ICSA (Initial Claims, SA) from FRED...")
icsa_df = fetch_fred("ICSA", observation_start="2019-01-01")

print("Fetching CC4WSA (4-Week MA Continuing Claims, SA) from FRED...")
cc4w_df = fetch_fred("CC4WSA", observation_start="2019-01-01")

# Merge on date index
combined = icsa_df.join(cc4w_df, how="outer")
combined.sort_index(inplace=True)

print(f"\nLoaded {len(combined)} weekly observations from {combined.index.min().date()} "
      f"to {combined.index.max().date()}")

# ---------------------------------------------------------------------------
# Part 2: Identify the COVID-19 peak week (ICSA)
# ---------------------------------------------------------------------------
covid_window = combined.loc["2020-01-01":"2020-12-31", "ICSA"].dropna()
if not covid_window.empty:
    peak_date  = covid_window.idxmax()
    peak_value = covid_window.max()
    print(f"\n=== COVID-19 Peak Week (Initial Claims, SA) ===")
    print(f"  Week ending : {peak_date.strftime('%Y-%m-%d')}")
    print(f"  Claims      : {peak_value:,.0f}")
    print(f"  Previous record (Oct 1982): ~695,000")
    print(f"  Ratio to prior record     : {peak_value / 695_000:.1f}x")

# ---------------------------------------------------------------------------
# Part 3: 52-Week Rolling Average (trend smoothing)
# ---------------------------------------------------------------------------
# 52 weekly observations = ~1 year
combined["ICSA_52wk_avg"] = combined["ICSA"].rolling(window=52, min_periods=26).mean()

print("\n=== 52-Week Rolling Average: Selected Milestones ===")
milestones = {
    "Pre-pandemic (Jan 2020)": "2020-01-04",
    "Pandemic peak (Apr 2020)": "2020-04-04",
    "One year post-peak (Apr 2021)": "2021-04-03",
    "Two years post-peak (Apr 2022)": "2022-04-02",
    "Three years post-peak (Apr 2023)": "2023-04-01",
}
print(f"  {'Milestone':<40}  {'52-Wk Avg (SA)':>16}")
print("  " + "-" * 58)
for label, date_str in milestones.items():
    try:
        nearest_idx = combined.index.get_indexer([pd.to_datetime(date_str)], method="nearest")[0]
        row = combined.iloc[nearest_idx]
        avg = row["ICSA_52wk_avg"]
        print(f"  {label:<40}  {avg:>16,.0f}")
    except Exception:
        print(f"  {label:<40}  {'N/A':>16}")

# ---------------------------------------------------------------------------
# Part 4: Latest 12 Weeks of ICSA with Year-over-Year Comparison
# ---------------------------------------------------------------------------
icsa_valid = combined["ICSA"].dropna()
latest_12  = icsa_valid.tail(12)

print("\n=== Latest 12 Weeks: Initial Claims (SA) with YoY Comparison ===")
print(f"  {'Week Ending':<14}  {'IC (SA)':>10}  {'YoY Week':>14}  {'YoY Chg':>10}  {'YoY %':>8}")
print("  " + "-" * 60)
for date, ic in latest_12.items():
    # Find the observation ~52 weeks prior
    yoy_date = date - timedelta(weeks=52)
    nearest  = combined.index.get_indexer([yoy_date], method="nearest")[0]
    yoy_ic   = combined["ICSA"].iloc[nearest]
    if pd.notna(yoy_ic):
        delta   = ic - yoy_ic
        delta_p = delta / yoy_ic * 100
        yoy_str = f"{yoy_date.strftime('%Y-%m-%d')}"
        print(f"  {date.strftime('%Y-%m-%d'):<14}  {ic:>10,.0f}  {yoy_str:>14}  "
              f"{delta:>+10,.0f}  {delta_p:>+7.1f}%")
    else:
        print(f"  {date.strftime('%Y-%m-%d'):<14}  {ic:>10,.0f}  {'N/A':>14}  "
              f"{'N/A':>10}  {'N/A':>8}")

# ---------------------------------------------------------------------------
# Part 5: Optional -- DOL ETA State-Level Data (latest week)
# ---------------------------------------------------------------------------
# DOL publishes state-by-state initial claims data at:
# https://oui.doleta.gov/unemploy/claims.asp
# The data is also available as Excel files from DOL ETA's Advance Claims report.
# The URL below fetches the most recent Advance Claims Excel from DOL ETA.

DOL_ADVANCE_URL = (
    "https://oui.doleta.gov/unemploy/csv/r539cy.csv"
)

print("\n=== Attempting DOL ETA State-Level Initial Claims (ETA-539) ===")
try:
    dol_resp = requests.get(DOL_ADVANCE_URL, timeout=30, headers={"User-Agent": "Mozilla/5.0"})
    dol_resp.raise_for_status()
    from io import StringIO
    dol_df = pd.read_csv(StringIO(dol_resp.text))
    print(f"  Loaded DOL ETA-539 data: {dol_df.shape[0]} rows x {dol_df.shape[1]} cols")
    # Show column names so the user can identify the right fields
    print(f"  Columns: {list(dol_df.columns)}")
    # Attempt to print top-10 states by initial claims in the latest week
    if "Filed week ended" in dol_df.columns or "state" in dol_df.columns:
        print(dol_df.tail(53).to_string(index=False))
    else:
        print(dol_df.tail(10).to_string(index=False))
except Exception as exc:
    print(f"  DOL ETA state-level fetch failed: {exc}")
    print("  Tip: Download the Advance Claims report manually from:")
    print("       https://oui.doleta.gov/unemploy/claims.asp")

# ---------------------------------------------------------------------------
# Part 6: Summary statistics
# ---------------------------------------------------------------------------
print("\n=== Summary Statistics: ICSA (2019-present) ===")
stats = combined["ICSA"].dropna().describe()
for label, val in stats.items():
    print(f"  {label:<10}: {val:>12,.0f}")

print("\n=== Summary Statistics: CC4WSA (2019-present) ===")
stats_cc = combined["CC4WSA"].dropna().describe()
for label, val in stats_cc.items():
    print(f"  {label:<10}: {val:>12,.0f}")

The FRED API returns observations as JSON with date andvalue fields; FRED uses a literal period character (“.”) for missing observations, which the script coerces to NaN viapd.to_numeric(..., errors='coerce'). The 52-week rolling average uses a min_periods=26 argument so the window populates even in the first year of the series slice. The DOL ETA state-level CSV (r539cy.csv) is fetched as plain text and read withpd.read_csv; column names vary by the DOL ETA schema version, so the script prints column names to assist with field identification before attempting to display rows.

Related writing

CMS Nursing Home Compare: The Federal Database Behind Quality Ratings for 14,700 US Nursing Homes — CMS Five-Star Quality Rating System, health inspections, staffing data, and nursing home abuse/neglect flags.