{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Contact Scraper: Emails, Phones & Social Links",
    "description": "Website contact scraper and email extractor for lead generation: company emails, phone numbers, social links, address and VAT IDs from a list of websites or a Google Maps dataset. Optional named people with job titles from team and impressum pages. Flat $3 per 1,000 sites.",
    "version": "0.3",
    "x-build-id": "1IQ5qv0budgOaXGt9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rod_analytics~company-contact-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rod_analytics-company-contact-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/rod_analytics~company-contact-extractor/runs": {
      "post": {
        "operationId": "runs-sync-rod_analytics-company-contact-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/rod_analytics~company-contact-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-rod_analytics-company-contact-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": {
          "domains": {
            "title": "Company websites or domains",
            "type": "array",
            "description": "One per line. Bare domains like acme.com and full URLs both work. Duplicates (also www vs non-www) are removed. Each website gives one output row and is billed once.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Dataset with websites",
            "type": "string",
            "description": "Optional. Pick the dataset of a finished run, for example Google Maps Scraper, Apollo or a directory scraper, and every company website in it is crawled. You can also paste a dataset ID. Rows without a website are skipped for free."
          },
          "urlField": {
            "title": "Website field in the dataset",
            "type": "string",
            "description": "Field that holds the company website in the dataset rows. Leave empty to try website, websiteUrl, website_url, companyWebsite, domain and url. Google Maps place links and social profiles are skipped. Dot paths like company.website work."
          },
          "includePeople": {
            "title": "Include named people (business roles)",
            "type": "boolean",
            "description": "Off by default. On: returns the people the company itself lists on its own team, about, impressum, contact and press pages, with name, job title and the work email or phone printed next to them. Only the websites you gave are read, robots.txt is always respected, and no LinkedIn or other social site is touched. Photos, bios and private addresses are never returned. Billed per person on top of the website price. You are the controller of this data and need a lawful basis, see the README section on GDPR.",
            "default": false
          },
          "maxPagesPerDomain": {
            "title": "Max pages per domain",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Homepage plus the best matching priority pages. Empty: 5 pages, or 8 when named people are on. 5 covers contact, impressum and about pages on most sites. The price per website is the same for any number."
          },
          "includePersonalEmails": {
            "title": "Include personal email addresses",
            "type": "boolean",
            "description": "Off (default, GDPR-safe): only generic role mailboxes such as info@, sales@, office@, support@ are returned, and the row shows how many personal addresses were hidden. On: addresses of named people found on the site (jane.doe@) are returned too. Then you are the data controller for that personal data and need a lawful basis, for example B2B legitimate interest, and must follow ePrivacy rules for marketing.",
            "default": false
          },
          "includeAllPhones": {
            "title": "Include all phone numbers",
            "type": "boolean",
            "description": "Off (default): only the company's main phone number. On: every number found, including numbers on team pages (up to 20). Fax numbers are never returned.",
            "default": false
          },
          "suppressionList": {
            "title": "Suppression list (people who objected)",
            "type": "array",
            "description": "Optional. Email addresses, domains or SHA-256 hashes of them, one per line. A person whose address matches, or whose email domain matches, is never returned. Plain values are hashed in memory at the start of the run and not kept. Use it for every objection you receive.",
            "items": {
              "type": "string"
            }
          },
          "extraCompanyDomains": {
            "title": "Extra email domains of the same companies",
            "type": "array",
            "description": "Optional. Work emails are returned only when they sit on the company website domain. List other domains that belong to the same companies here, for example acme-group.com for acme.com. Free webmail is never returned.",
            "items": {
              "type": "string"
            }
          },
          "emailFinderHint": {
            "title": "Add a Work Email Finder hint",
            "type": "boolean",
            "description": "Off by default. On: people without a personal work email get an emailFinderHint field with a ready-made input for the Work Email Finder Actor (rod_analytics/work-email-finder). Nothing is called and nothing is billed for it.",
            "default": false
          },
          "priorityPages": {
            "title": "Pages to prioritise",
            "type": "array",
            "description": "Keywords matched against link URLs and link texts, in priority order. Built-in keywords also match translations (contact matches kontakt, contacto, contatti, yhteystiedot, kontaktai...). Links that match none of them are not followed.",
            "default": [
              "contact",
              "about",
              "impressum",
              "imprint",
              "kontakt",
              "team",
              "legal"
            ],
            "items": {
              "type": "string"
            }
          },
          "checkMx": {
            "title": "Check email domains (MX)",
            "type": "boolean",
            "description": "Look up MX records of each email domain and set mxFound. One cached DNS query per domain. Does not contact any mail server.",
            "default": true
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip pages disallowed by the site's robots.txt. Recommended. Ignored when named people are on: then robots.txt is always respected.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Domains in parallel",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many websites are crawled at the same time.",
            "default": 10
          },
          "maxConcurrencyPerDomain": {
            "title": "Parallel requests per domain",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many pages of the same website are fetched at once. Keep it low to be polite.",
            "default": 2
          },
          "timeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 3,
            "maximum": 60,
            "type": "integer",
            "description": "Maximum wait for one page. A whole domain is capped at 4x this value (at least 60 s).",
            "default": 15
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Most company websites work without a proxy. Use Apify datacenter proxy or your own proxy URLs if many sites block you. Residential and SERP proxies are not supported.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}