Skip to main content

Advanced Queries

Master complex search patterns, filtering techniques, and efficient data retrieval strategies using the FRED MCP Server. Combine multiple keywords:
{
  "query": "unemployment rate seasonally adjusted",
  "limit": 20,
  "sort_by": "popularity"
}
Search strategies:
  • More specific terms = fewer, more relevant results
  • Include seasonal adjustment status
  • Add frequency (monthly, quarterly)
  • Specify geographic scope (national, state)

Wildcard Patterns

Use partial series IDs:
{
  "query": "UNRATE*",
  "search_type": "series_id"
}
Returns:
  • UNRATE (National)
  • UNRATENSA (Not seasonally adjusted)
  • UNRATEUSA (Alternate series)

Source-Specific Searches

Find series from specific agencies:
{
  "query": "employment",
  "tags": ["bls"],
  "limit": 50
}

Tag-Based Filtering

Multiple Tag Combinations

{
  "query": "inflation",
  "tags": ["monthly", "sa", "usa"],
  "tag_mode": "all"  // Must match all tags
}
Common tag combinations:

National Monthly SA

["monthly", "sa", "usa"]

Quarterly National Accounts

["quarterly", "bea", "nipa"]

Daily Financial Data

["daily", "finance", "rates"]

State-Level Data

["state", "monthly", "sa"]

Tag Discovery

Find related tags:
{
  "query": "employment",
  "include_observation_values": false,
  "sort_by": "popularity"
}
Then examine tags in results to refine search.

Category-Based Browsing

1

Start at Root

{
  "category_id": 0
}
Returns top-level categories
2

Drill Down

{
  "category_id": 10  // Employment & Labor
}
Returns subcategories
3

Get Series

{
  "category_id": 11,  // Current Employment Statistics
  "limit": 100
}
Returns series in category
Category IDNameSeries Count
32991Money, Banking & Finance~10,000
10Population, Employment & Labor~15,000
1Production & Business Activity~40,000
32455Prices~25,000
32263International Data~60,000
3008U.S. Regional Data~30,000

Geographic Queries

State-Level Data

Find data for specific states:
{
  "query": "unemployment rate",
  "tags": ["state", "monthly", "sa"],
  "limit": 50
}
State code patterns:
  • Format: {INDICATOR}{STATE}
  • Example: CAUR (California Unemployment Rate)
// Unemployment
{ "series_id": "CAUR" }

// GDP
{ "series_id": "CANGSP" }

// Home Price Index
{ "series_id": "CASTHPI" }
// Unemployment
{ "series_id": "TXUR" }

// GDP
{ "series_id": "TXNGSP" }

// Home Price Index
{ "series_id": "TXSTHPI" }
// Unemployment
{ "series_id": "NYUR" }

// GDP
{ "series_id": "NYNGSP" }

// Home Price Index
{ "series_id": "NYSTHPI" }

Metro Area Data

Metropolitan Statistical Areas (MSAs):
{
  "query": "unemployment rate",
  "tags": ["msa", "monthly"],
  "limit": 100
}
Example MSAs:
  • LAUMT064910: Los Angeles-Long Beach-Anaheim
  • LAUMT364190: New York-Newark-Jersey City
  • LAUMT121410: Chicago-Naperville-Elgin

International Data

{
  "query": "gdp",
  "tags": ["oecd"],
  "limit": 50
}

// Or specific countries
{
  "query": "gdp japan",
  "limit": 20
}

Frequency-Specific Searches

Daily Data

{
  "tags": ["daily"],
  "query": "interest rate",
  "limit": 20
}
Common daily series:
  • Treasury yields (DGS2, DGS10, DGS30)
  • Fed funds rate (DFF)
  • Exchange rates (DEXUSEU, DEXJPUS)
  • Stock indices (SP500, DJIA)

High-Frequency Financial

{
  "tags": ["daily", "finance"],
  "sort_by": "popularity",
  "limit": 50
}

Low-Frequency Data

Annual or less frequent:
{
  "tags": ["annual"],
  "query": "population",
  "limit": 30
}

Date Range Optimization

Recent Data Only

{
  "series_id": "GDP",
  "observation_start": "2020-Q1",
  "observation_end": "2024-Q3"
}
Limiting date ranges reduces API payload size and improves performance

Historical Analysis

Long-term series:
{
  "series_id": "CPIAUCSL",
  "observation_start": "1947-01-01",  // Series inception
  "observation_end": "2024-10-01"
}

Rolling Windows

Get last N periods:
{
  "series_id": "UNRATE",
  "observation_start": "2023-01-01",  // Last ~20 months
  "sort_order": "desc",
  "limit": 20
}

Complex Filtering

Popularity Threshold

Focus on commonly-used series:
{
  "query": "gdp",
  "sort_by": "popularity",
  "limit": 100
}
Filter results where popularity > 50:
results.filter(series => series.popularity > 50)

Frequency Filtering

Find only monthly series:
{
  "query": "inflation",
  "tags": ["monthly"]
}

Seasonal Adjustment

Prefer seasonally adjusted:
{
  "query": "retail sales",
  "tags": ["sa"]  // Seasonally adjusted only
}

Batch Retrieval

Multiple Series

Retrieve related series efficiently:
const series_ids = [
  "UNRATE",    // Unemployment
  "CPIAUCSL",  // CPI
  "GDP",       // GDP
  "DFF",       // Fed Funds
  "SP500"      // Stock Market
];

// Request each
series_ids.forEach(id => {
  fred_get_series({
    series_id: id,
    observation_start: "2020-01-01"
  });
});

Category Sweep

Get all series in a category:
{
  "category_id": 11,  // Current Employment Statistics
  "limit": 1000,      // Max per request
  "offset": 0
}

// If more than 1000, paginate:
// offset: 1000, 2000, 3000, etc.

Search Optimization

Precision vs Recall

{
  "query": "UNRATE",  // Exact ID
  "search_type": "series_id"
}
Returns: 1 exact match

Sort Strategies

{ "sort_by": "popularity" }
Best for: Finding commonly-used series
{
  "sort_by": "title",
  "sort_order": "asc"
}
Best for: Alphabetical browsing
{
  "sort_by": "last_updated",
  "sort_order": "desc"
}
Best for: Finding recently updated data
{
  "sort_by": "series_id",
  "sort_order": "asc"
}
Best for: Finding related series by ID pattern

Real-World Query Patterns

Economic Dashboard

Build a monitoring dashboard:
const dashboard_queries = [
  // Labor Market
  {
    series_ids: ["UNRATE", "PAYEMS", "CIVPART"],
    start: "2020-01-01",
    transform: "lin"
  },

  // Inflation
  {
    series_ids: ["CPIAUCSL", "CPILFESL", "PCEPI"],
    start: "2020-01-01",
    transform: "pc1"
  },

  // Growth
  {
    series_ids: ["GDP", "GDPC1", "INDPRO"],
    start: "2020-Q1",
    transform: "pca"
  },

  // Markets
  {
    series_ids: ["DFF", "DGS10", "SP500"],
    start: "2020-01-01",
    transform: "lin"
  }
];

Comparative Analysis

Compare across geographies:
const states = ["CA", "TX", "NY", "FL"];
const indicator = "UR";  // Unemployment Rate

states.forEach(state => {
  fred_get_series({
    series_id: `${state}${indicator}`,
    observation_start: "2020-01-01"
  });
});

Historical Research

Long-term trend analysis:
{
  "series_id": "CPIAUCSL",
  "observation_start": "1947-01-01",  // Full history
  "units": "pc1",  // Annual inflation
  "frequency": "a",  // Annual frequency
  "aggregation_method": "eop"  // End of period
}

Nowcasting

Get most recent values:
{
  "series_id": "UNRATE",
  "sort_order": "desc",
  "limit": 1  // Just the latest
}

Performance Tips

1

Use Specific IDs

When known, use exact series IDs instead of search
2

Limit Date Ranges

Request only needed time periods
3

Apply Filters Early

Use tags to narrow before searching
4

Plan Data Needs

Identify what data you need upfront to avoid redundant calls
5

Batch Related Queries

Group similar requests together

Troubleshooting

Common issues:
  • No results: Query too specific, try broader terms
  • Too many results: Add tags or more specific terms
  • Slow queries: Reduce date range or result limit
  • Unexpected series: Check tags and sort order

Query Refinement

// Too broad (10,000 results)
{ "query": "rate" }

// Better (500 results)
{ "query": "interest rate" }

// Best (20 results)
{
  "query": "interest rate",
  "tags": ["daily", "treasury"],
  "limit": 20
}

Next Steps