Census API

U.S. Census Bureau Application Programming Interface with Python

The Census Bureau API provides access to a wide range of economic indicators, including manufacturing, trade, and business data. This tutorial demonstrates how to retrieve data from the M3 Manufacturers' Shipments, Inventories, and Orders survey using Python.

The example below retrieves the value of new orders for nondefense capital goods excluding aircraft. This serves as a proxy for new investment in business equipment and is a closely watched indicator of business investment trends.

Background

Census Bureau

The U.S. Census Bureau collects data on manufacturing activity through several surveys. The M3 survey provides monthly estimates of shipments, inventories, and orders for domestic manufacturing establishments.

API Documentation

Information on what is required to make the API call is available in the variables documentation. The list of individual series codes is in the code list PDF.

Python

This example uses Python 3 and the requests and pandas packages.

Example: Nondefense Capital Goods Orders

Setup

The Census API key is stored locally in a file called config.py. You can register for a free API key at the Census Bureau website.

In[1]:

import requests
import pandas as pd
import config
key = config.census_key

Build the API URL

In this example, category_code is NXA which represents nondefense capital goods excluding aircraft. The data_type_code is the seasonally adjusted value, VS. Data are retrieved for the period from 2022 onward.

In[2]:

base = 'https://api.census.gov/data/timeseries/eits/advm3'
param = 'cell_value,time_slot_id'
time = '&time=from+2022'
cat = '&category_code=NXA'
dtc = '&data_type_code=VS'
oth = '&for=us&seasonally_adj=yes'

url = f'{base}?get={param}&key={key}{cat}{dtc}{time}{oth}'

Request data from the API

Request data from the API and interpret the result as JSON. This will convert the JSON response into a Python list of lists.

In[3]:

r = requests.get(url).json()

Convert to pandas DataFrame

Read the results into a pandas DataFrame. The first row (index 0) contains the headers. Convert the dates to datetime format and calculate the 12-month growth rate in percent.

In[4]:

df = pd.DataFrame(r[1:], columns=r[0])
df.index = pd.to_datetime(df['time'] + '-01')
df.index.name = ''
df = df.sort_index()
data = df['cell_value'].astype('float').pct_change(12) * 100

Plot the results

Create a line plot showing the 12-month percent change since 2024.

In[5]:

title = ('New Orders: Nondefense capital goods excluding aircraft,'+
         '\n12-month percent change')
data.loc['2024':].plot(title=title)
plt.axhline(0, lw=0.5, color='gray', zorder=0)
plt.show()

Out[5]:

Census M3 New Orders Growth Rate

Conclusion

The Census API provides straightforward access to key manufacturing and trade indicators. By adjusting the category_code and data_type_code parameters, you can retrieve various series from the M3 survey, including shipments, inventories, and orders across different product categories.

Back to Python Examples