cori.data.bds
Access and analyze Census Bureau Business Dynamics Statistics (BDS) data covering establishment and job dynamics from 1978 to present. Provides tidy access to business dynamics — entries, exits, job creation, job destruction — by geography, industry, establishment age, and firm size.
Drew Rosebush 2026-08-31
Overview
The cori.data.bds package provides access to Census Bureau Business Dynamics Statistics (BDS) data at the county, state, and national level from 1978 to the present. BDS tracks establishment and job dynamics — entries, exits, job creation, and job destruction — across dimensions that most employment sources cannot provide: industry, establishment age, and firm size. This makes it possible to ask not just how many jobs exist in a place, but where those jobs came from and how the underlying economy is churning.
All get_* functions return long-format data — one row per geoid × year × variable — with additional dimension columns for sector, age, and size breakdowns, consistent with the rest of the cori.data ecosystem.
Installation & Quick Start
remotes::install_github("ruralinnovation/cori.data.bds")
library(cori.data.bds)
# Variable definitions
get_bds_codebook()
# Aggregate business dynamics — county level
get_business_dynamics(geography = "county", years = 2018:2023)
# Aggregate employment dynamics — county level
get_employment_dynamics(geography = "county", years = 2018:2023)
# By NAICS sector — state level
get_business_dynamics_by_sector(geography = "state", years = 2018:2023)
# By establishment age — county level
get_business_dynamics_by_age(geography = "county", years = 2018:2023)
What this data tells us about rural America
Business dynamics data captures what employment data misses, like the churning process beneath aggregate counts. A county can hold steady employment while simultaneously losing established firms and gaining new ones or vice versa. Entry and exit rates, job creation by firm age, and establishment counts together describe whether a rural economy is renewing itself or sustaining on its existing institutional base.
Young firms (i.e., businesses five years of age or less) create a disproportionate share of net new jobs in the U.S. economy. Rural communities with active entrepreneurial ecosystems show this pattern clearly, and CORI’s community research documents meaningful business formation growth in communities that have invested in their entrepreneurial infrastructure. Converting new business formation into employment growth takes time, capital, and ecosystem depth. BDS data supports tracking that progression over multiple years rather than treating any single year as definitive.
High exit rates in isolation can look like distress. But exit rates interpreted alongside entry rates tell a more nuanced story about how dynamic economies churn. A community with both high entry and high exit rates may be more economically active than one with low rates of both. The BDS data supports this kind of comparative reading across rural county types and over time.
Industry concentration at the county level reveals the degree to which a rural economy’s employment base is anchored in a narrow set of sectors. Understanding a rural community’s business concentration is the starting point for any economic development strategy, whether the goal is to deepen existing strengths or to build complementary capacity alongside them.
Introduction
Adapted from the Introduction vignette on GitHub.
What is this data?
The Census Bureau’s Business Dynamics Statistics track the birth, death, and employment of U.S. establishments and firms from 1978 to the present. Unlike most employment data sources, BDS lets you ask not just how many jobs exist, but where those jobs came from — new businesses opening, existing businesses expanding, or businesses closing and contracting.
Data is available at the county, state, and national level.
Quick start
library(cori.data.bds)
get_bds_codebook()
# Aggregate — no dimensional breakdown
bd <- get_business_dynamics(geography = "county", years = 2018:2023)
ed <- get_employment_dynamics(geography = "county", years = 2018:2023)
Dimensional breakdowns
BDS measures three mutually exclusive dimensions. Each _by_* function slices the data along one dimension at a time.
# By NAICS sector
bd_sector <- get_business_dynamics_by_sector(geography = "state", years = 2018:2023)
ed_sector <- get_employment_dynamics_by_sector(geography = "state", years = 2018:2023)
Note on NAICS granularity: At the county level, data is limited to 20 major 2-digit NAICS sectors. At state and national level, the Census API provides considerably more detail — 2-, 3-, and 4-digit codes across approximately 390 categories.
# By establishment age
bd_age <- get_business_dynamics_by_age(geography = "county", years = 2018:2023)
ed_age <- get_employment_dynamics_by_age(geography = "county", years = 2018:2023)
# By firm size (mutually exclusive groups: 1-19, 20-499, 500+)
bd_size <- get_business_dynamics_by_size(geography = "county", years = 2018:2023)
ed_size <- get_employment_dynamics_by_size(geography = "county", years = 2018:2023)
Filtering by geography and variable
# Specific counties
rural_counties <- get_employment_dynamics(
geoids = c("33009", "33011", "33013"),
years = 2010:2023
)
# Specific variables only
net_jobs <- get_employment_dynamics(
geography = "county",
years = 2018:2023,
variables = c("net_job_creation", "net_job_creation_rate")
)
Rural vs. nonrural comparison
library(dplyr)
library(ruraldefinitions)
county_ed <- get_employment_dynamics(geography = "county", years = 2018:2023)
county_ed |>
left_join(select(cbsa_2023, geoid, is_rural), by = "geoid") |>
filter(!is.na(is_rural)) |>
group_by(year, is_rural) |>
summarize(
avg_job_creation_rate = mean(job_creation_rate, na.rm = TRUE),
avg_job_destruction_rate = mean(job_destruction_rate, na.rm = TRUE),
avg_net_job_creation = mean(net_job_creation_rate, na.rm = TRUE),
.groups = "drop"
)
Related
Dataset: Census Business Dynamics Statistics
Package: cori.data — meta-package that includes
cori.data.bdsPackage: cori.data.bfs — business applications as a leading indicator; pairs with BDS for the full formation-to-employment story
Package: ruraldefinitions — rural/nonrural classification used in comparison examples
Project: Rural Economic Outlook — BDS is a core input to CORI’s multi-dataset economic analysis
NOTE Data attribution: Business Dynamics Statistics are produced by the U.S. Census Bureau. When citing analysis using this package, reference: U.S. Census Bureau, Business Dynamics Statistics, www.census.gov/programs-surveys/bds.