{
  "title": "Review consumer product recalls — settings",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "keyword": {
      "title": "Product, hazard or retailer keyword",
      "type": "string",
      "description": "Filter recalls whose title, description, hazard, product, manufacturer, or retailer mentions this term — e.g. 'fire', 'choking', 'lithium battery', 'Amazon'. Leave empty for all.",
      "editor": "textfield",
      "example": "fire",
      "sectionCaption": "Product, keyword and dates"
    },
    "productName": {
      "title": "Product name contains",
      "type": "string",
      "description": "Filter by product name (case-insensitive partial match), e.g. 'bicycle', 'crib', 'heater'. Leave empty for all.",
      "editor": "textfield",
      "example": "crib"
    },
    "manufacturer": {
      "title": "Manufacturer name contains",
      "type": "string",
      "description": "Filter by manufacturer name (case-insensitive partial match against CPSC's legal entity name, so 'Polaris' matches 'Polaris Industries Inc., of Medina, Minnesota'). CPSC leaves this field blank on roughly 80% of recalls - for a brand-wide sweep use Keyword instead, which also searches the title, description and retailers.",
      "editor": "textfield",
      "example": "Polaris"
    },
    "recallNumber": {
      "title": "Exact CPSC recall number",
      "type": "string",
      "description": "Look up one specific CPSC recall by its number (e.g. '26596'). When set, the other filters are ignored.",
      "editor": "textfield",
      "example": "26596"
    },
    "recalledSince": {
      "title": "Recall announcement date — from",
      "type": "string",
      "description": "Only recalls announced on or after this date (YYYY-MM-DD). Defaults to January 1 three years back (e.g. 2023-01-01 during 2026) if empty. Great for weekly monitoring.",
      "editor": "textfield",
      "example": "2026-01-01"
    },
    "recalledUntil": {
      "title": "Recall announcement date — through",
      "type": "string",
      "description": "Only recalls announced on or before this date (YYYY-MM-DD). Defaults to today when empty, so set it only when you want a closed historical window rather than a rolling feed.",
      "editor": "textfield",
      "example": "2026-06-30"
    },
    "maxResults": {
      "title": "Maximum recalls to save",
      "type": "integer",
      "description": "Caps how many recalls one run returns. Results are sorted newest first before the cap is applied, so you keep the most recent ones - try 100 for a quick test, 500 for weekly monitoring, or 5000 for a multi-year backfill.",
      "editor": "number",
      "default": 500,
      "minimum": 1
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "description": "Wall-clock budget for this run, in seconds. When it is reached the Actor stops cleanly and finishes successfully with the rows it already collected, instead of being killed mid-run. One request per calendar year in the date window; years not reached in time are reported in the run SUMMARY. Raise it (and the run timeout in Run options) for a deliberately large job.",
      "editor": "number",
      "default": 240,
      "minimum": 30,
      "sectionCaption": "Run budget"
    }
  },
  "description": "For product-safety teams and retail researchers, bring CPSC recall notices into a consistent table with the original notice links. CPSC consumer-product recalls. Vehicle and FDA-regulated recalls belong to separate agency sources."
}
