# Factory Orders & Shipments API — Census M3 Manufacturing Data (`nexgensignal/census-m3-manufacturers-shipments-orders-observations`) Actor

US Census M3 manufacturing data: factory shipments, new orders, unfilled orders and inventories by industry, durable goods included, monthly since 1992, adjusted and not. Filter by industry, data type and month. No API key. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/census-m3-manufacturers-shipments-orders-observations.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 m3 manufacturing observations

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 📦 Factory Orders & Shipments API — Census M3 Manufacturing Data

Get the U.S. Census Bureau's M3 survey — Manufacturers' Shipments, Inventories, and Orders, the source of the monthly factory orders and durable goods reports — as clean records: value of shipments, new orders, unfilled orders, inventories by stage, inventory and unfilled-order ratios and monthly percent changes, for 87 industry categories, seasonally adjusted and not, monthly since 1992.

Economists, traders, manufacturers and analysts use M3 to read demand and inventories across US industry. Census publishes it as one file that refers to industries and data types by number; this actor joins those lookups so each record names the industry, the measure and its unit — no spreadsheet work, no API key.

The unit of output is one observation (one industry, data type, adjustment and month). You pay per observation delivered; a run that finds nothing costs nothing.

### 📊 Sample Output

![Table of Census M3 observations: total manufacturing new orders, seasonally adjusted, monthly, in millions of dollars.](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/census-m3-manufacturers-shipments-orders-observations.png)

| period | category | data_type | value | seasonally_adjusted |
|---|---|---|---|---|
| 2026-08 | Total Manufacturing | New Orders | 663491 | true |
| 2026-07 | Total Manufacturing | New Orders | 662837 | true |
| 2026-06 | Total Manufacturing | New Orders | 657790 | true |
| 2026-05 | Total Manufacturing | New Orders | 658836 | true |
| 2026-04 | Total Manufacturing | New Orders | 665895 | true |

Rows from live run `o7trED7BQS47cbSt5` on Apify (input: categories MTM and NXA, data type NO, seasonally adjusted, 40 records). Notice the newest month first and the industry and measure named on every row (millions of dollars).

### ✅ What you get

Every field of each record:

- `record_id` — unique per observation: category, data type, adjustment, geography and month.
- `period`, `period_label` — month as `2026-08` and as published (`Aug-2026`).
- `category_code`, `category` — M3 category, e.g. `MTM` = Total Manufacturing.
- `data_type_code`, `data_type` — e.g. `NO` = New Orders, `VS` = Value of Shipments.
- `error_type_code`, `error_type` — sampling-error measures — empty for M3, which publishes none.
- `unit_code`, `unit` — e.g. `MLN$` = Millions of Dollars, `RATIO`, `PCT`.
- `seasonally_adjusted` — true for seasonally adjusted rows.
- `geography_code`, `geography` — `US` = U.S. Total.
- `value`, `value_as_published` — the value as a number and exactly as published (Census asks that precision not be altered).
- `data_updated_on` — when Census last updated the file.
- `program` — the originating program name.
- `source`, `source_dataset`, `licence`, `attribution`, `observed_at` — provenance on every record: Census and the program, the file and its update time, the licence line with Census' attribution requirement quoted, the attribution, and the UTC read time.

### ⚙️ Sample inputs

**1. Store example — total manufacturing new orders**

```json
{
  "categoryCodes": ["MTM"],
  "dataTypes": ["NO"],
  "adjustment": "seasonally_adjusted",
  "maxRecords": 10
}
```

The 10 newest months of seasonally adjusted new orders for total manufacturing; about $0.50 on the Free plan.

**2. Narrowed — core capital goods orders and shipments since 2024**

```json
{
  "categoryCodes": ["NXA"],
  "dataTypes": ["NO", "VS"],
  "adjustment": "seasonally_adjusted",
  "periodFrom": "2024-01",
  "maxRecords": 200
}
```

Nondefense capital goods excluding aircraft (widely watched as a business-investment gauge): new orders and shipments from January 2024.

**3. Bulk — latest month of every series**

```json
{
  "periodFrom": "2026",
  "latestOnly": true,
  "maxRecords": 3000
}
```

One record per series (industry × data type × adjustment): its newest month.

Input fields:

| Field | Meaning |
|---|---|
| `categoryCodes` | M3 category codes, e.g. `MTM`, `MDM`, `MNM`, `NXA`, `36S` |
| `categoryContains` | every word of an entry in the category name, e.g. `aircraft` |
| `dataTypes` | `VS`, `NO`, `UO`, `TI`, `MI`, `WI`, `FI`, `IS`, `US` and the `MPC…` percent changes |
| `adjustment` | `both`, `seasonally_adjusted`, `not_seasonally_adjusted` |
| `periodFrom` / `periodTo` | a month (`2024-06`) or a year |
| `latestOnly` | one record per series: its newest month |
| `order` | `newest_first` (reads the small file to the end) or `oldest_first` (streams and stops at the cap) |
| `maxRecords` | most observations delivered and billed (default 1,000) |

### 🧾 JSON sample record

```json
{
  "record_id": "M3:MTM:NO:SA:US:2026-08",
  "period": "2026-08",
  "period_label": "Aug-2026",
  "category_code": "MTM",
  "category": "Total Manufacturing",
  "data_type_code": "NO",
  "data_type": "New Orders",
  "error_type_code": null,
  "error_type": null,
  "unit_code": "MLN$",
  "unit": "Millions of Dollars",
  "seasonally_adjusted": true,
  "geography_code": "US",
  "geography": "U.S. Total",
  "value": 663491,
  "value_as_published": "663491",
  "data_updated_on": "Friday, 02-Oct-26 09:02:34 EDT",
  "program": "Manufacturers' Shipments, Inventories, and Orders (M3)",
  "source": "U.S. Census Bureau — Manufacturers' Shipments, Inventories, and Orders (M3) Survey (economic indicator time-series file M3-mf.csv)",
  "source_dataset": "M3-mf.zip (M3-mf.csv) from census.gov/econ_getzippedfile/?programCode=M3, data updated Friday, 02-Oct-26 09:02:34 EDT",
  "licence": "U.S. government work, not subject to copyright in the United States (17 U.S.C. § 105). Census Bureau file README: \"All products developed using these data files must attribute the datasource as the U.S. Census Bureau and must contain the originating program name.\"",
  "attribution": "Source: U.S. Census Bureau, Manufacturers' Shipments, Inventories, and Orders (M3) Survey",
  "observed_at": "2026-10-04T05:12:33Z"
}
```

### 🔧 How it works

1. **Robots check.** `www.census.gov/robots.txt` is read on every run; its rules for all crawlers disallow only `/search-results.html`, so the file path is allowed. A real disallow would stop the run with nothing charged.

2. **Streamed file.** The actor opens Census' download link `census.gov/econ_getzippedfile/?programCode=M3` and decompresses the ZIP as it arrives. The lookup sections at the top of the file (categories, data types, geography, time periods) are read first; the data rows follow and are joined to them, so records carry names, not index numbers.

3. **Filter, deliver, charge.** Rows are checked against your categories, data types, adjustment and month window. With `oldest_first` the actor delivers as it reads and stops at `maxRecords`; with `newest_first` (the default) it reads the whole file — it is 2.6 MB compressed and takes seconds — then delivers each series newest month first. Every batch is charged after it is delivered.

4. **Receipt.** `RUN_RECEIPT` records the file, Census' "data updated on" time, rows read and matched, and delivered and charged counts.

No login, API key, proxy or bot workaround — one public Census file, and no personal data in it.

### 💰 Pricing example

Per observation delivered, no start fee, no monthly charge:

| Apify plan | Price per observation |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

- 10 observations (the Store example): $0.50 on the Free plan, $0.335 on Gold.
- 1,000 observations (the default cap): $50 on Free, $45 on Bronze, $40 on Silver, $33.50 on Gold.

**Coverage and size.** Live count from the file read on 3–4 October 2026 (M3-mf.zip, 2.57 MB compressed, M3-mf.csv 11.6 MB; data updated Friday, 2 October 2026 09:02:34 EDT): **603,178 observations** — 87 industry categories, 16 data types, U.S. total, January 1992 to August 2026, half seasonally adjusted (301,589) and half not (301,589). The planning index counted 603,178 rows — they agree. A filter is required (categories, a name word, data types or a start month); a whole-file read takes seconds, and a full pull is 603,178 records, billed per observation.

### ⚖️ Legal & ToS

Data: U.S. Census Bureau, Manufacturers' Shipments, Inventories, and Orders (M3) Survey, economic-indicator time-series file. Works of the U.S. government are not subject to copyright in the United States (17 U.S.C. § 105). The README inside Census' file says: "All products developed using these data files must attribute the datasource as the U.S. Census Bureau and must contain the originating program name." Every record carries that attribution and the program name.

The actor reads only this public file at Census' published download link with a declared User-Agent; `www.census.gov/robots.txt` allows the path and is checked on every run. No login, key, proxy or form. Industry aggregates only — no personal data (the README's contact address is never copied).

This actor is not affiliated with or endorsed by the Census Bureau. Current-month M3 figures are preliminary and are revised in later months, as Census notes in the file.

### ❓ FAQ

**Do I need a Census API key?**
No. The actor reads Census' public download file, which needs no key or registration.

**Why must I give a filter?**
The file holds 603,178 observations; a filter keeps runs fast and bills only what you asked for. An unfiltered run is refused with a clear message.

**Is this the durable goods report?**
It is the M3 survey behind both the advance durable goods report and the full factory orders report: durable goods are category `MDM`, core capital goods `NXA`.

**How fresh is the data?**
As fresh as Census' file: every record carries Census' "data updated on" time. The latest month is preliminary and revised later.

**Why are some values percentages or ratios?**
Data types `IS` and `US` are ratios and the `MPC…` types are monthly percent changes; the `unit` field says which.

### 🆘 Troubleshooting

- **0 records** — category codes are short codes such as `MTM` or `36S`; check the data type code (e.g. `NO`).
- **Both adjusted and unadjusted rows** — set `adjustment` to `seasonally_adjusted` or `not_seasonally_adjusted`.
- **Oldest months came first** — that is `oldest_first`; use the default `newest_first`.
- **SOURCE UNAVAILABLE message** — the server did not answer after three tries; nothing was charged — run again later.
- **CAPPED message** — your maximum total charge was reached; raise it in the run options.

### 🔗 Related Actors

- [Sweden Industry Turnover Monthly - SCB](https://apify.com/nexgensignal/se-industry-turnover-month-observations) — monthly industry turnover in Sweden.
- [Eurostat Business & Consumer Confidence — Monthly](https://apify.com/nexgensignal/eurostat-business-confidence) — European business and consumer confidence.
- [UK GDP Four-Decimal Time Series - ONS](https://apify.com/nexgensignal/uk-gdp-four-decimal-time-series) — UK GDP time series.
- [Sweden GDP by Industry & Quarter - SCB](https://apify.com/nexgensignal/se-gdp-industry-quarter-observations) — GDP by industry for Sweden.

🏢 **About NexGen Signal** — official-source data products from government and regulator publications. Browse the catalog: [apify.com/nexgensignal](https://apify.com/nexgensignal)

### ⭐ Found this useful?

If this actor saved you time, a rating on its Apify Store page helps other buyers find it.

Part of NexGen Signal — official-source data products.

# Actor input Schema

## `categoryCodes` (type: `array`):

M3 category codes, e.g. MTM total manufacturing, MDM durable goods, MNM nondurable goods, NXA nondefense capital goods excluding aircraft, 36S transportation equipment.

## `categoryContains` (type: `array`):

Categories whose name contains every word of an entry, e.g. aircraft.

## `dataTypes` (type: `array`):

VS shipments, NO new orders, UO unfilled orders, TI total inventories, MI/WI/FI materials, work-in-process and finished-goods inventories, IS inventories-to-shipments ratio, US unfilled-orders-to-shipments ratio, MPCVS/MPCNO/… monthly percent changes.

## `adjustment` (type: `string`):

Seasonally adjusted rows, not adjusted rows, or both.

## `periodFrom` (type: `string`):

First month wanted: 2024-01 (or a year, 2024).

## `periodTo` (type: `string`):

Last month wanted: 2025-12 (or a year).

## `latestOnly` (type: `boolean`):

One record per series (industry × data type × adjustment): its newest month.

## `order` (type: `string`):

newest_first reads the whole file (it is small) and returns each series newest month first; oldest_first streams in file order and stops at maxRecords.

## `maxRecords` (type: `integer`):

Most observations delivered and billed in this run. One record = one value for one month.

## Actor input object example

```json
{
  "categoryCodes": [
    "MTM"
  ],
  "categoryContains": [],
  "dataTypes": [
    "NO"
  ],
  "adjustment": "seasonally_adjusted",
  "latestOnly": false,
  "order": "newest_first",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered (and billed) observations.

## `receipt` (type: `string`):

File used, rows matched, delivered and charged counts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categoryCodes": [
        "MTM"
    ],
    "dataTypes": [
        "NO"
    ],
    "adjustment": "seasonally_adjusted",
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/census-m3-manufacturers-shipments-orders-observations").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categoryCodes": ["MTM"],
    "dataTypes": ["NO"],
    "adjustment": "seasonally_adjusted",
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/census-m3-manufacturers-shipments-orders-observations").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categoryCodes": [
    "MTM"
  ],
  "dataTypes": [
    "NO"
  ],
  "adjustment": "seasonally_adjusted",
  "maxRecords": 10
}' |
apify call nexgensignal/census-m3-manufacturers-shipments-orders-observations --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/census-m3-manufacturers-shipments-orders-observations"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/b9COSP78cMGl21y7u/builds/McXwOYpPfLfKLp1ZR/openapi.json
