{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Email Extractor — Emails, Phones & Socials ($1/1K)",
    "description": "Google Maps email extractor and lead generator: get emails, phone numbers, socials (Facebook, Instagram, LinkedIn, WhatsApp) and contact pages from business websites, plus a website audit (dead/parked, HTTPS, SSL, mobile, CMS). $1 per 1,000 sites.",
    "version": "1.1",
    "x-build-id": "WBXdEK2YMXH7t13sW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datamech~google-maps-email-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datamech-google-maps-email-extractor",
        "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/datamech~google-maps-email-extractor/runs": {
      "post": {
        "operationId": "runs-sync-datamech-google-maps-email-extractor",
        "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/datamech~google-maps-email-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-datamech-google-maps-email-extractor",
        "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": "Business websites",
            "type": "array",
            "description": "Websites to enrich, one per business (homepage URLs work best). Plain domains like <code>acme-plumbing.com</code> are accepted. Leave empty if you use Google Maps places below.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "websites": {
            "title": "Websites (plain list)",
            "type": "array",
            "description": "Same as <b>Business websites</b> but as a simple list of strings. Handy when calling the Actor through the API.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Google Maps dataset ID",
            "type": "string",
            "description": "ID of a dataset produced by our Google Maps scraper (or any dataset whose items have a <code>website</code> field). Each place becomes one output row."
          },
          "places": {
            "title": "Google Maps places (JSON)",
            "type": "array",
            "description": "Place objects pasted directly, e.g. <code>[{\"title\": \"In-Law Plumbing\", \"website\": \"https://inlawplumbing.com\", \"placeId\": \"...\"}]</code>. Only <code>website</code> is required."
          },
          "searchStringsArray": {
            "title": "Search Google Maps first",
            "type": "array",
            "description": "Optional. If set, the Actor first runs our Google Maps scraper with these search terms (e.g. <code>dentist</code>, <code>plomero</code>), then enriches every place found. The Maps run is billed separately on your account by the Google Maps scraper.",
            "items": {
              "type": "string"
            }
          },
          "locationQuery": {
            "title": "Search location",
            "type": "string",
            "description": "Location appended to each search term, e.g. <code>Austin, TX</code> or <code>Guadalajara, Jalisco</code>."
          },
          "maxPlaces": {
            "title": "Max places per search term",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of Google Maps places per search term.",
            "default": 20
          },
          "mapsLanguage": {
            "title": "Google Maps language",
            "type": "string",
            "description": "Language code for the Google Maps search, e.g. <code>en</code>, <code>es</code>, <code>pt-BR</code>.",
            "default": "en"
          },
          "includePlacesWithoutWebsite": {
            "title": "Include places without a website",
            "type": "boolean",
            "description": "Output places that have no website (marked <code>siteStatus: no_website</code>). Useful for agencies selling websites. Each row counts as a result.",
            "default": false
          },
          "maxPagesPerSite": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Homepage plus the most likely contact pages (Contact, About, Impressum, Contacto, Nosotros, Contato, Kontakt, À propos...). The crawl of a site stops early once a contact page, an email and a phone were found.",
            "default": 5
          },
          "maxConcurrency": {
            "title": "Max concurrent websites",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many websites are crawled in parallel. Pages of one website are always fetched one after another to be polite. The Actor automatically lowers parallelism when memory gets tight, so the default is safe at 256 MB.",
            "default": 30
          },
          "requestTimeoutSecs": {
            "title": "Page timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Maximum time for downloading one page. Slower sites are reported as unreachable.",
            "default": 15
          },
          "siteTimeoutSecs": {
            "title": "Time budget per website (seconds)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "Maximum total time spent on one website (all its pages, retries and http/https fallbacks). When it runs out, the row is saved with whatever was found so far.",
            "default": 60
          },
          "maxRetries": {
            "title": "Retries on network errors",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Retries for the homepage on timeouts, resets and 5xx/429 responses. Contact pages are not retried.",
            "default": 1
          },
          "onlyWithEmail": {
            "title": "Only businesses with an email",
            "type": "boolean",
            "description": "Save only businesses where at least one email was found. Filtered rows are not saved and not charged.",
            "default": false
          },
          "skipDeadSites": {
            "title": "Skip dead and parked websites",
            "type": "boolean",
            "description": "Do not save businesses whose website is unreachable, parked/for sale, or missing. Filtered rows are not saved and not charged. Captcha/WAF blocked sites are omitted by default even when this is off (see <code>includeBlockedSites</code>).",
            "default": false
          },
          "includeBlockedSites": {
            "title": "Include captcha/WAF blocked websites",
            "type": "boolean",
            "description": "By default, sites that only returned a bot challenge (SiteGround 202, Cloudflare 403, etc.) are not saved and not charged. They are listed in the <code>FAILED_SITES</code> key-value record. Turn this on to save those rows anyway.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. First-pass crawling uses this proxy if you set it (off by default, to keep normal sites cheap). Whatever you pick here is respected, including residential. If you leave it off, blocked sites are retried with a new session through: (1) Apify datacenter group SHADER, (2) Apify Proxy automatic / no groups (FREE-plan datacenter), (3) no proxy. Residential is never selected automatically. Without a working proxy the slow 45 s retry is skipped.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}