National Rate Overview
Average mortgage APR across all credit unions in the dataset, broken down by product type (30-year, 15-year, 20-year, and 10-year fixed). State averages for 30-year fixed range from 4.5% (NM) to 7.17% (MT).
Loan Program Comparison
Compare average mortgage APR across loan programs — conventional, jumbo, FHA, VA, and USDA. Program availability varies by credit union.
State Comparison
Compare average mortgage APR across US states. Use the dropdowns to filter by product type and loan program. States with fewer than 2 data points are excluded.
Data Coverage
Breakdown by product type showing the average, minimum, and maximum APR along with the number of rate observations.
| Product Type | Avg APR | Min | Max | Count |
|---|---|---|---|---|
| 30-Year Fixed | 6.24% | 4.00% | 10.25% | 1,652 |
| 15-Year Fixed | 5.96% | 4.00% | 12.75% | 927 |
| 20-Year Fixed | 6.39% | 5.11% | 11.07% | 386 |
| 10-Year Fixed | 6.09% | 4.00% | 12.50% | 221 |
By Loan Program
| Loan Program | Avg APR | Min | Max | Count |
|---|---|---|---|---|
| Conventional | 6.02% | 4.00% | 12.75% | 2,513 |
| Jumbo | 7.09% | 5.44% | 7.66% | 271 |
| FHA | 6.61% | 5.79% | 8.43% | 176 |
| VA | 6.24% | 5.59% | 7.52% | 191 |
| USDA | 6.75% | 6.16% | 7.78% | 35 |
Download the Dataset
Download the full dataset under the CC BY 4.0 license. Use it for research, apps, journalism, or anything else — just provide attribution.
JSON
Full dataset with all fields. Best for programmatic access.
application/jsonCSV
Tabular format. Great for Excel, Google Sheets, pandas.
text/csvSummary JSON
Pre-aggregated by state, product type, and loan program.
application/json# Quick start with Python
import pandas as pd
import requests
from io import StringIO
url = "https://rateapi.dev/data/mortgage-rates/mortgage-rates.csv"
df = pd.read_csv(StringIO(requests.get(url).text))
# Average APR by product type
print(df.groupby("product_type")["apr"].mean())
# 30-year fixed by state
fixed_30 = df[df["product_type"] == "30-year-fixed"]
print(fixed_30.groupby("credit_union_state")["apr"].mean().sort_values())Schema
Each record in the JSON file contains the following fields:
credit_union_nameName of the credit union (string)credit_union_stateTwo-letter US state code, e.g. "CA"credit_union_cityCity of the credit union (string or null)product_nameOriginal product name from the source websiteproduct_typeNormalized type: "30-year-fixed", "15-year-fixed", "20-year-fixed", or "10-year-fixed"loan_programLoan program: "conventional", "jumbo", "fha", "va", "usda", or nullrateBase interest rate before fees (number, e.g. 6.25)aprAnnual Percentage Rate including fees (number, e.g. 6.375)pointsDiscount points (number, e.g. 0 or 0.5, or null)source_urlURL of the credit union rate page (string or null)scraped_atISO 8601 timestamp of when rate was collected