{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Contact & Email Extractor — Verified Emails + Socials",
    "description": "Turn a list of website URLs into clean CRM rows: verified emails (MX-checked, role-tagged), E.164 phones, and social profiles — one de-duplicated row per company. You pay only per company we find a real contact for; empty and failed sites are free. Junk addresses and numbers are filtered out.",
    "version": "0.1",
    "x-build-id": "1bNbl9O12jbKngJR0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vonsensey~website-contact-email-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vonsensey-website-contact-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/vonsensey~website-contact-email-extractor/runs": {
      "post": {
        "operationId": "runs-sync-vonsensey-website-contact-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/vonsensey~website-contact-email-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-vonsensey-website-contact-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": "Websites",
            "type": "array",
            "description": "The company websites to extract contacts from. Paste full URLs or bare domains — both work. Several URLs for the same company collapse into ONE result row, and you are charged once for it.",
            "default": [
              {
                "url": "https://apify.com"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "domains": {
            "title": "Domains (plain text list)",
            "type": "array",
            "description": "Optional alternative to the field above for pasting a plain list of domains (e.g. acme.io, berg.se). Merged with Websites and de-duplicated by company domain.",
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerDomain": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Hard cap on pages crawled per company. The crawler spends this budget on the highest-value pages first (imprint, contact, about, team) rather than crawling blindly, so a low number still finds the good addresses. Total pages for the run can never exceed websites × this number — runaway crawls are impossible.",
            "default": 10
          },
          "verifyEmails": {
            "title": "Verify emails",
            "type": "boolean",
            "description": "Check every email's domain for a working mail exchanger (MX/DNS) and flag disposable, free-provider, and shared role inboxes. Included in the per-result price — there is no extra charge. Note: this is a domain-level deliverability check, not a per-mailbox SMTP probe.",
            "default": true
          },
          "roleFilter": {
            "title": "Only these contact roles",
            "type": "array",
            "description": "Keep only emails classified as these roles. Leave empty to return every address. A company whose contacts are all filtered out becomes a free, unbilled row.",
            "items": {
              "type": "string",
              "enum": [
                "executive",
                "personal",
                "sales",
                "marketing",
                "support",
                "hr",
                "finance",
                "legal",
                "info",
                "other"
              ],
              "enumTitles": [
                "Executive (founder, CEO, owner)",
                "Named person (first.last)",
                "Sales / business development",
                "Marketing / press",
                "Support / service",
                "HR / careers",
                "Finance / billing",
                "Legal / privacy",
                "Generic inbox (info@, contact@)",
                "Other"
              ]
            },
            "default": []
          },
          "excludeGenericEmails": {
            "title": "Decision-makers only",
            "type": "boolean",
            "description": "Shortcut that keeps only executive and named-person addresses, dropping every generic inbox (info@, support@, noreply@). Overrides the role list above.",
            "default": false
          },
          "skipDomainsWithoutContacts": {
            "title": "Hide websites with no contacts",
            "type": "boolean",
            "description": "By default a website with no contacts still returns a free row explaining why (dead domain, blocked, nothing published), which makes gaps in your list auditable. Turn this on to omit those rows entirely. Either way, they are never charged.",
            "default": false
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip pages disallowed by each site's robots.txt. Off by default because many sites disallow crawlers wholesale, which would return no contacts for pages that are publicly visible in any browser.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many pages to fetch in parallel across all websites. Lower it if you are crawling a small number of sites and want to be gentler on them.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy on automatic selection is the default: it picks a datacenter IP, which is enough for ordinary company websites and is what keeps the price low. It also works on every Apify plan — pinning a specific proxy group would fail for accounts that do not have it. Switch to residential only if you see 'blocked' rows from sites behind aggressive bot protection.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}