{
  "title": "Business registrations - choose registries and filters",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "sources": {
      "title": "Supported business registries",
      "type": "array",
      "description": "Which cities/states to scrape. Connecticut and Colorado are STATEWIDE registries.",
      "editor": "select",
      "default": [
        "chicago",
        "new_york",
        "san_francisco",
        "seattle",
        "los_angeles",
        "connecticut",
        "colorado"
      ],
      "items": {
        "type": "string",
        "enum": [
          "chicago",
          "new_york",
          "san_francisco",
          "seattle",
          "los_angeles",
          "connecticut",
          "colorado"
        ],
        "enumTitles": [
          "Chicago, IL (new licenses)",
          "New York, NY (new licenses)",
          "San Francisco, CA (registrations)",
          "Seattle, WA (license certificates)",
          "Los Angeles, CA (active businesses)",
          "Connecticut (statewide registry)",
          "Colorado (statewide registry)"
        ]
      },
      "sectionCaption": "1 · Business registries",
      "sectionDescription": "Choose supported sources rather than assuming nationwide coverage."
    },
    "registeredSince": {
      "title": "Registered since",
      "type": "string",
      "description": "Only businesses registered/licensed on or after this date (YYYY-MM-DD). THE key filter for fresh leads — e.g. last 30 days.",
      "editor": "textfield",
      "example": "2026-06-01",
      "sectionCaption": "2 · Registration filters",
      "sectionDescription": "Narrow by registration date and published business text."
    },
    "registeredUntil": {
      "title": "Registered until",
      "type": "string",
      "description": "Only businesses registered or licensed on or before this date (YYYY-MM-DD). Leave it empty to run right up to the present: Seattle, San Francisco, Los Angeles, Connecticut and Colorado are automatically capped at today because those registries publish future-dated rows, while Chicago and New York are left unbounded.",
      "editor": "textfield",
      "example": "2026-09-30"
    },
    "businessNameContains": {
      "title": "Business name contains",
      "type": "string",
      "description": "Only businesses whose legal or DBA name contains this text (case-insensitive). Leave empty for all.",
      "editor": "textfield",
      "example": "LLC"
    },
    "industryContains": {
      "title": "Industry contains",
      "type": "string",
      "description": "Case-insensitive substring of the industry / license text, e.g. 'food'. That text is the license type in Chicago, New York and San Francisco, the NAICS description in Seattle and Los Angeles, and only an entity type in Connecticut ('LLC', 'Stock', 'Non-Stock') and Colorado (terse codes such as 'DLLC' or 'DPC'), so choose a needle that suits the sources you picked; leave empty for all.",
      "editor": "textfield",
      "example": "food"
    },
    "maxResultsPerSource": {
      "title": "Maximum records per registry",
      "type": "integer",
      "description": "Upper bound on records kept per source per run, newest first. It is per source rather than per run, so the default 500 across all 7 sources returns up to 3,500 records; raise it to backfill history (the actor stops fetching after 50,000 rows per source).",
      "editor": "number",
      "default": 500,
      "minimum": 1,
      "sectionCaption": "3 · Run limits",
      "sectionDescription": "Set a small per-registry cap for the first run."
    },
    "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. Sources are fetched one after another, up to 50 pages each; a source not reached in time is 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
    },
    "socrataAppToken": {
      "title": "Socrata app token (optional)",
      "type": "string",
      "description": "Optional free Socrata app token for higher rate limits on scheduled runs.",
      "editor": "textfield",
      "isSecret": true,
      "sectionCaption": "4 · Advanced source access",
      "sectionDescription": "An optional source token may help with publisher rate limits."
    }
  },
  "description": "Choose supported public business registries and narrow the registration dates or business text. Begin with a small per-registry cap; records reflect the fields each publisher makes available."
}
