{
  "openapi": "3.0.1",
  "info": {
    "title": "B2B People Search API - Email and Mobile Number Enrichment",
    "description": "Search a B2B database of people and companies by job title, seniority, department, country, industry, headcount, revenue, technologies and funding, then enrich them in bulk with verified work email addresses, mobile phone numbers and job history. Pay per result. Bring your own API key.",
    "version": "0.1",
    "x-build-id": "u5aX7IQF6vfvrVnVD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~b2b-people-search-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-b2b-people-search-api",
        "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/nabeelbaghoor~b2b-people-search-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-b2b-people-search-api",
        "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/nabeelbaghoor~b2b-people-search-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-b2b-people-search-api",
        "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": {
          "mode": {
            "title": "What to do",
            "enum": [
              "peopleSearch",
              "companySearch",
              "peopleEnrich",
              "companyEnrich",
              "filters",
              "credits"
            ],
            "type": "string",
            "description": "People search finds the people matching your filters. Company search finds the accounts. People enrichment takes people you already have and appends verified work email addresses and mobile numbers. Company enrichment takes domains and appends firmographics and funding. Filters lists the values this provider accepts for the list filters below. Credits reports the balance left on your key.",
            "default": "peopleSearch"
          },
          "jobTitles": {
            "title": "Job titles",
            "type": "array",
            "description": "Job titles to match, one per line. The provider expands these by acronym and meaning, so \"VP Sales\" also reaches \"Vice President of Sales\". Use exact job titles below when you need the literal string instead.",
            "items": {
              "type": "string"
            }
          },
          "exactJobTitles": {
            "title": "Exact job titles",
            "type": "array",
            "description": "Job titles to match literally, one per line, with no expansion by acronym or meaning. Use this when the loose match pulls in adjacent roles you do not want.",
            "items": {
              "type": "string"
            }
          },
          "seniorities": {
            "title": "Seniority",
            "type": "array",
            "description": "Seniority levels to keep, one per line, such as Founder, C-Level or Director. This provider serves its own list of accepted values: run the filters mode once to write them all to a dataset, then copy the ones you need.",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Departments to keep, one per line. Run the filters mode to see every value this provider accepts.",
            "items": {
              "type": "string"
            }
          },
          "personCountries": {
            "title": "Person countries",
            "type": "array",
            "description": "Two letter country codes for where the person is, one per line, such as us, gb or fr. Case does not matter.",
            "items": {
              "type": "string"
            }
          },
          "personCountriesExcluded": {
            "title": "Person countries to exclude",
            "type": "array",
            "description": "Two letter country codes to rule out, one per line.",
            "items": {
              "type": "string"
            }
          },
          "personStates": {
            "title": "Person states",
            "type": "array",
            "description": "States or regions the person is in, one per line, written as country:code, for example us:CA. The country prefix is required because a bare state code means different places in different countries.",
            "items": {
              "type": "string"
            }
          },
          "personStatesExcluded": {
            "title": "Person states to exclude",
            "type": "array",
            "description": "States to rule out, one per line, written the same way as above.",
            "items": {
              "type": "string"
            }
          },
          "previousCompanyDomains": {
            "title": "Previous employer domains",
            "type": "array",
            "description": "Only people who used to work at these company domains, one per line. Alumni of an account you already sell to are usually the warmest route into a new one.",
            "items": {
              "type": "string"
            }
          },
          "jobChangePeriodInDays": {
            "title": "Changed job within days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only people who changed job inside this many days. Someone ninety days into a new role is still choosing their tools, which is why this filter outperforms most others on reply rate."
          },
          "peoplePerCompany": {
            "title": "People per company",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Cap how many people come back from any one company, up to 40. This is what stops a single large employer filling the whole result set."
          },
          "companyDomains": {
            "title": "Company domains",
            "type": "array",
            "description": "Company domains, one per line. In the searches this restricts results to these companies. In people enrichment it identifies the employer alongside a name. In company enrichment it is the list of companies to enrich. A pasted URL is reduced to the bare hostname.",
            "items": {
              "type": "string"
            }
          },
          "companyDomainsExcluded": {
            "title": "Company domains to exclude",
            "type": "array",
            "description": "Company domains to rule out, one per line, such as your own and your existing customers.",
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Company names, one per line, for when you know the employer but not the domain.",
            "items": {
              "type": "string"
            }
          },
          "companyCountries": {
            "title": "Company countries",
            "type": "array",
            "description": "Two letter country codes for where the company is, one per line. Use this rather than person country when the buying decision sits at headquarters.",
            "items": {
              "type": "string"
            }
          },
          "industries": {
            "title": "Industries",
            "type": "array",
            "description": "Industries to keep, one per line. Run the filters mode to see every value this provider accepts.",
            "items": {
              "type": "string"
            }
          },
          "industriesExcluded": {
            "title": "Industries to exclude",
            "type": "array",
            "description": "Industries to rule out, one per line.",
            "items": {
              "type": "string"
            }
          },
          "employeeCountFrom": {
            "title": "Headcount from",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest company headcount to include."
          },
          "employeeCountTo": {
            "title": "Headcount to",
            "minimum": 0,
            "type": "integer",
            "description": "Largest company headcount to include."
          },
          "revenueFrom": {
            "title": "Revenue from",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest company revenue to include, as a plain number."
          },
          "revenueTo": {
            "title": "Revenue to",
            "minimum": 0,
            "type": "integer",
            "description": "Largest company revenue to include, as a plain number."
          },
          "technologies": {
            "title": "Technologies used",
            "type": "array",
            "description": "Only companies running these technologies, one per line. Technographics are what turn a generic list into one where the first line of the email is about something the buyer already owns.",
            "items": {
              "type": "string"
            }
          },
          "technologiesExcluded": {
            "title": "Technologies to exclude",
            "type": "array",
            "description": "Rule out companies running these technologies, one per line, such as a competitor they already bought.",
            "items": {
              "type": "string"
            }
          },
          "technologyCategories": {
            "title": "Technology categories",
            "type": "array",
            "description": "Whole categories of technology rather than named products, one per line. Run the filters mode to see the accepted values.",
            "items": {
              "type": "string"
            }
          },
          "technologyCategoriesExcluded": {
            "title": "Technology categories to exclude",
            "type": "array",
            "description": "Technology categories to rule out, one per line.",
            "items": {
              "type": "string"
            }
          },
          "companyKeywords": {
            "title": "Company keywords",
            "type": "array",
            "description": "Words that must appear in the company's description, one per line.",
            "items": {
              "type": "string"
            }
          },
          "companyKeywordsExcluded": {
            "title": "Company keywords to exclude",
            "type": "array",
            "description": "Words that must not appear in the company's description, one per line.",
            "items": {
              "type": "string"
            }
          },
          "naicsCodes": {
            "title": "NAICS codes",
            "type": "array",
            "description": "NAICS industry codes to include, one per line. Use these when you need an official classification rather than the provider's own industry labels.",
            "items": {
              "type": "string"
            }
          },
          "naicsCodesExcluded": {
            "title": "NAICS codes to exclude",
            "type": "array",
            "description": "NAICS industry codes to rule out, one per line.",
            "items": {
              "type": "string"
            }
          },
          "yearFoundedFrom": {
            "title": "Founded from",
            "minimum": 1800,
            "type": "integer",
            "description": "Earliest founding year to include."
          },
          "yearFoundedTo": {
            "title": "Founded to",
            "minimum": 1800,
            "type": "integer",
            "description": "Latest founding year to include."
          },
          "departmentSizes": {
            "title": "Department headcount",
            "type": "array",
            "description": "Size of a named department, one per line, written as department:min-max, for example sales:10-50. A company with fifty engineers and two marketers is a different buyer from the reverse, even at the same total headcount.",
            "items": {
              "type": "string"
            }
          },
          "profileUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "Profile URLs to enrich, one per line. This is the most accurate input for people enrichment, because it identifies exactly one person rather than a name that several people share. Tracking parameters are stripped automatically.",
            "items": {
              "type": "string"
            }
          },
          "fullNames": {
            "title": "Full names",
            "type": "array",
            "description": "Full names to enrich, one per line. A name alone cannot be looked up, so each name is paired with each company domain or company name above: ten names and one company is ten records. The last word is treated as the surname.",
            "items": {
              "type": "string"
            }
          },
          "includeEmail": {
            "title": "Return email addresses",
            "type": "boolean",
            "description": "Ask the provider for work email addresses. On by default, since an enrichment with no address is rarely what anyone wanted.",
            "default": true
          },
          "includeMobile": {
            "title": "Return mobile numbers",
            "type": "boolean",
            "description": "Ask the provider for mobile phone numbers. These come out of a separate credit pool from email, so leave this off unless you will call.",
            "default": false
          },
          "includeProfileUrl": {
            "title": "Return profile URLs",
            "type": "boolean",
            "description": "Ask the provider to resolve each person's profile URL.",
            "default": false
          },
          "includeJobHistory": {
            "title": "Return job history",
            "type": "boolean",
            "description": "Ask the provider for each person's previous roles, with company, title and dates. This is how you tell a two month tenure from a ten year one before you write the first line.",
            "default": false
          },
          "acceptedEmailType": {
            "title": "Which addresses to accept",
            "enum": [
              "",
              "professional",
              "personal"
            ],
            "type": "string",
            "description": "Restrict enrichment to professional or to personal addresses. Leave empty to accept whatever the provider finds. Contacting people at a personal address needs a lawful basis of its own.",
            "default": ""
          },
          "skipMobileWithoutEmail": {
            "title": "Skip mobile lookup when no email is found",
            "type": "boolean",
            "description": "Do not spend a mobile credit on a person whose email address could not be found. Failing to find an address usually means the record is thin, and the mobile lookup rarely rescues it.",
            "default": false
          },
          "pageSize": {
            "title": "Results per page",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many records the provider returns per search request, up to 200. Larger pages mean fewer requests against your rate limit.",
            "default": 200
          },
          "batchSize": {
            "title": "Records per enrichment job",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many records go into one enrichment job. The provider accepts up to 10000 people or 500 companies per job, and the ceiling for the mode you are running is applied automatically. Leave empty to use the maximum."
          },
          "jobTimeoutSeconds": {
            "title": "Job timeout in seconds",
            "minimum": 30,
            "maximum": 21600,
            "type": "integer",
            "description": "How long to wait for one enrichment job to finish before giving up. Large batches take minutes, so this needs headroom; the actor polls with a widening interval and reports the percentage complete as it waits.",
            "default": 900
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Pace the run under your plan's rate limit. This provider allows a small number of requests per second, so the actor spaces them evenly rather than sending bursts.",
            "default": 300
          },
          "skipNotFound": {
            "title": "Skip unresolved inputs",
            "type": "boolean",
            "description": "Leave inputs that resolved to nothing out of the dataset. They are kept by default, because knowing which people the provider has nothing on is what makes a run auditable. Unresolved rows are never charged for either way.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Hard cap on rows, and therefore on spend and run time.",
            "default": 100
          },
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own API key for the people and company data API, taken from your provider account. Stored as a secret and never written to a log. You can also supply it as the DATA_API_KEY environment secret instead."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}