{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper Alternative - Local Business Leads by City",
    "description": "Business lead lists for any city, box or country from the open Overture Maps places data: name, category, address, coordinates, website, phone, role emails (info@) and socials. No proxies, no blocking. $1/1,000 places.",
    "version": "0.1",
    "x-build-id": "r8G9iBiFpfO0hCRB0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidytools~places-database/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidytools-places-database",
        "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/tidytools~places-database/runs": {
      "post": {
        "operationId": "runs-sync-tidytools-places-database",
        "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/tidytools~places-database/run-sync": {
      "post": {
        "operationId": "run-sync-tidytools-places-database",
        "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": {
          "locations": {
            "title": "Cities or areas",
            "type": "array",
            "description": "One per line. A city with its 2-letter country code, e.g. `Berlin, DE` or `Austin, US` (the English name works; without a country code the biggest match is used), or a box as `west,south,east,north` in degrees, e.g. `13.30,52.48,13.45,52.56`. Cities are cut out along their real boundary. Use \"Whole countries\" for a country.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "JSON array of business types, e.g. {\"categories\":[\"restaurant\",\"dental_clinic\"]}; enter one per line in the form. Overture category names and plain words such as dentist, lawyer or car repair work, including common translations. Spaces and plurals are accepted. A parent category such as food_and_drink includes its children. Empty selects every category; if none match, the run log suggests common categories for the area.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Whole countries (optional)",
            "type": "array",
            "description": "2-letter ISO country codes, e.g. `DE`, `TW`. Slow for big countries: always add categories and keep Max places sensible.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max places",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of places returned (and charged) in this run, across all locations. Best-scored places come first.",
            "default": 1000
          },
          "minConfidence": {
            "title": "Minimum confidence",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "Overture's score (0 to 1) that the place really exists. 0.85 keeps well-supported places; lower it for more rows and more noise.",
            "default": 0.85
          },
          "requireWebsite": {
            "title": "Only places with a website",
            "type": "boolean",
            "description": "Typical for lead lists you will enrich or email.",
            "default": false
          },
          "requirePhone": {
            "title": "Only places with a phone number",
            "type": "boolean",
            "description": "Keep only places that have a phone number in the source data.",
            "default": false
          },
          "requireEmail": {
            "title": "Only places with an email",
            "type": "boolean",
            "description": "Counts role addresses (info@, contact@...) unless you also allow personal addresses below. About 1 in 5 places has an email in the source data.",
            "default": false
          },
          "includePersonalEmails": {
            "title": "Also return personal email addresses",
            "type": "boolean",
            "description": "Off (default): only role addresses such as info@, contact@, sales@ are returned. On: every email in the source data, including addresses that look like a named person (anna.meier@...). Personal addresses are personal data: you are responsible for having a lawful basis to use them (see Responsible use in the README).",
            "default": false
          },
          "maxResultsPerLocation": {
            "title": "Max places per location (optional)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for each city or area, so one big city does not use the whole budget. Empty = no per-location cap."
          },
          "maxSourceAgeMonths": {
            "title": "Max source age in months (optional)",
            "minimum": 1,
            "maximum": 240,
            "type": "integer",
            "description": "Keep only places whose source record (`sourceUpdated`) was updated within this many months, for example 12 for the last year. Empty = no limit. Older records are more likely to be closed or moved (in big cities about half of the records can be over a year old); the run summary shows how many returned places are older than 12 months. Records without a source date are kept."
          },
          "includePhones": {
            "title": "Return phone numbers",
            "type": "boolean",
            "description": "Business phone numbers from the source data. Turn off to return no phone numbers at all.",
            "default": true
          },
          "includeSocials": {
            "title": "Return social profile links",
            "type": "boolean",
            "description": "Facebook, Instagram and other profile links from the source data. Turn off to return none.",
            "default": true
          },
          "release": {
            "title": "Overture release",
            "type": "string",
            "description": "`latest` (default) or a release name such as `2026-09-23.1`. Overture publishes a new release about every month and removes old ones after a while.",
            "default": "latest"
          },
          "maxConcurrency": {
            "title": "Query threads",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "CPU threads for the query engine (1 to 4). More threads are faster on large areas and need more memory.",
            "default": 2
          },
          "enrich": {
            "title": "Add contacts or company details",
            "enum": [
              "none",
              "contacts",
              "company"
            ],
            "type": "string",
            "description": "What to do with the websites in the source data. Default: nothing, you pay only the directory price. Places without a website field have an unknown website (not 'no website') and are never charged for enrichment. A website shared by several places (chains, branches) is read and charged once, and each place keeps its own id. Source values are never overwritten: what a website adds goes to `enrichedEmails`, `enrichedPhones`, `enrichedSocials` and `enrichment`.",
            "default": "none"
          },
          "enrichRequire": {
            "title": "What counts as a successful contact enrichment",
            "enum": [
              "any",
              "email"
            ],
            "type": "string",
            "description": "Only for 'Contact enrichment'. The charge applies when the website gave what you choose here. Phones and social links found are still returned when 'Email only' is selected.",
            "default": "any"
          },
          "enrichMaxWebsites": {
            "title": "Max websites to read",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Spending cap for enrichment: at most this many different websites are read in the run. Places over the cap are returned without enrichment (status skipped_cap).",
            "default": 500
          },
          "enrichMaxPages": {
            "title": "Pages per website",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Home page plus likely contact pages (contact, imprint/Impressum, about). The price per website is the same however many pages are read.",
            "default": 4
          },
          "enrichConcurrency": {
            "title": "Parallel websites",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many websites are read at the same time.",
            "default": 5
          },
          "enrichSiteTimeoutSecs": {
            "title": "Time limit per website (seconds)",
            "minimum": 20,
            "maximum": 300,
            "type": "integer",
            "description": "After this time no further pages of a website are started.",
            "default": 60
          },
          "enrichHttpVia": {
            "title": "Plain HTTP requests from",
            "enum": [
              "auto",
              "backend",
              "direct",
              "vm"
            ],
            "type": "string",
            "description": "Where the website pages are fetched from. Auto tries Apify's network first, then our servers, then a real browser.",
            "default": "auto"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}