{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Contact Details Scraper - Emails, Phones, Socials",
    "description": "Company contact details from any list of websites: emails from domains, website phone numbers, social media links and named people per company, CRM-ready. Paste domains or a CSV link, or chain a Google Maps dataset. $0.004 per company, only when contacts are found.",
    "version": "0.1",
    "x-build-id": "sJItTPULuw8Elz0XC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lukehunter~company-contact-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lukehunter-company-contact-scraper",
        "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/lukehunter~company-contact-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lukehunter-company-contact-scraper",
        "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/lukehunter~company-contact-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lukehunter-company-contact-scraper",
        "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": "Company websites (domains, URLs or emails)",
            "type": "array",
            "description": "REQUIRED unless websitesFileUrl or datasetId is given. Company websites to read for emails, phones and people, as domains or URLs, e.g. [\"plausible.io\", \"https://www.mailerlite.com\"]. One per line or a pasted column; an email contributes its domain. De-duplicated by domain; up to 5,000 per run. Unusable entries are listed in INPUT_REPORT, never an error. Home page first, then contact, about and team pages.",
            "items": {
              "type": "string"
            }
          },
          "websitesFileUrl": {
            "title": "Website list file URL (optional)",
            "type": "string",
            "description": "Optional https link to a public .csv or .txt file of company websites, e.g. \"https://example.com/companies.csv\" (a Google Sheets \"Publish to web\" CSV link, Dropbox shared link or GitHub Raw link works). Max 5 MB / 20,000 lines; every cell is read like an entry of the list above, and the result is merged and de-duplicated with it. Must open without signing in."
          },
          "datasetId": {
            "title": "Enrich a dataset: dataset ID (optional)",
            "type": "string",
            "description": "Optional. ID of an Apify dataset whose rows have a website, typically a Google Maps Scraper run (defaultDatasetId), e.g. \"AbCdEf123456\". Each row's website is read for contacts; `source` carries the row's fields (title, placeId ...) to join back. To chain, set it to {{resource.defaultDatasetId}} in the source Actor's Integrations tab. No token needed; up to 20,000 rows. Merged with Websites and the file URL."
          },
          "datasetWebsiteField": {
            "title": "Dataset: website column (optional)",
            "type": "string",
            "description": "Name of the dataset column holding the website, exactly as spelled, e.g. \"website\". Only used with a dataset. Leave empty to auto-detect (website, websiteUrl, web, url, domain, homepage, companyWebsite, company_website, site; the first non-empty wins). Google Maps, social network and marketplace links are never read as a website."
          },
          "datasetPassthroughFields": {
            "title": "Dataset: columns to copy into `source` (optional)",
            "type": "array",
            "description": "Optional, only with datasetId. Extra dataset columns to copy into each result's `source` object, e.g. [\"title\", \"placeId\"], max 15 columns. Leave empty for the common Google Maps columns (title, placeId, address, city, countryCode, phone, categoryName, totalScore, reviewsCount, url). Values are cut at 2,000 characters. datasetRow, sourceRowCount and otherRows are always added and reserved.",
            "items": {
              "type": "string"
            }
          },
          "outputMode": {
            "title": "Output: one row per company or per contact",
            "enum": [
              "company",
              "contacts"
            ],
            "type": "string",
            "description": "\"company\" (default): one row per company with emails, phones and people as lists. \"contacts\": one flat row per email, phone or person for CRM import, e.g. type \"email\", \"phone\" or \"person\", with company columns on every row. Price is identical ($0.004 per company with a contact, never per row); Maximum companies counts companies, not rows.",
            "default": "company"
          },
          "outputFormat": {
            "title": "Output size: full or compact",
            "enum": [
              "full",
              "compact"
            ],
            "type": "string",
            "description": "\"full\" (default): every field. \"compact\": a much smaller row for AI agents, with only domain, companyName, status, emails (addresses), phones, people (name, title, email), contactPageUrl, socials found and a one-line address. Charging is identical in both formats. Example: \"compact\" when the result is read into an LLM context.",
            "default": "full"
          },
          "maxPagesPerSite": {
            "title": "Pages per website",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Pages read per website (home page included), integer 1-20, default 6. Contact and team pages are read first, in many languages. Raise for large sites, lower (e.g. 3) for speed. Each site is read at about one page per second.",
            "default": 6
          },
          "maxItems": {
            "title": "Maximum companies",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum companies to return, integer 1-5000, default 100. Also your cost cap: at most maxItems x $0.004, charged only for companies with an email, phone or named person. For a quick test use 5 (e.g. maxItems 5). Sites with nothing found, blocked or disallowed by robots.txt are delivered free and count toward the cap.",
            "default": 100
          },
          "onlyChangedSinceLastRun": {
            "title": "Only changed contacts (change mode)",
            "type": "boolean",
            "description": "true returns a company only if its contacts changed since the previous scheduled run. Default false: a normal one-off run returns every company. Agents making one-off calls should leave it false. Example: run daily on a Schedule with true; the first run delivers everything, later runs only changes (`changedFields`); unchanged companies are not charged.",
            "default": false
          },
          "stateStoreName": {
            "title": "Change mode: state store name",
            "type": "string",
            "description": "Only used when change mode is on. Name of the key-value store that remembers each company's last contact set between scheduled runs, e.g. \"company-contact-scraper-state\". Letters, numbers and hyphens only. Leave the default unless several tasks need separate histories.",
            "default": "company-contact-scraper-state"
          },
          "includePageLevelSources": {
            "title": "Include the page each contact was found on",
            "type": "boolean",
            "description": "true (default): each email and phone carries sourceUrl, the page it was found on (useful to verify a contact). Set false for smaller rows; sourceUrl is then null. Example: false for a compact CRM import.",
            "default": true
          },
          "includePeople": {
            "title": "Include the people behind the company",
            "type": "boolean",
            "description": "true (default): also return named people with job titles from team and about pages, e.g. {\"name\": \"Jane Doe\", \"title\": \"CEO\"}, plus an email or LinkedIn link only where the page itself links one. A company with only people counts as a result and is charged $0.004. Never guesses addresses. Set false for just emails, phones and social links.",
            "default": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}