{
  "openapi": "3.0.1",
  "info": {
    "title": "B2B Contact & Email Finder — Decision Makers by Domain",
    "description": "Turn a company domain into named decision makers: full name, job title, seniority, department, LinkedIn URL and a work email built from the person's name, with a live DNS/MX check and full company firmographics attached to every contact.",
    "version": "0.0",
    "x-build-id": "nV7fcMgRarVt80NJ9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/brilliant_gum~b2b-contact-email-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-brilliant_gum-b2b-contact-email-finder",
        "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/brilliant_gum~b2b-contact-email-finder/runs": {
      "post": {
        "operationId": "runs-sync-brilliant_gum-b2b-contact-email-finder",
        "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/brilliant_gum~b2b-contact-email-finder/run-sync": {
      "post": {
        "operationId": "run-sync-brilliant_gum-b2b-contact-email-finder",
        "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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "domainToContacts",
              "search"
            ],
            "type": "string",
            "description": "domainToContacts = crawl company domains and build verified contacts. search = firmographic search (resolves supplied domains/companies into the contact pipeline; free-text firmographic querying needs the firmographic index, documented in SPEC).",
            "default": "domainToContacts"
          },
          "domains": {
            "title": "Company domains",
            "type": "array",
            "description": "Company domains to mine (domainToContacts) or to use as an employer filter (search). One per line, e.g. hubspot.com. Note: some companies (Stripe, for example) deliberately publish no team or leadership page — for those the actor returns firmographics but no named people, because there are none to read.",
            "default": [
              "hubspot.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "domainMatch": {
            "title": "Domain match",
            "enum": [
              "strict",
              "contains"
            ],
            "type": "string",
            "description": "How to match domains in search mode.",
            "default": "strict"
          },
          "jobTitles": {
            "title": "Job titles (include)",
            "type": "array",
            "description": "Include people whose title matches any of these (case-insensitive substring). e.g. VP Marketing, Head of Sales.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeJobTitles": {
            "title": "Job titles (exclude)",
            "type": "array",
            "description": "Drop people whose title matches any of these.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "seniorities": {
            "title": "Seniorities",
            "type": "array",
            "description": "Filter by seniority level. A title can hold several levels at once (\"CEO & Co-Founder\" is both c_suite and founder) — the filter matches any of them, and all labels are returned in `seniorityAll`.",
            "items": {
              "type": "string",
              "enum": [
                "founder",
                "c_suite",
                "partner",
                "vp",
                "head",
                "director",
                "manager",
                "senior",
                "entry"
              ],
              "enumTitles": [
                "Founder/Owner",
                "C-Suite",
                "Partner",
                "VP",
                "Head",
                "Director",
                "Manager",
                "Senior",
                "Entry"
              ]
            },
            "default": []
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Filter by department. A title can span several departments — the filter matches any of them, and all labels are returned in `departmentAll`.",
            "items": {
              "type": "string",
              "enum": [
                "executive",
                "engineering",
                "product",
                "sales",
                "marketing",
                "finance",
                "hr",
                "operations",
                "legal",
                "it"
              ],
              "enumTitles": [
                "Executive",
                "Engineering",
                "Product",
                "Sales",
                "Marketing",
                "Finance",
                "HR",
                "Operations",
                "Legal",
                "IT"
              ]
            },
            "default": []
          },
          "personName": {
            "title": "Person name",
            "type": "string",
            "description": "Filter/seed by a specific person name.",
            "default": ""
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Company name filter/seed.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "industries": {
            "title": "Industries",
            "type": "array",
            "description": "Industry filter (search mode).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (include)",
            "type": "array",
            "description": "Include locations (city/state/country substrings).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeLocations": {
            "title": "Locations (exclude)",
            "type": "array",
            "description": "Exclude locations.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "headcountRanges": {
            "title": "Headcount ranges",
            "type": "array",
            "description": "Company size filter (search mode).",
            "items": {
              "type": "string",
              "enum": [
                "1-10",
                "11-50",
                "51-200",
                "201-500",
                "501-1000",
                "1001-5000",
                "5001-10000",
                "10001+"
              ]
            },
            "default": []
          },
          "revenueRanges": {
            "title": "Revenue ranges",
            "type": "array",
            "description": "Company revenue filter (search mode).",
            "items": {
              "type": "string",
              "enum": [
                "<1M",
                "1-10M",
                "10-50M",
                "50-100M",
                "100-500M",
                "500M-1B",
                ">1B"
              ]
            },
            "default": []
          },
          "fundingStage": {
            "title": "Funding stage",
            "type": "array",
            "description": "Company funding stage filter (search mode).",
            "items": {
              "type": "string",
              "enum": [
                "bootstrapped",
                "pre_seed",
                "seed",
                "series_a",
                "series_b",
                "series_c",
                "series_d",
                "series_e_plus",
                "ipo",
                "acquired"
              ]
            },
            "default": []
          },
          "techStack": {
            "title": "Tech stack",
            "type": "array",
            "description": "Required technologies (search mode).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (include)",
            "type": "array",
            "description": "Include keywords found on company pages.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Keywords (exclude)",
            "type": "array",
            "description": "Exclude keywords.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "matchLogic": {
            "title": "Match logic",
            "enum": [
              "AND",
              "OR"
            ],
            "type": "string",
            "description": "Combine multiple filters with AND or OR.",
            "default": "AND"
          },
          "requireEmail": {
            "title": "Require email",
            "type": "boolean",
            "description": "Only return contacts whose email passed the checks above (drops invalid addresses).",
            "default": true
          },
          "requirePhone": {
            "title": "Require phone",
            "type": "boolean",
            "description": "Only return contacts that have a personal phone number. Note: the site crawl yields company phone numbers (company.phone), not per-person ones — with this on, domainToContacts runs usually return nothing. Useful mainly in Apollo search mode.",
            "default": false
          },
          "emailVerification": {
            "title": "Email verification",
            "enum": [
              "off",
              "mx",
              "full"
            ],
            "type": "string",
            "description": "How hard to check each address. off = syntax, role and disposable checks only, no network. mx = also a live DNS/MX lookup of the domain (does the domain accept mail at all). full = additionally attempt a mailbox-level SMTP handshake; this needs outbound port 25, which most cloud networks filter, and it falls back to mx automatically when the port is blocked. Every record reports which checks actually ran in its emailVerification object.",
            "default": "mx"
          },
          "phoneEnrichment": {
            "title": "Phone enrichment",
            "type": "boolean",
            "description": "Also collect phone numbers found on the company site into company.phone.",
            "default": false
          },
          "dedup": {
            "title": "Deduplicate",
            "type": "boolean",
            "description": "Deduplicate contacts by email + linkedinUrl.",
            "default": true
          },
          "suppressionList": {
            "title": "Suppression / DNC list",
            "type": "array",
            "description": "Emails or domains to always drop (GDPR opt-out / do-not-contact).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of contacts to output. Each contact returned is one billed record.",
            "default": 25
          },
          "maxPagesPerDomain": {
            "title": "Max pages per domain",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Crawl budget per company domain.",
            "default": 12
          },
          "roleEmailProbe": {
            "title": "Probe role/shared inboxes (opt-in)",
            "type": "boolean",
            "description": "OFF by default. When enabled, also verifies common shared inboxes (info@, sales@, support@, ...). These are NEVER counted as people and NEVER inflate the contact count — they are written to a SEPARATE 'role-inboxes' dataset with recordType='roleInbox'.",
            "default": false
          },
          "renderJs": {
            "title": "Browser render fallback (JS team pages)",
            "enum": [
              "auto",
              "always",
              "off"
            ],
            "type": "string",
            "description": "For domainToContacts. Many sites render team/about/leadership pages with JavaScript, so the HTTP crawl finds no people. 'auto' launches a real browser only when the HTTP crawl finds 0 named people; 'always' always renders; 'off' disables it.",
            "default": "auto"
          },
          "apolloApiKey": {
            "title": "Apollo API key (BYO — enables free-text search)",
            "type": "string",
            "description": "Your OWN Apollo.io master API key. Enables free-text firmographic PEOPLE search in mode=search (industry/title/seniority/size with NO seed domain). The query runs on your Apollo account/quota/ToS. Apollo returns people + firmographics; their emails are then pattern-generated and live-verified by this actor. Get a key at Apollo -> Settings -> Integrations -> API Keys."
          },
          "apolloSearchUrl": {
            "title": "Apollo search URL (optional)",
            "type": "string",
            "description": "Optional. Paste an Apollo people-search URL (app.apollo.io/#/people?...) built in Apollo's UI; its filters are parsed into the search. Requires apolloApiKey.",
            "default": ""
          },
          "apolloRevealEmails": {
            "title": "Reveal emails via Apollo (consumes credits)",
            "type": "boolean",
            "description": "Optional. Unlocks each person email through Apollo People Enrichment, which CONSUMES YOUR OWN APOLLO CREDITS. Off by default: emails are built from name patterns and checked against DNS/MX at no extra cost.",
            "default": false
          },
          "emailPatterns": {
            "title": "Email patterns",
            "type": "array",
            "description": "Patterns to generate for named people. Tokens: {first} {last} {f} {l} {domain}.",
            "default": [
              "{first}.{last}@{domain}",
              "{first}@{domain}",
              "{f}{last}@{domain}",
              "{first}{last}@{domain}",
              "{f}.{last}@{domain}",
              "{first}_{last}@{domain}",
              "{last}@{domain}",
              "{first}{l}@{domain}"
            ],
            "items": {
              "type": "string"
            }
          },
          "smtpTimeoutMs": {
            "title": "SMTP timeout (ms)",
            "minimum": 1000,
            "maximum": 30000,
            "type": "integer",
            "description": "Timeout per SMTP connection, used only by emailVerification = full. On a network that filters port 25 this is how long each blocked attempt waits.",
            "default": 8000
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy for the site crawl and the browser fallback. Residential works best on protected sites.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}