{
  "openapi": "3.0.1",
  "info": {
    "title": "Contact Details Scraper: Google Maps Leads to Emails & Phones",
    "description": "Turn Google Maps and directory lead lists into emails, phones and social profiles. Paste websites or a Google Maps dataset; it crawls each site's contact pages, renders JavaScript sites, and can verify emails. Pay only when a contact is found.",
    "version": "0.1",
    "x-build-id": "3o3UDLXKSjfjb0QOC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jfaro19~website-contact-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jfaro19-website-contact-finder",
        "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/jfaro19~website-contact-finder/runs": {
      "post": {
        "operationId": "runs-sync-jfaro19-website-contact-finder",
        "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/jfaro19~website-contact-finder/run-sync": {
      "post": {
        "operationId": "run-sync-jfaro19-website-contact-finder",
        "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": {
          "websites": {
            "title": "Websites",
            "type": "array",
            "description": "Websites to search for contacts. Paste domains (example.com), URLs (https://www.example.com/contact) or email addresses; they are normalized and de-duplicated. Leave empty if you use a dataset ID below.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Or: dataset (e.g. Google Maps results)",
            "type": "string",
            "description": "Pick an Apify dataset to read websites from, for example the output of a Google Maps scraper run, or paste its ID. Business name, category, address, phone, rating and Maps URL are carried into each result under \"source\". The Actor only gets read access to the dataset you select."
          },
          "websiteField": {
            "title": "Website field in that dataset",
            "type": "string",
            "description": "Name of the field holding the website URL in the dataset items. Google Maps scrapers use \"website\".",
            "default": "website"
          },
          "maxPagesPerWebsite": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Homepage plus the most likely contact pages (Contact, About, Team, Impressum, Locations...). You pay per website, not per page, so this only affects speed.",
            "default": 5
          },
          "defaultCountry": {
            "title": "Default country for phone numbers",
            "type": "string",
            "description": "Two-letter country code used to interpret phone numbers written without a country code (e.g. US, GB, DE). Country-code domains (.de, .co.uk, ...) are detected automatically.",
            "default": "US"
          },
          "retryBlockedWithProxy": {
            "title": "Retry blocked sites through a proxy",
            "type": "boolean",
            "description": "Some websites block cloud servers. When a site refuses the normal request, retry it through Apify Proxy. Included in the price: you are never charged extra for proxy use.",
            "default": true
          },
          "browserFallback": {
            "title": "Render JavaScript-built sites in a browser",
            "type": "boolean",
            "description": "Some websites (React, Vue, Angular, Wix-style builders) only show their content after JavaScript runs, so a plain request sees an empty page. When a homepage looks like that and no contacts were found, it is opened in a headless browser. Included in the price: you are never charged extra for browser rendering.",
            "default": true
          },
          "maxBrowserPagesPerWebsite": {
            "title": "Max browser pages per website",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many pages (homepage plus the likeliest contact pages) the browser fallback opens per JavaScript-built website.",
            "default": 2
          },
          "verifyEmails": {
            "title": "Verify emails (paid add-on)",
            "type": "boolean",
            "description": "Check whether the best email of each website can receive mail, using MillionVerifier. Adds an \"emailVerification\" object to each verified email. You pay per verified email only for a decisive answer (valid, invalid or disposable); catch-all, unknown and failed checks are free. See the Pricing tab. With your own MillionVerifier key below, there is no verification charge.",
            "default": false
          },
          "verifyAllEmails": {
            "title": "Verify every email found",
            "type": "boolean",
            "description": "Verify all emails found on each website instead of just the best one. Each address is verified (and charged) at most once per run.",
            "default": false
          },
          "millionVerifierApiKey": {
            "title": "Your MillionVerifier API key (optional)",
            "type": "string",
            "description": "Use your own MillionVerifier account for verification. Verification is then not charged by this Actor (MillionVerifier bills your account). Stored encrypted."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "How many websites to process in parallel.",
            "default": 15
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}