{
  "properties": {
    "boundingBox": {
      "description": "Geographic bounding box defining the scan area. Provide north/south/east/west coordinates.",
      "editor": "json",
      "prefill": {
        "east": -73.97,
        "north": 40.77,
        "south": 40.73,
        "west": -74.01
      },
      "title": "Bounding Box",
      "type": "object"
    },
    "circleCenter": {
      "description": "Center point for a circular scan area. Use with radiusKm.",
      "editor": "json",
      "title": "Circle Center",
      "type": "object"
    },
    "customGeolocation": {
      "description": "Custom GeoJSON Polygon defining the scan boundary.",
      "editor": "json",
      "title": "Custom Geolocation (GeoJSON Polygon)",
      "type": "object"
    },
    "deduplicateResults": {
      "default": true,
      "description": "Remove duplicate businesses that appear in multiple adjacent grid cells.",
      "prefill": true,
      "title": "Deduplicate Results",
      "type": "boolean"
    },
    "enrichDetails": {
      "default": false,
      "description": "Open each place's page for extra fields (price level, Plus Code, photo sample, rating histogram, open/closed status). Slower; leave off for large exports since listing fields are always collected.",
      "prefill": false,
      "title": "Enrich Place Details",
      "type": "boolean"
    },
    "language": {
      "default": "en",
      "description": "Language for Google Maps interface and results.",
      "editor": "select",
      "enum": [
        "en",
        "es",
        "fr",
        "de",
        "it",
        "pt",
        "ja",
        "ko",
        "zh",
        "ar",
        "ru"
      ],
      "enumTitles": [
        "English",
        "Spanish",
        "French",
        "German",
        "Italian",
        "Portuguese",
        "Japanese",
        "Korean",
        "Chinese",
        "Arabic",
        "Russian"
      ],
      "title": "Language",
      "type": "string"
    },
    "locationName": {
      "description": "Name of a public Google Maps location (e.g., 'Brooklyn, NY'). Google resolves its real center anonymously, then the actor scans the user-controlled radiusKm around it. Use boundingBox or GeoJSON for exact boundaries.",
      "editor": "textfield",
      "title": "Location Name",
      "type": "string"
    },
    "maxPagesPerCell": {
      "default": 13,
      "description": "How many 20-result pages to read per cell. Deeper pages surface more businesses — page 1 finds about 20% of a cell's places, page 9 finds all of them.",
      "maximum": 13,
      "minimum": 1,
      "prefill": 13,
      "title": "Max Pages Per Cell",
      "type": "integer"
    },
    "maxPlacesPerCell": {
      "default": 120,
      "description": "Maximum businesses to collect from each grid cell (1–260; Google's ranked window for one cell reaches roughly 136–213 places).",
      "maximum": 260,
      "minimum": 1,
      "prefill": 5,
      "title": "Max Places Per Cell",
      "type": "integer"
    },
    "maxTotalResults": {
      "default": 10000,
      "description": "Maximum total businesses to extract across all cells. Stops scanning when reached.",
      "maximum": 100000,
      "minimum": 1,
      "prefill": 5,
      "title": "Max Total Results",
      "type": "integer"
    },
    "minRating": {
      "description": "Only include businesses with a rating at or above this value (1.0–5.0). Leave empty to include all.",
      "maximum": 5,
      "minimum": 1,
      "title": "Minimum Rating",
      "type": "number"
    },
    "radiusKm": {
      "default": 5,
      "description": "Radius in kilometers for circular scan area (used with circleCenter or locationName).",
      "maximum": 50,
      "minimum": 0.1,
      "title": "Radius (km)",
      "type": "number"
    },
    "searchQuery": {
      "description": "Type of business to search for (e.g., 'pharmacy', 'restaurant', 'dentist').",
      "editor": "textfield",
      "prefill": "coffee shops",
      "title": "Search Query",
      "type": "string"
    },
    "zoomLevel": {
      "default": 15,
      "description": "Controls grid cell granularity. Higher = smaller cells, more thorough coverage.",
      "maximum": 18,
      "minimum": 12,
      "prefill": 15,
      "title": "Zoom Level",
      "type": "integer"
    }
  },
  "required": [
    "searchQuery"
  ],
  "schemaVersion": 1,
  "title": "Google Maps Area Scanner",
  "type": "object"
}
