# DOE Appliance Certification (CCMS) Search & Monitor (`prudent_businessman/doe-ccms-appliance-certification-search`) Actor

Search and bulk-export the US Department of Energy Compliance Certification Database: 4.7M certified models of appliances, HVAC, chargers, power supplies, lighting, water heaters, faucets and more. Look up brands and model numbers, get efficiency specs, and track newly certified or removed models.

- **URL**: https://apify.com/prudent_businessman/doe-ccms-appliance-certification-search.md
- **Developed by:** [Benningfield Data](https://apify.com/prudent_businessman) (community)
- **Categories:** E-commerce, Lead generation, Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## DOE Appliance Certification Database (CCMS) Search, Export & Monitor

Search, bulk-export and monitor the **US Department of Energy Compliance Certification Database (CCMS)**. It holds **4.7 million certified models** across **73 product groups**: central AC and heat pumps, furnaces, water heaters, refrigerators, dishwashers, washers and dryers, TVs, battery chargers, external power supplies, LED lamps, ceiling fans, faucets, showerheads, pumps, transformers, commercial refrigeration and more.

In the US, a covered product must be certified to DOE before it can be sold. This Actor turns the official database into clean JSON, CSV or Excel, with a readable `specs` object for each model. Look up brands and model numbers in bulk. Export a whole product group. Or schedule it to catch **newly certified and removed models**.

> Data source: [regulations.doe.gov/certification-data](https://www.regulations.doe.gov/certification-data/). These are public data with no account or key. The Actor uses the same public search service as the site's own "Download all data in CSV" button. It pages politely (1,000 records per request) and backs off when DOE throttles.

### Who uses this

- **Amazon, Walmart, Home Depot and DTC sellers of appliances, chargers, power adapters and lighting.** Check before listing or importing that a supplier's model is actually certified. Undeclared or uncertified models get delisted and fined.
- **Importers, distributors and sourcing agents.** Vet a factory's catalog against DOE in one run.
- **Competitive intelligence.** See every model a competitor has certified, with efficiency specs, and get an alert when it certifies new ones. This is often an early signal of a launch.
- **Utility rebate programs, HVAC contractors and energy consultants.** Pull certified efficiency ratings (SEER2, AFUE, UEF, kWh/yr and others) for whole categories.
- **Compliance consultants and test labs.** Find the brands in a category and track what they certify. Lead lists of manufacturers.

### Features

- Filter by **product group** (all 73, chosen from a dropdown), **brand** (case-insensitive and partial, e.g. `anker` finds `ANKER` and `Anker`), **model numbers** (basic or individual, with `*` and `?` wildcards) and **product class**.
- Search **all product groups at once** by model number.
- **Readable specs.** DOE field names like `Annual_Energy_Use__Kilowatt_Hours_Year__d` become `"Annual Energy Use (Kilowatt Hours Year)": 155`.
- Waiver and exception-relief flags as booleans.
- **Monitor mode.** It outputs only models **added** since the last run, plus models **removed** (no longer certified). DOE publishes no certification dates, so a scheduled diff is the only way to see what is new.
- **Bulk export** of any size (a full group, e.g. 20,000 battery chargers), with automatic paging and retries.
- An optional `raw` record with the original DOE fields, and a raw Solr query option for power users.

### Input

| Field | Type | Description |
|---|---|---|
| `product_groups` | string\[] (select) | DOE product groups. Empty means all groups. |
| `brands` | string\[] | Brand names, case-insensitive contains. |
| `model_numbers` | string\[] | Basic or individual model numbers. Wildcards `*` and `?` work. |
| `product_class` | string | Product class or code description contains this text. |
| `solr_query` | string | Advanced: a raw Solr `q`. |
| `max_items` | integer | Cap on output. Default 1000; 0 means unlimited. |
| `only_new` | boolean | Monitor mode. Only added models (and removed ones, see below). |
| `report_removed` | boolean | In monitor mode, also output removed models. Default true. |
| `state_store_name` | string | Named store for monitor state. Use one per monitor. |
| `include_raw_fields` | boolean | Add the original DOE record. |
| `request_delay_ms` | integer | Delay between pages. Default 300 ms. |

Example: check a supplier's models across all groups.

```json
{ "model_numbers": ["A2633", "A2147*", "PB-*"], "max_items": 0 }
```

Example: weekly alert for new Anker and UGREEN charger certifications.

```json
{ "product_groups": ["Battery Chargers Other Than UPSs", "External Power Supplies - Other Than Switch-Selectable and Adaptive Single-Voltage External Power Supplies"], "brands": ["anker", "ugreen"], "only_new": true, "max_items": 0 }
```

### Output

There is one item per certified model record. See `sample_output.json` and `sample_output_model_lookup.json`. Below is a real record:

```json
{
  "id": "11964380673",
  "productGroup": "Battery Chargers Other Than UPSs",
  "productType": "Battery Chargers Other Than UPSs",
  "brand": "Anker",
  "productClass": "Low-Energy, High-Voltage",
  "basicModelNumber": "A1119",
  "individualModelNumber": "A1119",
  "basedOnTestProcedureWaiver": false,
  "basedOnExceptionRelief": false,
  "specs": {
    "Unit Energy Consumption (UEC, kWh yr)": 10.758,
    "Nameplate Battery Voltage of Test Battery in Volts (V)": 18,
    "Nameplate Battery Energy Capacity of Test Battery in Watt Hours (Wh)": 90,
    "Maintenance Mode Power in Watts (Pm)": 0.04,
    "24 Hour Energy Consumption in Watt Hours (E24)": 147.21
  },
  "databaseUrl": "https://www.regulations.doe.gov/certification-data/CCMS-4-Battery_Chargers_Other_Than_UPSs.html",
  "source": "US Department of Energy - Compliance Certification Database (CCMS)",
  "scrapedAt": "2026-10-26T15:08:29.321Z"
}
```

In monitor mode, each item also has `changeType`: `baseline` (first run), `added` or `removed`.

### Pricing

Pay per result: **$0.002 per record ($2 per 1,000)**, with no per-run fee. A 50-model supplier check costs about $0.10. A full product group of 20,000 records costs about $40. A weekly monitor that finds 30 new models costs about $0.06.

### Notes and limits

- The data are what manufacturers certified to DOE, published as is. They include current certified models only, with no submission dates.
- A model that does not appear may be listed under a different basic model number or brand spelling. Try wildcards.
- The database contains companies and product data only. It holds no personal data.
- Very large exports (for example, all 3.8M central AC records) take a while because of DOE rate limits. Filter by brand or class when you can.

### FAQ

**Isn't there a free DOE search?** Yes, for single lookups in a browser, and DOE's AI connector returns up to 100 records per call. This Actor is for **bulk and recurring** work: thousands of models, many brands, scheduled change alerts, and API or CSV delivery into your own tools.

# Actor input Schema

## `product_groups` (type: `array`):

One or more DOE product groups. Leave empty to search all groups (combine with brands or model numbers).

## `brands` (type: `array`):

Brand names (case-insensitive; partial matches allowed, e.g. "anker" matches all Anker brand entries).

## `model_numbers` (type: `array`):

Basic or individual model numbers. Wildcards allowed: \* (any characters) and ? (one character), e.g. WRF555SDF\* .

## `product_class` (type: `string`):

Filter on DOE product class / code description, e.g. "Low-Energy", "Split System", "Freestanding".

## `solr_query` (type: `string`):

Optional raw Solr q, e.g. Annual_Energy_Use__Kilowatt_Hours_Year__d:\[0 TO 300]. Field names are in the raw output (include_raw_fields).

## `max_items` (type: `integer`):

Stop after this many records (0 = no limit, needs a filter).

## `only_new` (type: `boolean`):

Remember the records matched last time and output only newly added ones (changeType=added). The first run outputs everything as changeType=baseline. Up to 500,000 matched records per monitor.

## `report_removed` (type: `boolean`):

In monitor mode, also output records that disappeared since the last run (changeType=removed).

## `state_store_name` (type: `string`):

Named key-value store for monitor state. Use one name per monitor.

## `include_raw_fields` (type: `boolean`):

Add the original DOE record (field names as in the database) under raw.

## `request_delay_ms` (type: `integer`):

Politeness delay between 1,000-record pages. DOE rate-limits the service.

## Actor input object example

```json
{
  "product_groups": [
    "Battery Chargers Other Than UPSs"
  ],
  "brands": [
    "Anker"
  ],
  "max_items": 100,
  "only_new": false,
  "report_removed": true,
  "state_store_name": "doe-ccms-monitor-state",
  "include_raw_fields": false,
  "request_delay_ms": 300
}
```

# Actor output Schema

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

No description

# 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 = {
    "product_groups": [
        "Battery Chargers Other Than UPSs"
    ],
    "brands": [
        "Anker"
    ],
    "max_items": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("prudent_businessman/doe-ccms-appliance-certification-search").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 = {
    "product_groups": ["Battery Chargers Other Than UPSs"],
    "brands": ["Anker"],
    "max_items": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("prudent_businessman/doe-ccms-appliance-certification-search").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 '{
  "product_groups": [
    "Battery Chargers Other Than UPSs"
  ],
  "brands": [
    "Anker"
  ],
  "max_items": 100
}' |
apify call prudent_businessman/doe-ccms-appliance-certification-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,prudent_businessman/doe-ccms-appliance-certification-search"
        }
    }
}
```

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/fpSua2BlaCU41hroT/builds/gS2b4QdFN4U4fmTZX/openapi.json
