{
  "openapi": "3.0.1",
  "info": {
    "title": "Grotal India Business Scraper for Leads: City and Category Data",
    "description": "Collect public Grotal business listings by Indian city and category. Get names, addresses, phones, directory emails, websites, ratings, descriptions, detail URLs, typed filters, and safe change monitoring. Export clean records to Apify datasets and lead workflows at $0.00176 per business record.",
    "version": "0.0",
    "x-build-id": "PWrcjmIjb5JZJbwPF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~grotal-business-directory-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-grotal-business-directory-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/getascraper~grotal-business-directory-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-grotal-business-directory-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/getascraper~grotal-business-directory-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-grotal-business-directory-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": {
          "startUrls": {
            "title": "Public Grotal category URLs",
            "type": "array",
            "description": "Choose verified Grotal city and category pages. Detail pages, account pages, payment pages, and other hosts are rejected.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL",
                  "description": "A public Grotal city and category page."
                }
              },
              "required": [
                "url"
              ]
            },
            "default": [
              {
                "url": "https://www.grotal.com/Delhi/AC-Repair-C44/"
              }
            ]
          },
          "searchTerms": {
            "title": "Category or service terms",
            "type": "array",
            "description": "Optional terms such as AC Repair, restaurants, or plumbers. Each term is combined with every selected city.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            },
            "default": []
          },
          "locations": {
            "title": "Indian cities",
            "type": "array",
            "description": "Optional city names resolved from Grotal's public city list. Helper mode needs at least one city.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            },
            "default": []
          },
          "areas": {
            "title": "City areas",
            "type": "array",
            "description": "Optional area names resolved for each selected city. Leave empty to use Any Area.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            },
            "default": []
          },
          "categoryContains": {
            "title": "Category contains",
            "type": "string",
            "description": "Keep businesses whose public category names contain this text after detail enrichment."
          },
          "cityContains": {
            "title": "City contains",
            "type": "string",
            "description": "Keep businesses whose source city contains this text."
          },
          "areaContains": {
            "title": "Area contains",
            "type": "string",
            "description": "Keep businesses whose public area value contains this text."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep only listings with a source-backed rating at or above this value."
          },
          "minReviewCount": {
            "title": "Minimum review count",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep only listings with at least this many source-backed reviews."
          },
          "requirePublicPhone": {
            "title": "Require public phone",
            "type": "boolean",
            "description": "Keep only businesses with at least one phone number publicly listed by Grotal.",
            "default": false
          },
          "requirePublicEmail": {
            "title": "Require public email",
            "type": "boolean",
            "description": "Keep only businesses with a directory email or opt-in public website email.",
            "default": false
          },
          "requireWebsite": {
            "title": "Require website",
            "type": "boolean",
            "description": "Keep only businesses with a source-linked public website.",
            "default": false
          },
          "requireDescription": {
            "title": "Require description",
            "type": "boolean",
            "description": "Keep only businesses with a public source description.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Direct HTTP is used by default. Add Apify Proxy only when your workflow needs it.",
            "default": {
              "useApifyProxy": false
            }
          },
          "includeImages": {
            "title": "Include public images",
            "type": "boolean",
            "description": "Include a source-backed business image when the detail page exposes one.",
            "default": false
          },
          "includePublicWebsiteContacts": {
            "title": "Check public website contacts",
            "type": "boolean",
            "description": "Check publicly linked business websites for visible business emails and social links. No values are inferred.",
            "default": false
          },
          "maxWebsiteRequests": {
            "title": "Maximum website checks",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Bounds optional public website requests for one run.",
            "default": 20
          },
          "maxItems": {
            "title": "Maximum businesses",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum deduplicated businesses emitted after enrichment and filters.",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum pages per source",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Bounds discovered pagination links for each category source.",
            "default": 10
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "snapshot",
              "snapshotAndChanges",
              "changesOnly"
            ],
            "type": "string",
            "description": "Choose whether to emit current records, current records plus safe removals, or only changes.",
            "default": "snapshotAndChanges"
          },
          "stateName": {
            "title": "Monitoring state name",
            "minLength": 1,
            "maxLength": 80,
            "type": "string",
            "description": "A stable label that keeps snapshots separate for different scheduled workflows.",
            "default": "default"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}