{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Contact Extractor - Email, Phone & Social Scraper",
    "description": "[💵 $1.00 / 1K websites, no start fee] Bulk-extract emails, phones and social profiles from company websites. Ranks contact/impressum/kontakt pages in 12+ languages, decodes Cloudflare-protected and (at)-obfuscated addresses, MX-verifies for free, and scores every address 0-100. CSV/JSON.",
    "version": "0.2",
    "x-build-id": "8F7M3Y344hQ2btRAZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/webdata_labs~website-contact-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-webdata_labs-website-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/webdata_labs~website-contact-extractor/runs": {
      "post": {
        "operationId": "runs-sync-webdata_labs-website-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/webdata_labs~website-contact-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-webdata_labs-website-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": {
          "websites": {
            "title": "Websites",
            "type": "array",
            "description": "Company websites to scan. Accepts bare domains (acme.com) or full URLs (https://acme.com/about). Paste a column straight from a Google Maps export, a directory scrape, or your CRM - duplicates are removed automatically.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "URLs (compatibility alias)",
            "type": "array",
            "description": "Compatibility alias for websites. Use this when an agent, workflow, or copied Actor input provides a urls array.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "domains": {
            "title": "Domains (compatibility alias)",
            "type": "array",
            "description": "Compatibility alias for websites. Bare domains and full URLs are both accepted and deduplicated with every other input list.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (compatibility alias)",
            "type": "array",
            "description": "Compatibility alias for websites. Accepts URL strings and Apify request objects such as {\"url\":\"https://acme.com\"}.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxPagesPerSite": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Crawl budget per site. Pages are ranked by how likely they are to hold contacts (contact, kontakt, impressum, contacto, about, team, ...) in 12+ languages, so a small budget still lands on the right pages. Cost does not change with this number - you pay per website, not per page.",
            "default": 12
          },
          "stopWhenEmailFound": {
            "title": "Stop early once a company email is found",
            "type": "boolean",
            "description": "Speed switch for very large lists: stop crawling a site the moment an email on that company's own domain turns up. Off by default, because the price is per website and not per page - so the full crawl costs the same and also returns phones, social profiles and the contact page URL.",
            "default": false
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip paths the site disallows for generic crawlers. On by default. Turning it off can raise yield on sites with blanket Disallow rules - that choice, and its compliance implications, are yours.",
            "default": true
          },
          "verificationLevel": {
            "title": "Email verification",
            "enum": [
              "none",
              "mx",
              "smtp"
            ],
            "type": "string",
            "description": "none: extract only. mx (default, free): check the address domain actually publishes mail servers, so dead domains are flagged. smtp: additionally ask the mail server whether the mailbox exists, with catch-all detection so a meaningless 'accepted' is never sold as proof. SMTP checks are slower and billed separately.",
            "default": "mx"
          },
          "outputMode": {
            "title": "Output shape",
            "enum": [
              "website",
              "contact"
            ],
            "type": "string",
            "description": "website: one row per website, with every email in an array (best for enrichment and spreadsheets). contact: one row per email address (best for importing straight into a CRM or a mail-merge tool).",
            "default": "website"
          },
          "maxWebsites": {
            "title": "Max websites per run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Safety cap on how many websites one run processes, in case a huge list is pasted by mistake.",
            "default": 1000
          },
          "websiteConcurrency": {
            "title": "Websites in parallel",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many websites are scanned at the same time.",
            "default": 8
          },
          "pageConcurrency": {
            "title": "Pages in parallel per website",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many pages of a single site are fetched at the same time. Lower this if a target rate-limits you.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Per-request timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Give up on a single page after this long. Raise it only if slow sites come back empty.",
            "default": 15
          },
          "useProxy": {
            "title": "Use a proxy",
            "type": "boolean",
            "description": "Route page fetches through Apify Proxy. Off by default because most company sites do not need it. Turn on if you see many 403s or unreachable results on sites that clearly work in a browser.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Which proxy group to use when 'Use a proxy' is on. Residential is the most reliable against WAFs; datacenter is cheaper.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}