{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Enrichment from Website: Emails, Phones & Tech",
    "description": "Email extractor and company enrichment by domain: one clean row per company with emails (generic vs personal), E.164 phones, socials, tech stack, hiring signals and latest posts. Fixed price per company, hard page and time cap per site, failed sites never charged.",
    "version": "1.1",
    "x-build-id": "jZjoexO0DGRZJwpqS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cleanyield~company-enrichment-from-website/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cleanyield-company-enrichment-from-website",
        "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/cleanyield~company-enrichment-from-website/runs": {
      "post": {
        "operationId": "runs-sync-cleanyield-company-enrichment-from-website",
        "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/cleanyield~company-enrichment-from-website/run-sync": {
      "post": {
        "operationId": "run-sync-cleanyield-company-enrichment-from-website",
        "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": "Domains or website URLs",
            "type": "array",
            "description": "Company domains or website URLs, one per line. Accepts 'acme.com', 'www.acme.com', 'https://acme.com/about' or even an email like 'info@acme.com' (its domain is used). Duplicates are removed. Bulk is fine: thousands per run. Example: plausible.io Also accepts \"startUrls\" or \"urls\" (same format as other contact scrapers).",
            "items": {
              "type": "string"
            }
          },
          "sections": {
            "title": "Sections to return",
            "type": "array",
            "description": "Which parts of the company profile to collect. Fewer sections = fewer pages read and faster runs. companyName, description, language, country and address are always included. Options: contacts (emails and phones), social (LinkedIn, X, Facebook, Instagram, YouTube, TikTok, GitHub), technologies (tech stack), hiring (careers page, ATS, open roles), posts (latest blog posts). Default: all. Example: [\"contacts\", \"social\"]",
            "items": {
              "type": "string",
              "enum": [
                "contacts",
                "social",
                "technologies",
                "hiring",
                "posts"
              ],
              "enumTitles": [
                "Contacts (emails and phones)",
                "Social profiles",
                "Technologies (tech stack)",
                "Hiring signals (careers, ATS, open roles)",
                "Latest blog posts"
              ]
            },
            "default": [
              "contacts",
              "social",
              "technologies",
              "hiring",
              "posts"
            ]
          },
          "includePersonalEmails": {
            "title": "Include personal emails",
            "type": "boolean",
            "description": "Off by default (GDPR-friendly): only generic and role inboxes are returned (info@, hello@, sales@, ventas@, support@...). Emails that look like a person's (jane@, j.smith@) are omitted and only counted in personalEmailsOmitted. Turn on to include them, each marked with type 'personal'. If you turn it on, you are responsible for having a legal basis to process them.",
            "default": false
          },
          "maxPagesPerDomain": {
            "title": "Max pages per domain",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Hard cap of pages read per company: the home page plus the pages most likely to have contact data (contact, legal notice/Impressum, privacy policy, about, team, terms) and the careers, blog/feed and sitemap pages, all found through same-site links and common paths in English, Spanish, Portuguese, German, French and Italian. Default 10 (median 1.8 s per company). The price per company does not change with this value.",
            "default": 10
          },
          "maxPosts": {
            "title": "Max blog posts per company",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "How many of the latest blog posts (title, URL, ISO date) to return per company, from its RSS/Atom feed or blog page. 0 disables posts. Example: 5.",
            "default": 5
          },
          "domainTimeoutSecs": {
            "title": "Time limit per domain (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Maximum time spent on one company. When reached, the Actor returns what it already found (if valid). Keeps sync calls from Clay, n8n or Make under ~20 s. Example: 15.",
            "default": 15
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many companies are returned. Use it to cap cost on big lists; you only pay for companies actually returned. Leave empty for no limit. Example: 1000."
          },
          "maxConcurrency": {
            "title": "Domains in parallel",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many companies are processed at the same time (each one on its own host, with at most a few requests in parallel per site). Example: 10.",
            "default": 10
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "On by default: pages disallowed by the site's robots.txt for all crawlers are not read, and sites that disallow everything are reported as robots_disallowed (not charged).",
            "default": true
          },
          "proMode": {
            "title": "Pro mode (buying signals, scores, AI insight)",
            "type": "boolean",
            "description": "One checkbox for all the extras: buying-intent score 0–100 with the signals behind it (hiring, open roles, recent posts, sales/marketing tools, and in monitor mode new tools, new posts or started hiring), estimated company size, ICP fit score against your ideal customer, a 'why now' line for sales, the trend since you started monitoring, and a one-sentence AI insight per company. Charged as an extra event per company (see Pricing). Off by default.",
            "default": false
          },
          "idealCustomer": {
            "title": "Ideal customer profile (Pro mode)",
            "type": "object",
            "description": "Optional, used in Pro mode to compute icpFitScore (0–100 = share of your criteria that the company meets). Keys (all optional): countries (ISO-2 list), languages (ISO 639-1 list), technologies (any of these, e.g. [\"Shopify\",\"HubSpot\"]), excludeTechnologies, mustBeHiring, minOpenRoles, keywords (in name or description), sizes ([\"11-50\",\"51-200\"]), mustHaveContact."
          },
          "monitorMode": {
            "title": "Monitor mode (only new or changed companies)",
            "type": "boolean",
            "description": "For scheduled runs: remember each company's last profile and output only companies that are new or changed since the previous run, with a list of changes (started hiring, open roles changed, technology added/removed, new blog post, contact added/removed, social profile changed). You pay only for new/changed companies. Schedule the Actor daily or weekly from the Schedules tab.",
            "default": false
          },
          "monitorStateName": {
            "title": "Monitor state name",
            "type": "string",
            "description": "Optional name of the storage that keeps the previous profiles. Use the same name across scheduled runs to compare against them. Leave empty to derive it automatically from the domain list and sections. Lowercase letters, numbers and hyphens only. Example: my-accounts-weekly."
          },
          "notifyWebhookUrl": {
            "title": "Webhook URL for alerts",
            "type": "string",
            "description": "Optional. When monitor mode finds changes, POST a JSON summary (companies and their changes) to this URL (works with Zapier, Make, n8n). Example: https://hooks.zapier.com/hooks/catch/123/abc"
          },
          "notifySlackWebhookUrl": {
            "title": "Slack webhook URL for alerts",
            "type": "string",
            "description": "Optional. Slack incoming-webhook URL to receive a message when monitor mode finds changes, e.g. 'Acme (acme.com): Started hiring (12 open roles); Added HubSpot'. Example: https://hooks.slack.com/services/T000/B000/XXXX"
          },
          "savedListName": {
            "title": "Saved list name",
            "type": "string",
            "description": "Optional. Give your list of companies a name and the Actor remembers it: the next runs (for example scheduled ones) enrich the saved list plus any new domains you add, without pasting it again."
          },
          "saveList": {
            "title": "Add new domains to the saved list",
            "type": "boolean",
            "description": "When a saved list name is set, add the domains of this run to it (on by default).",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. By default company websites are read directly (no proxy), which works for almost all sites and keeps cost low. Sites that block automated requests are reported as blocked and not charged; the Actor never tries to bypass bot challenges. Example: {\"useApifyProxy\": false}",
            "default": {
              "useApifyProxy": false
            }
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "standard",
              "leader-compatible"
            ],
            "type": "string",
            "description": "'standard' (default): our clean company profile. 'leader-compatible': the field names popular contact scrapers use (emails and phones as string lists, linkedIns, twitters, facebooks, instagrams, youtubes, tiktoks, pinterests, whatsapps...), one row per company, with our extra fields next to them (emailDetails, phoneDetails, technologies, hiring...). Use it to switch without changing your integration.",
            "default": "standard"
          },
          "startUrls": {
            "title": "Start URLs (alias of domains)",
            "type": "array",
            "description": "Same as \"domains\", accepted so you can reuse the input of other contact scrapers ([{\"url\": \"https://acme.com\"}]). Each start URL is one company.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxRequestsPerStartUrl": {
            "title": "Max pages per start URL (alias)",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Alias of maxPagesPerDomain, accepted for compatibility with other contact scrapers."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}