# FMCSA Household Goods Complaints Scraper (`parseforge/fmcsa-household-goods-complaints-scraper`) Actor

Scrape FMCSA household goods mover complaints by category and year, plus USDOT, MC, safety ratings and crashes. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/fmcsa-household-goods-complaints-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.53 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 📦 FMCSA Household Goods Complaints Scraper

> 🚀 **Export moving company complaint records in seconds.** 58 fields per carrier, 13 complaint categories, four calendar years of history, and the SAFER safety snapshot in the same row.

Every interstate moving company in the United States has to register with the Federal Motor Carrier Safety Administration, and every consumer complaint that FMCSA rules actionable lands in the National Consumer Complaint Database. FMCSA publishes the roll up of those complaints on its Protect Your Move mover record pages, one carrier at a time, with no export and no API. This Actor walks that register for you and returns it as a table.

Each row joins two public FMCSA surfaces: the Protect Your Move carrier record (identity, address, fleet, safety rating, and the household goods complaint history broken down by category and by year) and the SAFER Company Snapshot (legal name, DBA name, operating authority, USDOT status, power units, drivers, roadside inspections, out of service rates and reportable crashes). Coverage runs across all 50 states plus Washington DC. Florida alone lists 2,593 registered household goods movers, California 2,046, and a single state search returns the entire list in one request.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Moving brokers and van line networks | Vet carrier partners before signing them |
| Consumer protection lawyers and advocates | Build evidence on repeat offender movers |
| Insurers and underwriters | Score household goods risk by complaint and crash record |
| Relocation and HR mobility teams | Pick vetted movers for employee relocations |
| Journalists and researchers | Track moving fraud patterns by state and category |
| Competitive intelligence teams | Benchmark a mover against its regional peers |

### 📋 What the FMCSA Household Goods Complaints Scraper does

> 💡 **Why it matters:** a mover with 245 complaints and a mover with zero look identical on a quote page. The federal record is the only place where the difference is visible, and until now you had to open it one carrier at a time.

- Searches the FMCSA Protect Your Move register by state, by company name, by USDOT number or by MC docket number.
- Opens each carrier record and reads the household goods complaint history: the total per year and the full category by year matrix.
- Flattens 13 complaint categories into their own columns: operating authority, insurance, shipment documents, estimates and final charges, weighing, hostage goods, pickup and delivery, loss and damage, claim settlement, other commercial, owner operator leasing, deceptive business practices and whistleblower.
- Pulls the SAFER Company Snapshot for the same USDOT number so legal name, DBA name, authority status, inspections and crashes ride along in the same row.
- Filters out carriers with no complaint record when you only want the ones that have one.
- Deduplicates on USDOT number, so a carrier that appears in several searches is only charged once.

### 🎬 Full Demo (🚧 Coming soon)

A walkthrough video is in production. Until then the Output section below shows exactly what a row looks like.

### 📊 Output

Every row is one registered household goods mover.

| Field | Type | Description |
| --- | --- | --- |
| 🏢 `legalName` | string | Legal name on the SAFER record |
| 🏷 `dbaName` | string | Doing business as name, or N/A |
| 🆔 `usdotNumber` | string | USDOT number, the dedupe key |
| 📄 `mcNumber` | string | MC docket number |
| 📑 `ffNumber` | string | Freight forwarder docket number |
| 🔗 `url` | string | FMCSA Protect Your Move carrier page |
| 🔗 `saferUrl` | string | SAFER Company Snapshot page |
| 📦 `hhgAuthorityStatus` | string | Authorized or Not Authorized to move household goods |
| ⚖️ `operatingAuthorityStatus` | string | Full authority grant text from SAFER |
| 🚦 `usdotStatus` | string | ACTIVE, INACTIVE or OUT-OF-SERVICE |
| 🏭 `entityType` | string | Carrier, broker, freight forwarder or a combination |
| ⛔ `outOfServiceDate` | string | Earliest out of service order date |
| 🛡 `safetyRating` | string | Satisfactory, Conditional, Unsatisfactory or Not Rated |
| 📅 `safetyRatingDate` | string | Date of the compliance review |
| 📣 `totalComplaints` | integer | Complaints across the four year window |
| 🗓 `complaintYearsCovered` | string | First and last year with complaints |
| 🥇 `topComplaintCategory` | string | Category with the most complaints |
| 📊 13 `complaints*` columns | integer | Complaint count per category |
| 📍 `streetAddress`, `city`, `state`, `zipCode` | string | Headquarters address |
| ☎️ `phone`, `fax` | string | Published contact numbers |
| 🚛 `numberOfTrucks`, `numberOfTractors`, `numberOfTrailers` | integer | Fleet declared to FMCSA |
| 🔧 `powerUnits`, `drivers` | integer | SAFER fleet and driver counts |
| 📆 `mcs150FormDate`, `mcs150Mileage`, `mcs150MileageYear` | mixed | Latest biennial update |
| 🔍 `vehicleInspections`, `driverInspections`, `hazmatInspections` | integer | Roadside inspections, 24 months |
| 📉 `vehicleOutOfServicePercent`, `driverOutOfServicePercent` | string | Out of service rates |
| 💢 `crashesFatal`, `crashesInjury`, `crashesTow`, `crashesTotal` | integer | Reportable crashes, 24 months |
| 🔢 `dunsNumber` | string | DUNS number when SAFER carries one |
| 🕰 `dataAsOfDate` | string | FMCSA complaint extract date |
| 📊 `complaintsByYear` | array | Per year totals with the category split |
| 📦 `cargoCarried` | array | Cargo classes the carrier is registered for |
| 🏷 `operationClassification` | array | Operation classes such as Auth. For Hire |
| 🕒 `scrapedAt` | string | ISO timestamp of the extraction |
| ❌ `error` | string | Populated only on a failed page |

Three real records from a live run:

```json
[
  {
      "legalName": "AMERICAN VAN LINES INC",
      "dbaName": "N/A",
      "usdotNumber": "614506",
      "mcNumber": "294798",
      "ffNumber": "N/A",
      "url": "https://ai.fmcsa.dot.gov/hhg/SearchDetails.asp?ads=a&id=31138296&id2=30817820&f=ads%3Da%26search%3D5%26state%3DFL%26sort%3D7d",
      "saferUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&original_query_param=NAME&query_string=614506&original_query_string=",
      "hhgAuthorityStatus": "Authorized",
      "operatingAuthorityStatus": "AUTHORIZED FOR: Motor Carrier of Property (Except Household Goods) Motor Carrier of Household Goods",
      "usdotStatus": "ACTIVE",
      "entityType": "CARRIER",
      "outOfServiceDate": "N/A",
      "safetyRating": "Satisfactory",
      "safetyRatingDate": "6/20/2008",
      "totalComplaints": 245,
      "complaintYearsCovered": "2023-2026",
      "topComplaintCategory": "Pickup and Delivery",
      "complaintsOperatingAuthority": 4,
      "complaintsInsurance": 2,
      "complaintsShipmentDocuments": 61,
      "complaintsEstimatesFinalCharges": 102,
      "complaintsWeighing": 41,
      "complaintsHostageGoods": 55,
      "complaintsPickupAndDelivery": 111,
      "complaintsLossAndDamage": 72,
      "complaintsClaimSettlement": 59,
      "complaintsOtherCommercial": 0,
      "complaintsOwnerOperatorLeasing": 0,
      "complaintsConsumerDeceptivePractices": 66,
      "complaintsWhistleblower": 0,
      "streetAddress": "1351 NW 22ND ST",
      "city": "POMPANO BEACH",
      "state": "FL",
      "zipCode": "33069",
      "phone": "(954)630-0316",
      "fax": "(954) 449-7604",
      "numberOfTrucks": 35,
      "numberOfTractors": 46,
      "numberOfTrailers": 70,
      "powerUnits": 81,
      "drivers": 68,
      "mcs150FormDate": "06/23/2026",
      "mcs150Mileage": 182454120,
      "mcs150MileageYear": 2025,
      "vehicleInspections": 52,
      "driverInspections": 101,
      "hazmatInspections": 0,
      "vehicleOutOfServicePercent": "21.2%",
      "driverOutOfServicePercent": "6.9%",
      "crashesFatal": 0,
      "crashesInjury": 1,
      "crashesTow": 0,
      "crashesTotal": 1,
      "dunsNumber": "N/A",
      "dataAsOfDate": "7/31/2026",
      "complaintsByYear": [
        { "year": 2023, "totalComplaints": 24, "categories": [{ "category": "Operating Authority", "complaints": 2 }, { "category": "Shipment Documents", "complaints": 15 }, { "category": "Estimates/Final Charges", "complaints": 14 }, { "category": "Weighing", "complaints": 11 }, { "category": "Hostage Goods", "complaints": 7 }, { "category": "Pickup and Delivery", "complaints": 9 }, { "category": "Loss and Damage", "complaints": 16 }, { "category": "Claim Settlement", "complaints": 10 }, { "category": "Consumer Complaint", "complaints": 9 }] },
        { "year": 2024, "totalComplaints": 30, "categories": [{ "category": "Operating Authority", "complaints": 2 }, { "category": "Insurance", "complaints": 1 }, { "category": "Shipment Documents", "complaints": 14 }, { "category": "Estimates/Final Charges", "complaints": 20 }, { "category": "Weighing", "complaints": 10 }, { "category": "Hostage Goods", "complaints": 3 }, { "category": "Pickup and Delivery", "complaints": 15 }, { "category": "Loss and Damage", "complaints": 13 }, { "category": "Claim Settlement", "complaints": 13 }, { "category": "Consumer Complaint", "complaints": 18 }] },
        { "year": 2025, "totalComplaints": 70, "categories": [{ "category": "Shipment Documents", "complaints": 25 }, { "category": "Estimates/Final Charges", "complaints": 37 }, { "category": "Weighing", "complaints": 18 }, { "category": "Hostage Goods", "complaints": 18 }, { "category": "Pickup and Delivery", "complaints": 47 }, { "category": "Loss and Damage", "complaints": 22 }, { "category": "Claim Settlement", "complaints": 22 }, { "category": "Consumer Complaint", "complaints": 29 }] },
        { "year": 2026, "totalComplaints": 121, "categories": [{ "category": "Insurance", "complaints": 1 }, { "category": "Shipment Documents", "complaints": 7 }, { "category": "Estimates/Final Charges", "complaints": 31 }, { "category": "Weighing", "complaints": 2 }, { "category": "Hostage Goods", "complaints": 27 }, { "category": "Pickup and Delivery", "complaints": 40 }, { "category": "Loss and Damage", "complaints": 21 }, { "category": "Claim Settlement", "complaints": 14 }, { "category": "Consumer Complaint", "complaints": 10 }] }
      ],
      "cargoCarried": [
          "Household Goods"
      ],
      "operationClassification": [
          "Auth. For Hire"
      ],
      "scrapedAt": "2026-09-08T06:14:14.922Z",
      "error": null
  },
  {
      "legalName": "LANDSTAR RANGER INC",
      "dbaName": "N/A",
      "usdotNumber": "241572",
      "mcNumber": "166960",
      "ffNumber": "N/A",
      "url": "https://ai.fmcsa.dot.gov/hhg/SearchDetails.asp?ads=a&id=31314502&id2=31257042&f=ads%3Da%26search%3D5%26state%3DFL%26sort%3D7d",
      "saferUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&original_query_param=NAME&query_string=241572&original_query_string=",
      "hhgAuthorityStatus": "Authorized",
      "operatingAuthorityStatus": "AUTHORIZED FOR: Freight Forwarder of Property (Except Household Goods), Motor Carrier of Property (Except Household Goods) Motor Carrier of Household Goods",
      "usdotStatus": "ACTIVE",
      "entityType": "CARRIER/FREIGHT FORWARDER",
      "outOfServiceDate": "N/A",
      "safetyRating": "Satisfactory",
      "safetyRatingDate": "5/29/2025",
      "totalComplaints": 4,
      "complaintYearsCovered": "2023-2024",
      "topComplaintCategory": "Other Commercial Complaints",
      "complaintsOperatingAuthority": 0,
      "complaintsInsurance": 0,
      "complaintsShipmentDocuments": 0,
      "complaintsEstimatesFinalCharges": 0,
      "complaintsWeighing": 0,
      "complaintsHostageGoods": 0,
      "complaintsPickupAndDelivery": 0,
      "complaintsLossAndDamage": 0,
      "complaintsClaimSettlement": 0,
      "complaintsOtherCommercial": 2,
      "complaintsOwnerOperatorLeasing": 1,
      "complaintsConsumerDeceptivePractices": 0,
      "complaintsWhistleblower": 2,
      "streetAddress": "13410 SUTTON PARK DRIVE SOUTH",
      "city": "JACKSONVILLE",
      "state": "FL",
      "zipCode": "32224",
      "phone": "(800)872-9400",
      "fax": "N/A",
      "numberOfTrucks": 0,
      "numberOfTractors": 4859,
      "numberOfTrailers": 16825,
      "powerUnits": 10468,
      "drivers": 5771,
      "mcs150FormDate": "04/30/2026",
      "mcs150Mileage": 376901791,
      "mcs150MileageYear": 2025,
      "vehicleInspections": 6219,
      "driverInspections": 10219,
      "hazmatInspections": 1989,
      "vehicleOutOfServicePercent": "18.7%",
      "driverOutOfServicePercent": "0.8%",
      "crashesFatal": 9,
      "crashesInjury": 99,
      "crashesTow": 195,
      "crashesTotal": 303,
      "dunsNumber": "N/A",
      "dataAsOfDate": "7/31/2026",
      "complaintsByYear": [
        { "year": 2023, "totalComplaints": 3, "categories": [{ "category": "Other Commercial Complaints", "complaints": 1 }, { "category": "Whistleblower Complaint", "complaints": 2 }] },
        { "year": 2024, "totalComplaints": 1, "categories": [{ "category": "Other Commercial Complaints", "complaints": 1 }, { "category": "Owner Operator", "complaints": 1 }] }
      ],
      "cargoCarried": [
          "General Freight",
          "Metal: sheets, coils, rolls",
          "Motor Vehicles",
          "Drive/Tow away",
          "Logs, Poles, Beams, Lumber",
          "Mobile Homes",
          "Machinery, Large Objects",
          "Fresh Produce",
          "Liquids/Gases",
          "Intermodal Cont.",
          "Oilfield Equipment",
          "Grain, Feed, Hay",
          "Coal/Coke",
          "Garbage/Refuse",
          "US Mail",
          "Chemicals",
          "Commodities Dry Bulk",
          "Refrigerated Food",
          "Beverages",
          "Paper Products",
          "Utilities",
          "Agricultural/Farm Supplies",
          "Construction",
          "Water Well"
      ],
      "operationClassification": [
          "Auth. For Hire"
      ],
      "scrapedAt": "2026-09-08T06:11:54.519Z",
      "error": null
  },
  {
      "legalName": "BEKINS A-1 MOVERS INC",
      "dbaName": "BMS MOVING & STORAGE",
      "usdotNumber": "716970",
      "mcNumber": "N/A",
      "ffNumber": "6066",
      "url": "https://ai.fmcsa.dot.gov/hhg/SearchDetails.asp?ads=a&id=31410628&id2=30781148&f=ads%3Da%26search%3D5%26state%3DFL%26sort%3D7d",
      "saferUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&original_query_param=NAME&query_string=716970&original_query_string=",
      "hhgAuthorityStatus": "Authorized",
      "operatingAuthorityStatus": "AUTHORIZED FOR: Freight Forwarder of Household Goods, Freight Forwarder of Household Goods, Motor Carrier of Property (Except Household Goods) Motor Carrier of Household Goods",
      "usdotStatus": "ACTIVE",
      "entityType": "CARRIER/SHIPPER/FREIGHT FORWARDER",
      "outOfServiceDate": "N/A",
      "safetyRating": "Not Rated",
      "safetyRatingDate": "N/A",
      "totalComplaints": 1,
      "complaintYearsCovered": "2026-2026",
      "topComplaintCategory": "Pickup and Delivery",
      "complaintsOperatingAuthority": 0,
      "complaintsInsurance": 0,
      "complaintsShipmentDocuments": 0,
      "complaintsEstimatesFinalCharges": 0,
      "complaintsWeighing": 0,
      "complaintsHostageGoods": 0,
      "complaintsPickupAndDelivery": 1,
      "complaintsLossAndDamage": 1,
      "complaintsClaimSettlement": 0,
      "complaintsOtherCommercial": 0,
      "complaintsOwnerOperatorLeasing": 0,
      "complaintsConsumerDeceptivePractices": 1,
      "complaintsWhistleblower": 0,
      "streetAddress": "7357 MERCHANT COURT",
      "city": "SARASOTA",
      "state": "FL",
      "zipCode": "34240",
      "phone": "(630)658-0055",
      "fax": "N/A",
      "numberOfTrucks": 68,
      "numberOfTractors": 16,
      "numberOfTrailers": 142,
      "powerUnits": 84,
      "drivers": 92,
      "mcs150FormDate": "05/12/2026",
      "mcs150Mileage": 1076056,
      "mcs150MileageYear": 2025,
      "vehicleInspections": 22,
      "driverInspections": 30,
      "hazmatInspections": 0,
      "vehicleOutOfServicePercent": "9.1%",
      "driverOutOfServicePercent": "3.3%",
      "crashesFatal": 0,
      "crashesInjury": 0,
      "crashesTow": 2,
      "crashesTotal": 2,
      "dunsNumber": "11-237-6962",
      "dataAsOfDate": "7/31/2026",
      "complaintsByYear": [
        { "year": 2026, "totalComplaints": 1, "categories": [{ "category": "Pickup and Delivery", "complaints": 1 }, { "category": "Loss and Damage", "complaints": 1 }, { "category": "Consumer Complaint", "complaints": 1 }] }
      ],
      "cargoCarried": [
          "Household Goods"
      ],
      "operationClassification": [
          "Auth. For Hire"
      ],
      "scrapedAt": "2026-09-08T06:14:04.988Z",
      "error": null
  }
]
```

### ✨ Why choose this Actor

- **The complaint history is the product.** Other FMCSA Actors return census and authority data. This one returns the National Consumer Complaint Database roll up, split into 13 categories and four years, as flat numeric columns you can sort and rank.
- **Two federal sources joined for you.** Protect Your Move and SAFER are separate systems with separate lookups. One row here carries both, keyed on USDOT number.
- **Honest sentinels.** No empty cells and no nulls. Withheld values read `Not Disclosed`, structurally absent values read `N/A`, and empty arrays stay `[]`, so a CSV import never guesses.
- **State sweeps in one request.** FMCSA returns an entire state list in a single response, so a 2,593 carrier state costs one listing request, not 130 paginated ones.
- **Filter before you pay.** `minTotalComplaints` skips the movers with a clean record, so every delivered row is a carrier that actually has a complaint history.
- **Deduplicated by USDOT number**, so overlapping searches never bill you twice for the same carrier.

### 📈 How it compares to alternatives

| Approach | Complaint history | SAFER safety data | Bulk export | Effort |
| --- | --- | --- | --- | --- |
| Protect Your Move website by hand | Yes, one carrier at a time | No, separate lookup | No | Minutes per carrier |
| SAFER Company Snapshot by hand | No | Yes | No | Minutes per carrier |
| Generic FMCSA census Actors | No | Partial | Yes | Low, but no complaints |
| Review sites and mover directories | Opinion, not federal record | No | Sometimes | Low, unverifiable |
| This Actor | Yes, 13 categories over 4 years | Yes, in the same row | CSV, JSON, Excel, XML | One run |

Stated plainly: FMCSA publishes complaint **counts**, never the text of a complaint, and only for the last four calendar years. It publishes only complaints its Consumer Safety Analysis process marked actionable. A single complaint can be filed under several categories, so category counts can add up to more than the yearly total. Most registered movers have zero complaints. The Actor reports all of this exactly as FMCSA does, with the extract date in `dataAsOfDate`.

### 🚀 How to use

1. Create a free Apify account. New accounts get $5 in free credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Actor and pick your search. Choose one or more states, type company names, or paste USDOT and MC numbers. Leave it all empty and the run samples Florida.
3. Set **Max Items**. Free accounts preview 10 records, paid accounts go up to 1,000,000.
4. Leave **Minimum Total Complaints** at 1 to get only movers with a complaint record, or set it to 0 to sweep every registered carrier.
5. Keep the proxy on United States. FMCSA refuses connections from outside the country.
6. Press **Start**, then download the dataset as CSV, JSON, Excel or XML, or pull it from the API.

### 💼 Business use cases

#### Carrier vetting for moving brokers

Pull every household goods mover in the states you dispatch into, rank by `totalComplaints` divided by `powerUnits`, and drop the outliers from your carrier list before a customer ever sees them. `hostageGoods` and `claimSettlement` counts are the two categories that turn into chargebacks.

#### Consumer protection and litigation support

Build a documented federal record for a mover: complaint counts by category and year, whether FMCSA authorized it to move household goods at all, and its crash and inspection history. Every row links back to the public FMCSA page it came from, so the evidence is verifiable.

#### Insurance and risk underwriting

Score household goods risk on federal signal instead of self reported questionnaires. Combine `complaintsLossAndDamage`, `crashesTotal` and `vehicleOutOfServicePercent` into a single index and reprice the book each month when FMCSA refreshes the extract.

#### Relocation program management

Corporate mobility teams can screen the vendor list every quarter. A mover whose `hhgAuthorityStatus` flipped to Not Authorized or whose `usdotStatus` went out of service is a contract risk you want to catch before moving day.

### 🔌 Automating FMCSA Household Goods Complaints Scraper

- **Make and Zapier**: trigger the Actor on a schedule and route new rows into a CRM, a Google Sheet or a Slack channel.
- **Slack**: post an alert whenever a watched USDOT number crosses a complaint threshold.
- **Airbyte and warehouses**: sync the dataset into BigQuery, Snowflake or Postgres and join it with your own booking data.
- **GitHub Actions**: run a monthly refresh right after the FMCSA extract date changes and commit the diff.
- **Google Drive**: drop a fresh CSV into a shared folder so the operations team always has the current list.
- **Apify API and MCP**: call the Actor from your own service or expose it to an AI agent as a tool.

### 🌟 Beyond business use cases

- **Research**: quantify moving fraud by state, by category and by carrier size across a four year window.
- **Personal**: check the three movers who quoted you before you sign, and see whether any of them is authorized to move household goods at all.
- **Non-profit**: consumer advocacy groups can publish state level scorecards from a federal source instead of anecdotes.
- **Experimentation**: train a model on complaint category mixes to see which ones predict a later authority revocation.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant with web access:

> I want to analyse United States interstate moving companies using the FMCSA Household Goods Complaints Scraper on Apify. Each row has a carrier legal name, DBA, USDOT and MC numbers, household goods authority status, safety rating, complaint counts split across 13 categories over four years, fleet size, roadside inspections and reportable crashes. Suggest five analyses I could run and the columns each one needs.

### ❓ Frequently Asked Questions

#### Where does this data come from?

Two public FMCSA systems: the Protect Your Move household goods mover record at ai.fmcsa.dot.gov and the SAFER Company Snapshot at safer.fmcsa.dot.gov. Both are open to the public without an account.

#### Do I get the text of each complaint?

No. FMCSA publishes counts by category and year, never the narrative of an individual complaint. Complaint details are visible only to the company itself inside the National Consumer Complaint Database.

#### How far back does the complaint history go?

Four calendar years, which is the window FMCSA publishes. Older complaints drop off the public record.

#### Why do the category numbers add up to more than the total?

One complaint can be filed under several categories at once, so FMCSA counts it in each. The yearly total counts distinct complaints. This is FMCSA's own footnote, and the Actor reproduces both numbers unchanged.

#### Which complaints are counted?

Only those FMCSA marked as determined actionable through its Consumer Safety Analysis process, filed against moving company cases. Complaints still under review are not published.

#### How fresh is the data?

FMCSA refreshes the complaint extract monthly. Every row carries `dataAsOfDate` with the exact extract date, and the SAFER safety figures are current as of the day you run it.

#### Why do most carriers show zero complaints?

Because most registered movers genuinely have none. Set **Minimum Total Complaints** to 1 and the run skips them, so you only pay for carriers that have a record.

#### Do I need a proxy?

Yes, and it is on by default. FMCSA answers 403 to any request from outside the United States, so the Actor routes every request through a United States address.

#### Can I look up one specific mover?

Yes. Put its USDOT number in **USDOT Numbers** or its MC docket number in **MC Numbers** and the run returns that single carrier.

#### How many carriers can one state return?

The full state register in one request. Florida lists 2,593 registered household goods movers, California 2,046, Alaska 51. There is no pagination and no page size limit to work around.

#### What does "Not Authorized" mean on a mover I found?

It means FMCSA does not currently grant that entity household goods operating authority for interstate moves. Some of those carriers still advertise interstate moving. That gap is one of the more useful signals in the dataset.

#### Can I export to Excel?

Yes. Every dataset downloads as CSV, JSON, Excel or XML, or streams from the Apify API.

### 🔌 Integrate with any app

The dataset is available through the Apify API the moment a run finishes, in JSON, CSV, Excel and XML. Use the Apify integrations for Make, Zapier, Slack, Airbyte, Google Drive, GitHub and webhooks, or call the REST API directly from your own stack. The Actor also works as an MCP tool for AI agents.

### 🔗 Recommended Actors

- [FMCSA Carrier Safety Scraper](https://apify.com/parseforge/fmcsa-carrier-safety-scraper) for the wider motor carrier universe beyond household goods.
- [Sunbiz Florida & Multi-State Business Registry Scraper](https://apify.com/parseforge/sunbiz-florida-business-scraper) to match a mover to its corporate registration and officers.
- [TruckPaper Commercial Truck Scraper](https://apify.com/parseforge/truckpaper-scraper) for equipment listings and fleet market data.
- [DAT Freight Rates Scraper](https://apify.com/parseforge/dat-freight-rates-scraper) for lane level freight rate benchmarks.
- [FreightWaves News Scraper](https://apify.com/parseforge/freightwaves-scraper) to track enforcement and industry news around a carrier.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more public record and logistics data extractors.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by, or sponsored by the Federal Motor Carrier Safety Administration or the United States Department of Transportation. It collects only publicly available data published on FMCSA websites.

# Actor input Schema

## `startUrls` (type: `array`):

Optional. Paste FMCSA Protect Your Move result or company pages, for example https://ai.fmcsa.dot.gov/hhg/SearchResults.asp?ads=a\&search=5\&state=TX

## `stateIds` (type: `array`):

Return every registered household goods mover headquartered in these states. Covers all 50 states plus Washington DC.

## `searchTerms` (type: `array`):

Search movers by name, for example VAN LINES or ALLIED. Case insensitive, one FMCSA search per term.

## `usdotIds` (type: `array`):

Look up specific carriers by USDOT number, for example 1369156.

## `mcIds` (type: `array`):

Look up specific carriers by MC docket number, for example 1128144.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `minTotalComplaints` (type: `integer`):

Only deliver carriers with at least this many household goods complaints in the last four years. Set 0 to keep every registered mover.

## `companyNameMatch` (type: `string`):

How each company name is matched against the FMCSA register.

## `sortBy` (type: `string`):

Order the FMCSA result list before the Actor walks it. Fleet size descending puts the largest movers first.

## `proxyConfiguration` (type: `object`):

Proxy used for every FMCSA request. Keep the United States setting or the source refuses the connection.

## Actor input object example

```json
{
  "startUrls": [],
  "stateIds": [
    "FL"
  ],
  "maxItems": 10,
  "minTotalComplaints": 1,
  "companyNameMatch": "contains",
  "sortBy": "fleetSizeDesc",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountryCode": "US"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Every carrier field in the run, laid out as a table

## `fullData` (type: `string`):

Complete dataset with all 60 fields

# 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 = {
    "startUrls": [],
    "stateIds": [
        "FL"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/fmcsa-household-goods-complaints-scraper").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 = {
    "startUrls": [],
    "stateIds": ["FL"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/fmcsa-household-goods-complaints-scraper").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 '{
  "startUrls": [],
  "stateIds": [
    "FL"
  ],
  "maxItems": 10
}' |
apify call parseforge/fmcsa-household-goods-complaints-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/fmcsa-household-goods-complaints-scraper"
        }
    }
}
```

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/6tOLp0H3ovi37cwt8/builds/04o91W8uk6CU2xJE5/openapi.json
