{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Owners & Executives Finder - With Contacts",
    "description": "Moved to leadproof/company-people-finder (https://apify.com/leadproof/company-people-finder): the same Actor with all-inclusive pricing, verified emails and LinkedIn employees. This one is no longer updated.",
    "version": "0.0",
    "x-build-id": "CHAJWdDWSH4LmcBQg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/leadproof~business-people-enrichment/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-leadproof-business-people-enrichment",
        "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/leadproof~business-people-enrichment/runs": {
      "post": {
        "operationId": "runs-sync-leadproof-business-people-enrichment",
        "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/leadproof~business-people-enrichment/run-sync": {
      "post": {
        "operationId": "run-sync-leadproof-business-people-enrichment",
        "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": {
          "businesses": {
            "title": "Businesses",
            "type": "array",
            "description": "One object per business: {inputId, name, website, city, region, country, mapsUrl, linkedinCompanyUrl}. A row needs enough to identify a company: a website, a company profile URL, or a name together with a city, region or country. A bare name is refused for that row, because it names no particular business. Up to 200 rows. Or give `domains` instead (or as well)."
          },
          "domains": {
            "title": "Domains",
            "type": "array",
            "description": "A bare list of company domains (acme.com). Each becomes a row with the domain as its id and https://<domain>/ as its website. The shortest way to ask for every staff member of a list of companies, with targetRoles [\"all\"].",
            "items": {
              "type": "string"
            }
          },
          "targetRoles": {
            "title": "Target roles",
            "type": "array",
            "description": "Role families to look for: owner, founder, executive, partner, purchasing, operations, finance, marketing, sales, hr, it, clinical, advisor. Synonyms such as procurement, buyer, practice manager or leadership are accepted. Left empty, the run looks for owner, founder and executive. A role name we do not model is reported in coverage.unrecognizedRequestedRoles rather than guessed at. Give [\"all\"] to get every person the sources present as staff, with a role family when the title names one and without one otherwise; maxPeoplePerBusiness then defaults to 100.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Where the people come from. website: the company's own pages (team, about, contact), every person with a quoted line. linkedin: LinkedIn, through a web search for profiles that name the company and an employee list from a Store Actor (HarvestAPI when the site links its LinkedIn page, otherwise Atomus by domain), billed to your account at their prices; these people are weakly supported and carry their profile link. Both: the two are merged, one person per identity. LinkedIn alone still reads the home page once, to find the company's LinkedIn link. Independent of targetRoles: who you want, from where.",
            "items": {
              "type": "string",
              "enum": [
                "website",
                "linkedin"
              ],
              "enumTitles": [
                "Company website",
                "LinkedIn"
              ]
            },
            "default": [
              "website"
            ]
          },
          "maxPeoplePerBusiness": {
            "title": "People per business",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Most people returned per business (up to 100). Supported people beyond the limit move to candidates with the reason, so nothing is silently dropped. Left empty: 5, or 100 with targetRoles [\"all\"]. (No schema default on purpose: the platform would otherwise send 5 and hide the all-mode default.)"
          },
          "concurrency": {
            "title": "Businesses at a time",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many businesses are enriched at the same time. Rows are still pushed in input order. Each business in flight holds its own pages and starts its own child runs, so a run that stops at a limit may have started up to this many businesses beyond the last row written.",
            "default": 4
          },
          "useLinkedIn": {
            "title": "Read LinkedIn profiles",
            "type": "boolean",
            "description": "Read profile pages that were discovered on the company's own site or in search results. Profile URLs are never constructed from a person's name. Off by default: the profile reader this calls has not been verified end to end, so anything it returns or fails to return is reported as a coverage gap and never as 'nobody found'. Turn it on to pay for the attempt anyway.",
            "default": false
          },
          "linkedinStaffSearch": {
            "title": "Find staff through a LinkedIn web search",
            "type": "boolean",
            "description": "Off by default. On, one web search per business asks for linkedin.com/in profiles that name the company (up to 20 results, one Search & Read query, $0.005). A result whose headline names the company becomes a weakly supported staff member with the profile link and the headline as its title; a result that names the company only in its snippet becomes a candidate, because a snippet also lists past employers. No profile is read.",
            "default": false
          },
          "employeeProvider": {
            "title": "Employee list provider (Store Actor)",
            "enum": [
              "none",
              "auto",
              "atomus/linkedin-company-employees",
              "harvestapi/linkedin-company-employees"
            ],
            "type": "string",
            "description": "Off (none) by default. Ask a Store Actor for the company's employees and merge them with what the site published. auto asks harvestapi/linkedin-company-employees when the site links its LinkedIn company page (fresh, pinned to the exact company, $0.02 per run start + $0.003 per profile) and falls back to atomus/linkedin-company-employees by domain ($0.006 per employee, database-backed) when there is no such link or HarvestAPI returned nobody. Both run on your account and bill you at their own prices. Their rows are weakly supported (self-reported profile data this Actor did not read) and carry the provider's name in the evidence.",
            "default": "none"
          },
          "maxProviderEmployees": {
            "title": "Employees per business from the provider",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Most employees asked of the provider per business; also its spend cap there.",
            "default": 50
          },
          "findProfileLinks": {
            "title": "Find a LinkedIn profile link per person",
            "type": "boolean",
            "description": "Off by default. On, every returned person without a profile link gets one web search (\"Full Name\" \"Company\" site:linkedin.com/in). A result whose title carries the person's name is kept as profileUrls with the search evidence and a warning that it was matched by title and not read. No profile page is opened. Costs one Search & Read search per person ($0.005) on your account.",
            "default": false
          },
          "maxProfileSearchesPerBusiness": {
            "title": "Profile searches per business",
            "minimum": 0,
            "maximum": 25,
            "type": "integer",
            "description": "Most people searched for a profile link per business when findProfileLinks is on.",
            "default": 10
          },
          "verifyEmails": {
            "title": "Verify direct email addresses",
            "type": "boolean",
            "description": "Check whether the direct addresses we are about to return accept mail, using Bulk Email Verifier. Off means no verifier run is started at all. A deliverable mailbox is still not proof of whose mailbox it is.",
            "default": false
          },
          "inferEmails": {
            "title": "Infer and verify a work address per person",
            "type": "boolean",
            "description": "Off by default. On, every returned person without a published address gets a guess built from the company's own address pattern (the published lisa@, paul@ on one domain say first@; otherwise the common patterns in a fixed order), checked with the Bulk Email Verifier. Only a mailbox that accepts mail is returned, labelled origin: inferred with the pattern it came from, deliverability ok. A catch-all domain accepts everything, so nothing on it can be verified and nothing is returned. Role mailboxes (info@, sales@) are never generated. The verifier bills $0.0049 per address checked to your account; this Actor charges its email-verified event per person whose inferred address verified.",
            "default": false
          },
          "maxEmailChecksPerBusiness": {
            "title": "Verifier checks per business",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Most addresses the verifier is asked about per business when inferEmails is on. The first person on a domain with no published pattern takes up to 5 checks; every person after takes one.",
            "default": 12
          },
          "judgePeople": {
            "title": "Judge names with a model (Jev)",
            "type": "boolean",
            "description": "After the pages are read, a System One model (TypeSafe's Jev, through Apify's OpenRouter proxy) answers typed questions about each name found: is it a person, do the pages present them as working at or owning this business, and in what role when the page only implies it. It writes no text and finds no names: the readers find them, the model sorts them, and the quotes stay the page's own lines. Names it reads as not people or not staff are dropped; a role it reads for a name published without a title is returned marked as judged, never as published. Billed to your account through the proxy, a fraction of a cent per business. Off by default.",
            "default": true
          },
          "judgeModel": {
            "title": "Judge model",
            "type": "string",
            "description": "Model name on the proxy's System One route. Used only when the judge is on.",
            "default": "jev-latest"
          },
          "includeFormer": {
            "title": "Include former relationships",
            "type": "boolean",
            "description": "Off excludes people a source describes as former. People whose recency is simply unknown are still returned, marked unknown: unknown is not quietly treated as current.",
            "default": false
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "ISO 3166-1 alpha-2 code used to pin web searches, e.g. KE, US, GB. Defaults to the search dependency's own default when empty."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language tag for searches and page reads, e.g. en, sw, de.",
            "default": "en"
          },
          "renderMode": {
            "title": "Page render mode",
            "enum": [
              "http",
              "auto",
              "browser"
            ],
            "type": "string",
            "description": "Known URLs are read directly by Web Page Reader. HTTP never starts a browser; auto tries a browser when it detects a shell or challenge; browser always renders. If coverage reports page_needs_rendering, retry that business with browser. Page events currently cost $0.002 in either mode; browser compute and runtime can be higher. Auto detection is not guaranteed.",
            "default": "http"
          },
          "maxPagesPerBusiness": {
            "title": "Pages per business",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Company pages read per business, including the home page.",
            "default": 8
          },
          "maxSearchesPerBusiness": {
            "title": "Searches per business",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Web searches per business. By default a search runs only when the company's own pages named nobody in a requested role, and the first query asks for the leadership (owner OR founder OR CEO). 0 turns search off. See searchUnresolvedRoles to search for every unanswered role.",
            "default": 1
          },
          "searchUnresolvedRoles": {
            "title": "Search for every unanswered role",
            "type": "boolean",
            "description": "Off (default): web searches run only when the company's own pages named nobody in any requested role. On: one search per requested role the site did not answer, within maxSearchesPerBusiness (the behaviour before 2026-10-04). On 25 agencies the per-role searches were half of the dependency cost and added one near-duplicate record.",
            "default": false
          },
          "maxProfileReadsPerBusiness": {
            "title": "Profile reads per business",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Discovered profiles read per business.",
            "default": 3
          },
          "maxSecondsPerBusiness": {
            "title": "Seconds per business",
            "minimum": 30,
            "maximum": 900,
            "type": "integer",
            "description": "A business that reaches this limit returns what it has, with the limit named in coverage.limitsReached.",
            "default": 180
          },
          "maxPagesTotal": {
            "title": "Pages per run",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Pages read across the whole run. When it is reached the run stops starting new businesses, and the row it stopped names the limit in coverage.limitsReached.",
            "default": 200
          },
          "maxSearchesTotal": {
            "title": "Searches per run",
            "minimum": 0,
            "maximum": 600,
            "type": "integer",
            "description": "Searches run across the whole run. 0 switches searching off for every business, which is a setting rather than a limit the run reached.",
            "default": 60
          },
          "maxProfileReadsTotal": {
            "title": "Profile reads per run",
            "minimum": 0,
            "maximum": 400,
            "type": "integer",
            "description": "Profile reads across the whole run. Only used when useLinkedIn is on.",
            "default": 40
          },
          "maxRunSeconds": {
            "title": "Run time limit (seconds)",
            "minimum": 60,
            "maximum": 21600,
            "type": "integer",
            "description": "The run stops starting new businesses after this long and writes what it has. Keep it below the run timeout so the last row is written before the platform stops the run.",
            "default": 3600
          },
          "maxDependencyChargeUsd": {
            "title": "Maximum dependency spend (USD)",
            "minimum": 0.001,
            "type": "number",
            "description": "Ceiling on what the child runs this Actor starts may charge in total, in dollars and cents (0.05 is fine). Each child is started with only what is left of it as its own maximum charge, never with the whole amount. It counts, per child run, the larger of its pay-per-event charges and the platform usage it reported. It does not cover this Actor's own charges (those are bounded by this run's own maximum charge) or this Actor's own compute. Empty means each child keeps only its own per-run cap."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}