{
  "openapi": "3.0.1",
  "info": {
    "title": "CPSC Product Recalls Scraper: Safety Recall Data API",
    "description": "Scrape US CPSC consumer product recalls from SaferProducts.gov, no API key. Filter by keyword, date, hazard, product type, manufacturer, retailer or recall number. Get recall number, date, products, hazards, injuries, remedies, manufacturers, importers, UPCs, images. Export JSON, CSV, Excel.",
    "version": "0.1",
    "x-build-id": "5ptnWEVr8ygIDDp3c"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapers_lat~cpsc-recalls-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapers_lat-cpsc-recalls-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapers_lat~cpsc-recalls-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapers_lat-cpsc-recalls-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapers_lat~cpsc-recalls-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapers_lat-cpsc-recalls-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "maxRecalls": {
            "title": "Max recalls",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of recall records to collect. Optional. The CPSC web service returns all matching recalls in one response, so narrow with the date or keyword filters for large pulls."
          },
          "keyword": {
            "title": "Keyword (any field)",
            "type": "string",
            "description": "Free-text keyword filter. All words must appear across the recall title, description, product names and hazards, for example lithium battery or infant sleeper. Leave empty to ignore."
          },
          "recallDateStart": {
            "title": "Recall Date From",
            "type": "string",
            "description": "Only include recalls with a recall date on or after this date (YYYY-MM-DD), for example 2026-01-01. Leave empty to start from the earliest available recall."
          },
          "recallDateEnd": {
            "title": "Recall Date To",
            "type": "string",
            "description": "Only include recalls with a recall date on or before this date (YYYY-MM-DD), for example 2026-06-30."
          },
          "recallTitle": {
            "title": "Recall Title Contains",
            "type": "string",
            "description": "Keyword matched against the recall title, for example fire, lithium, helmet, or a brand name. Leave empty to ignore."
          },
          "productName": {
            "title": "Product Name Contains",
            "type": "string",
            "description": "Keyword matched against the recalled product name, for example vaporizer, stroller, heater. Leave empty to ignore."
          },
          "productType": {
            "title": "Product Type",
            "type": "string",
            "description": "Filter by CPSC product type / category, for example Toys, Furniture, Clothing. Leave empty to ignore."
          },
          "hazard": {
            "title": "Hazard Contains",
            "type": "string",
            "description": "Keyword matched against the recall hazard text, for example fire, burn, laceration, entrapment, choking. Leave empty to ignore."
          },
          "manufacturer": {
            "title": "Manufacturer / Brand",
            "type": "string",
            "description": "Filter by manufacturer or brand name, for example Fisher-Price, Peloton. Leave empty to ignore."
          },
          "retailer": {
            "title": "Retailer / Sold At",
            "type": "string",
            "description": "Filter by retailer or where the product was sold, for example Amazon, Target, Walmart. Leave empty to ignore."
          },
          "recallNumber": {
            "title": "Recall Number",
            "type": "string",
            "description": "Fetch a single recall by its CPSC recall number, for example 26611. Leave empty to ignore."
          },
          "recallId": {
            "title": "Recall ID",
            "type": "string",
            "description": "Fetch a single recall by its internal CPSC recall ID, for example 10859. Leave empty to ignore."
          },
          "upc": {
            "title": "Product UPC",
            "type": "string",
            "description": "Filter recalls that list this product UPC / barcode. Leave empty to ignore."
          },
          "lastPublishDateStart": {
            "title": "Last Published From",
            "type": "string",
            "description": "Only include recalls last published on or after this date (YYYY-MM-DD). Useful for incremental monitoring of newly updated recalls. Leave empty to ignore."
          },
          "lastPublishDateEnd": {
            "title": "Last Published To",
            "type": "string",
            "description": "Only include recalls last published on or before this date (YYYY-MM-DD). Leave empty to ignore."
          },
          "withSummary": {
            "title": "AI recall summary (paid add-on)",
            "type": "boolean",
            "description": "Optional paid AI add-on, off by default. Adds a plain-language summary of each recall (what, hazard, what to do). Billed only when produced. Requires a paid Apify plan.",
            "default": false
          },
          "withSeverity": {
            "title": "AI severity / risk score (paid add-on)",
            "type": "boolean",
            "description": "Optional paid AI add-on, off by default. Classifies each recall's severity (low/medium/high/critical) with a 0-100 risk score and rationale. Billed only when produced. Requires a paid Apify plan.",
            "default": false
          },
          "withExtract": {
            "title": "AI structured extract (paid add-on)",
            "type": "boolean",
            "description": "Optional paid AI add-on, off by default. Extracts structured data: hazard type, affected products, injury/incident counts, remedy, age range and retailers. Billed only when produced. Requires a paid Apify plan.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}