DEV Community

Cover image for I built a free, CC-BY-licensed financial data API — and open-sourced the OpenAPI spec
Jere Salmisto
Jere Salmisto

Posted on • Originally published at calcfi.app

I built a free, CC-BY-licensed financial data API — and open-sourced the OpenAPI spec

I built a free, CC-BY-licensed financial data API

Most personal-finance APIs are paid, rate-limited behind a credit card, or wrap a single primary source you could hit yourself. I got tired of paying $49/mo for thin wrappers over FRED and BLS, so I built one I wished existed.

It's free. CC BY 4.0. No auth. K-anonymized. Daily refresh at 05:00 UTC. OpenAPI 3.1 spec published.

Live spec: https://calcfi.app/api/insights/openapi.json
Docs: https://calcfi.app/developers

What's in it

Four endpoint families. All read-only. All cite primary sources.

1. Insights — aggregate calculator-run stats

People run financial calculators on calcfi.app. The aggregates (median tax refund by income bracket, score distributions for affordability, etc.) are exposed as a feed. Every row is k-anonymity safe — buckets with fewer than 10 runs are dropped.

curl https://calcfi.app/api/insights/tax-refund
Enter fullscreen mode Exit fullscreen mode

Use cases: blog charts, journalist research, ML training signals, "what's normal?" benchmarks.

2. Macro data — FRED, BLS, IRS, Treasury, Freddie Mac passthrough

JSON + CSV history for every series CalcFi tracks. No API key juggling, no per-provider auth.

# Freddie Mac Primary Mortgage Market Survey, latest values
curl https://calcfi.app/api/data/freddie-pmms

# Full history as CSV
curl https://calcfi.app/api/data/freddie-pmms/history.csv
Enter fullscreen mode Exit fullscreen mode

Currently exposes 30+ series: 30Y mortgage rates, CPI, unemployment, Treasury yields, IRS bracket thresholds, etc. Updated daily.

3. State maps — salary, tax, mortgage, rent, cost-of-living, affordability

Per-state values for every map on the site. CSV for bulk consumers, JSON for one-off lookups, PNG for blog embeds.

# All states, salary medians
curl https://calcfi.app/api/maps/salary/csv

# One state
curl https://calcfi.app/api/maps/salary/TX

# Chart image (1200×630, embed-ready)
https://calcfi.app/api/maps/salary/chart.png

# Choropleth
https://calcfi.app/api/maps/salary/map.png
Enter fullscreen mode Exit fullscreen mode

The PNGs are intentional — they make it possible to drop a live, daily-refreshed chart into a blog post with a single <img> tag.

4. LLM manifest — discoverable financial data for agents

/api/llms/manifest returns a structured index of every series + its semantic tags. Built so agents can find "30Y mortgage rate" without scraping HTML.

curl https://calcfi.app/api/llms/manifest
curl https://calcfi.app/api/llms/rates
Enter fullscreen mode Exit fullscreen mode

If you're building LLM tooling, this is the part that doesn't exist anywhere else.

Why this is interesting

Primary-source cited. Every value carries source, source_url, as_of. No "trust me bro" numbers. Methodology blocks on every endpoint.

K-anonymity by default. No row exposes individual user data. The aggregation threshold is enforced server-side, not at query time.

CC BY 4.0 license. Use it in commercial products. Attribution requested (link back to the endpoint URL).

Daily refresh. Cron pulls primary sources at 05:00 UTC, validates schema, writes to the read-only store. No stale fixtures.

Consuming it

Python

import requests

r = requests.get("https://calcfi.app/api/data/freddie-pmms")
data = r.json()
print(f"30Y rate: {data['latest']['rate_30y']}% as of {data['latest']['as_of']}")
Enter fullscreen mode Exit fullscreen mode

JavaScript / TypeScript

const res = await fetch("https://calcfi.app/api/insights/tax-refund");
const insights = await res.json();
Enter fullscreen mode Exit fullscreen mode

Bash + jq

curl -s https://calcfi.app/api/maps/affordability/csv \
  | awk -F, '$3 < 30 { print $1, $3 }'
Enter fullscreen mode Exit fullscreen mode

CORS

Full wildcard. Access-Control-Allow-Origin: * on every endpoint. Hit it from the browser.

What's next

  • More state-level series (childcare cost, broadband cost, healthcare premiums)
  • Webhook subscriptions for series changes (rate cuts, IRS bracket updates)
  • Schema.org Dataset markup on every /data/[slug] page — Google Dataset Search inclusion

Try it

curl https://calcfi.app/api/insights/health
Enter fullscreen mode Exit fullscreen mode

Spec: https://calcfi.app/api/insights/openapi.json
Docs: https://calcfi.app/developers
Source-tagged data pages: https://calcfi.app/data

If you find the data useful, the only ask is attribution: link to the endpoint or to https://calcfi.app/developers.


Built by Jere Salmisto. Issues + feature requests welcome — drop a comment or hit the API and tell me what's missing.

Top comments (0)