NFIB SBET APInfib-sbet.org ↗
Access NFIB Small Business Optimism Index, historical time-series, and survey microdata filtered by industry, region, and employee size via a single API.
What is the NFIB SBET API?
The NFIB SBET API exposes 5 endpoints covering the National Federation of Independent Business Small Business Economic Trends survey data, including the Optimism Index, historical monthly time-series back to selectable year ranges, and question-level microdata breakdowns. The get_filtered_indicators endpoint returns raw response counts and percentages segmented by industry, region, and employee size using indicator codes retrieved from list_indicators.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/b4103abf-add4-4c64-b5bb-01dc496cc42c/list_indicators' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace nfib-sbet-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.nfib_small_business_economic_trends_api import (
NFIB, Industry, Region, EmployeeSize
)
nfib = NFIB()
# List available indicators
for indicator in nfib.indicators.list():
print(indicator.code, indicator.name)
# Get latest optimism index snapshot
snapshot = nfib.optimismsnapshots.get_latest()
print(snapshot.latest_value, snapshot.date, snapshot.name)
for point in snapshot.history_sample:
print(point.monthyear, point.value)
# Get historical optimism series
series = nfib.optimismserieses.get(min_year="2020", max_year="2025")
print(series.indicator, series.name, series.description)
for dp in series.data:
print(dp.monthyear_new, dp.value)
# Search filtered survey responses by industry and region
for response in nfib.surveyresponses.search(
indicators="bus_cond_expect",
min_year="2024",
max_year="2025",
industry=Industry.MANUFACTURING,
region=Region.NORTHEAST,
):
print(response.resp_q_short, response.monthyear, response.percent, response.totalcount)
# Search microdata trends with employee size filter
for micro in nfib.microdataresponses.search(
questions="sales_expect",
min_year="2024",
max_year="2025",
employee_size=EmployeeSize.ONE_TO_FOUR,
):
print(micro.resp_q_short, micro.answer, micro.monthyear, micro.percent)
List all available indicator codes and their human-readable names. These codes are used as inputs for the get_filtered_indicators and get_microdata_trends endpoints. Returns a static catalog of ~29 indicators covering employment, sales, capital expenditure, credit, pricing, and other survey dimensions.
No input parameters required.
{
"type": "object",
"fields": {
"indicators": "array of indicator objects with code and name"
},
"sample": {
"data": {
"indicators": [
{
"code": "OPT_INDEX",
"name": "Small Business Optimism Index"
},
{
"code": "bus_cond_expect",
"name": "Expect Economy to Improve"
},
{
"code": "sales_expect",
"name": "Expect Real Sales Higher"
}
]
},
"status": "success"
}
}About the NFIB SBET API
What the API Covers
This API surfaces data from the NFIB Small Business Economic Trends (SBET) survey, a long-running monthly survey of small business owner sentiment. The get_latest_optimism_index endpoint returns the most recent Optimism Index value plus a 12-month rolling sample with monthyear, monthyear_new, and OPT_INDEX fields. For full historical ranges, get_indicator_data accepts min_year and max_year parameters in YYYY format and returns a complete monthly array — though only the OPT_INDEX indicator is supported through this endpoint.
Indicator and Microdata Endpoints
list_indicators returns every available indicator code and its human-readable name — these codes (e.g., emp_count_change_expect, bus_cond_expect, sales_expect) are the required inputs for get_filtered_indicators and get_microdata_trends. get_filtered_indicators accepts a comma-separated indicators parameter and optional filters for industry (e.g., Construction, Retail, Agriculture), region (e.g., Northeast, Great Lakes), and employee_size (e.g., 1-4, 5-8, 39+). Each response row carries resp_q_short, resp_acode, percent, and totalcount fields alongside time dimensions.
Microdata Detail
get_microdata_trends goes deeper than aggregated percentages. It returns the full question text (resp_q), answer label (answer), plus industry, employee, and statev demographic labels for each response row. The same min_year/max_year, region, industry, and employee_size filters apply. This endpoint is suited for cross-tabulation analysis — comparing how, for example, manufacturers with 9–18 employees answered hiring expectations differently from retailers with no employees over a multi-year window.
The NFIB SBET API is a managed, monitored endpoint for nfib-sbet.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when nfib-sbet.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official nfib-sbet.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track the monthly Small Business Optimism Index over a custom date range using get_indicator_data with min_year and max_year.
- Compare hiring expectation survey responses (emp_count_change_expect) across industries and employee size bands using get_filtered_indicators.
- Build regional sentiment dashboards by filtering get_microdata_trends by region (e.g., Northeast vs. Great Lakes) for a given indicator.
- Identify divergence in sales outlook (sales_expect) between small retailers and manufacturers over a multi-year period.
- Populate an economic dashboard with the latest Optimism Index value and trailing 12-month history from get_latest_optimism_index.
- Enumerate all available SBET survey question codes via list_indicators before constructing parameterized data pulls.
- Analyze how businesses with no employees answered business condition expectations differently from those with 39+ employees.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does NFIB provide an official developer API for SBET data?+
Can get_indicator_data return data for indicators other than the Optimism Index?+
get_indicator_data endpoint only returns OPT_INDEX data regardless of what value is passed in the indicator parameter. For other indicator codes such as bus_cond_expect or sales_expect, use get_filtered_indicators or get_microdata_trends, both of which accept indicator codes from list_indicators.Are state-level breakdowns available through the filtering parameters?+
region filter supports broad geographic groupings (Northeast, South Atlantic, East South Central, Great Lakes, Plaines, West South Central) rather than individual U.S. states. The get_microdata_trends response does include a statev field in returned rows, but state-level filtering as an input parameter is not exposed. You can fork this API on Parse and revise it to add a state-level filter endpoint if the underlying data supports it.What does the percent field in get_filtered_indicators represent?+
percent field is the share of survey respondents who selected a given answer code (resp_acode) for a question within the applied filters (industry, region, employee size) for that month. The totalcount field gives the raw number of respondents in that segment, which can be used to assess statistical weight.Does the API expose individual respondent-level microdata or raw survey files?+
get_microdata_trends provides the most granular view available, broken down by question text, answer label, industry, employee size, and region. You can fork this API on Parse and revise it if you need to expose additional aggregation dimensions.