Macro, central banks & auctions

Exactly how each macro event reaches this calendar: which API we call, what we take from it, what is hand-transcribed, and what happens when a source is down.

Short version: two public JSON APIs, called once a day — no scraping, no paid data. Yearly agency schedules and FOMC dates have no API, so those are transcribed by hand from the official pages and labeled (est.) until confirmed.

Every source, at a glance

DataMethodCadence
Upcoming week's macro (CPI, claims, speakers…)HTTPS GET · JSON API · no key → ForexFactory weekly feedOnce daily
Treasury note/bond/TIPS auctionsHTTPS GET · JSON API · no key → Treasury FiscalDataOnce daily
Yearly macro schedule (CPI/PPI/payrolls dates)Hand-transcribed from BLS / BEA / Census schedule pagesAs agencies publish
FOMC meeting datesHand-transcribed from federalreserve.govAs the Fed publishes

Both API calls run inside one automated daily rebuild. We do not scrape HTML pages of any website; the two machine sources are plain JSON-over-HTTPS endpoints that return a document per request.

The coming week — ForexFactory feed (API)

Each day we issue one HTTPS GET against ForexFactory's public weekly-calendar endpoint. It returns a JSON array covering Monday–Sunday, no API key required:

GET https://nfs.faireconomy.media/ff_calendar_thisweek.json

Each record looks like this:

{
  "title":    "CPI m/m",
  "country":  "USD",
  "date":     "2026-10-14T08:30:00-04:00",
  "impact":   "High",
  "forecast": "0.3%",
  "previous": "0.2%"
}

What we keep from each record:

Three refinements happen before an event is stored: Treasury auction rows are discarded (auctions come from Treasury's own API below); weekly accounting rows like "Fed's Balance Sheet" are dropped as noise; and same-moment sub-releases are merged — CPI m/m, Core CPI m/m and CPI y/y at 08:30 become a single "CPI" event listing the components. When a feed row and our hand-maintained schedule describe the same release, the feed's confirmed date and forecast/previous values win.

If the call fails (timeout, feed down), the rebuild falls back to the previous day's snapshot of the same feed and the site ships complete — content is at most one day stale, never missing.

Treasury auctions — FiscalData (API)

Auction schedules come from the U.S. Treasury's own data platform, a public REST API, again a single HTTPS GET with no key:

GET https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/od/upcoming_auctions

Each record carries the security and its dates:

{
  "security_type":   "Bond",
  "security_term":   "19-Year 10-Month",
  "reopening":       "Yes",
  "cusip":           "912810UX4",
  "announcemt_date": "2026-10-15",
  "auction_date":    "2026-10-21",
  "issue_date":      "2026-10-23"
}

We keep Note, Bond and TIPS records auctioned within the next 35 days and turn each into a calendar event at 13:00 ET (the standard coupon-auction closing time), with reopenings flagged in the title. Weekly Bill auctions are deliberately excluded — they're financing mechanics, not catalysts. Same failure rule as above: last snapshot, never a gap.

Yearly macro schedule — hand-transcribed from official pages

BLS, BEA and the Census Bureau publish yearly release-schedule pages (for example the BLS CPI schedule) but offer no calendar API. So the far-future backbone — "US CPI (November)", "US Nonfarm Payrolls (December)" — is transcribed by hand from those pages into our curated event file, and each entry is marked (est.) until the agency's own schedule or the weekly feed confirms it. This is the only manual step in the macro pipeline, and it exists because the source is a web page, not an API.

FOMC dates — from federalreserve.gov

The Fed publishes its meeting calendar a year or more ahead on fomccalendars.htm — again a page, not an API. Dates are transcribed verbatim, including which meetings carry a Summary of Economic Projections (those get the "dot plot" note on the event page). These entries are treated as confirmed, not estimated.

Fed speakers

Speaker appearances ("FOMC Member Waller Speaks") are not a separate source — they arrive inside the ForexFactory feed described above, and pass the same filters (USD; Low-impact rows kept only when the title marks a speech).

What we don't do