{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Lead Intelligence — Find the Right Person, Verified",
    "description": "Website Lead Intelligence turns company websites into send-ready B2B leads — find the right person, verified emails, decision-makers, buying committee, lead scoring and a clear next action for cold email outreach, CRM enrichment and sales prospecting.",
    "version": "1.0",
    "x-build-id": "YCGU8zoy3xJ6yMXmL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/citrine_venus~website-lead-intelligence-find-the-right-person-verified/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-citrine_venus-website-lead-intelligence-find-the-right-person-verified",
        "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/citrine_venus~website-lead-intelligence-find-the-right-person-verified/runs": {
      "post": {
        "operationId": "runs-sync-citrine_venus-website-lead-intelligence-find-the-right-person-verified",
        "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/citrine_venus~website-lead-intelligence-find-the-right-person-verified/run-sync": {
      "post": {
        "operationId": "run-sync-citrine_venus-website-lead-intelligence-find-the-right-person-verified",
        "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": {
          "goal": {
            "title": "🎯 Goal — what is this run for?",
            "enum": [
              "quick-outreach",
              "high-deliverability",
              "max-coverage"
            ],
            "type": "string",
            "description": "Pick the outcome you care about and every technical dial below is set for you automatically. Leave unset to configure 'Preset' and 'Confidence mode' yourself."
          },
          "preset": {
            "title": "⚙️ Preset — how deep to scan",
            "enum": [
              "auto",
              "fast",
              "balanced",
              "maximum"
            ],
            "type": "string",
            "description": "Controls crawl depth, email verification, missing-email fill-in, and the real-browser fallback all at once. 'Auto' (recommended) lets your Goal choose this for you.",
            "default": "auto"
          },
          "confidenceMode": {
            "title": "🎚️ Confidence mode — risk appetite",
            "enum": [
              "safe",
              "balanced",
              "aggressive"
            ],
            "type": "string",
            "description": "How conservative to be about which emails make it into your list. Independent from the preset above. Use 'Safe' for cold outreach where bounces hurt sender reputation. Leave unset to use your Goal's default (or 'balanced' if no Goal set)."
          },
          "urls": {
            "title": "🔗 Website URLs (bulk supported)",
            "type": "array",
            "description": "✨ The main input. One company website per line — paste as many as you like (up to 500). Every domain is deduplicated automatically and produces exactly one lead record. Leave empty if you'd rather discover websites from business names or a footer phrase below.",
            "items": {
              "type": "string"
            }
          },
          "knownNames": {
            "title": "🏢 Business names (instead of URLs)",
            "type": "array",
            "description": "Don't have a URL list? Paste business names and each one is resolved to its official website via web search before scraping. Combine with 'Name search suffix' below to disambiguate common names.",
            "items": {
              "type": "string"
            }
          },
          "footerPhrases": {
            "title": "📝 Footer / marketing phrases",
            "type": "array",
            "description": "Distinctive phrases that identify a niche (e.g. \"we buy land in any state\"). Each phrase is searched as an exact match and every organic result becomes a candidate website — great for finding an entire niche of similar businesses at once.",
            "items": {
              "type": "string"
            }
          },
          "nameSuffix": {
            "title": "➕ Name search suffix (optional)",
            "type": "string",
            "description": "Appended to every business-name search to disambiguate common names (e.g. \"plumbing\", \"real estate\", \"law firm\"). Leave blank to search names exactly as given.",
            "default": ""
          },
          "discoveryCountry": {
            "title": "🌍 Discovery country",
            "enum": [
              "US",
              "UK",
              "CA",
              "AU",
              "EU"
            ],
            "type": "string",
            "description": "Used both to localize the web search and to filter discovered domains by country-code TLD. Only relevant when using business names or footer phrases above — ignored for direct URLs.",
            "default": "US"
          },
          "maxResultsPerQuery": {
            "title": "📊 Max discovery results per query",
            "minimum": 10,
            "maximum": 100,
            "type": "integer",
            "description": "How many search results to collect for each footer-phrase query.",
            "default": 50
          },
          "maxDiscoveredDomains": {
            "title": "🔢 Max discovered domains",
            "minimum": 10,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on how many websites can be discovered from names/phrases in one run (doesn't limit websites pasted directly into 'Website URLs').",
            "default": 1000
          },
          "excludeDomains": {
            "title": "🚫 Domains to always skip",
            "type": "array",
            "description": "A permanent blocklist — these domains are skipped even if they show up via URL input or discovery.",
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerDomain": {
            "title": "📄 Max pages scanned per website",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Ceiling on how many pages of one website are read (home, contact, about, team, and similar). Leave blank to use the selected preset's value. Higher finds more but takes longer per site."
          },
          "deepScan": {
            "title": "🔬 Deep scan (extra legal/imprint pages)",
            "type": "boolean",
            "description": "Also probes legal/imprint/impressum/support pages — useful for EU sites, which often publish contact details only there. Leave the toggle in its middle ('use preset') state to let the preset decide."
          },
          "includeNames": {
            "title": "🙋 Extract named contacts",
            "type": "boolean",
            "description": "Look for real people (name + job title) on team/about pages — this Actor's core job. Turn off only if you just want emails/phones and don't care who they belong to.",
            "default": true
          },
          "includeSocials": {
            "title": "🔗 Extract social profile links",
            "type": "boolean",
            "description": "Collect LinkedIn, X/Twitter, Facebook, Instagram, YouTube and 8 other platform links found on each site.",
            "default": true
          },
          "sitemapDiscovery": {
            "title": "🗺️ Sitemap-assisted discovery",
            "type": "boolean",
            "description": "Parses /sitemap.xml to find About/Team/Contact-shaped pages the standard probe list wouldn't guess — helps on sites with an unusual structure.",
            "default": true
          },
          "customProbePaths": {
            "title": "➕ Extra paths to probe on every site",
            "type": "array",
            "description": "Additional page paths (e.g. \"/meet-the-team\") checked on every website, on top of the built-in probe list.",
            "items": {
              "type": "string"
            }
          },
          "respectRobotsTxt": {
            "title": "🤝 Respect robots.txt",
            "type": "boolean",
            "description": "Honor each site's robots.txt disallow rules. Recommended to leave on — it's both good etiquette and reduces the odds of being blocked.",
            "default": true
          },
          "crawlDelayMs": {
            "title": "🐢 Politeness delay per site (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Minimum wait between two requests to the *same* domain. Raise this for smaller sites you want to be extra polite to.",
            "default": 0
          },
          "verifyEmails": {
            "title": "✅ Verify email deliverability",
            "type": "boolean",
            "description": "Runs a real deliverability check (MX + mailbox probe, or a paid provider below) on every email found, and flags catch-all domains. Leave the toggle in its middle ('use preset') state to let the preset decide."
          },
          "emailVerificationProvider": {
            "title": "🔌 Verification provider",
            "enum": [
              "mx_smtp",
              "zerobounce",
              "none"
            ],
            "type": "string",
            "description": "Free MX + mailbox probe by default. Switch to a paid provider for higher accuracy if you supply its API key as an environment variable.",
            "default": "mx_smtp"
          },
          "fillMissingEmails": {
            "title": "🧩 Fill in missing emails for named contacts",
            "type": "boolean",
            "description": "When a real person was found with no published email, generate their likely address from the company's detected naming pattern and verify it. Leave the toggle in its middle ('use preset') state to let the preset decide."
          },
          "maxEmailPatternsToVerify": {
            "title": "🔢 Max generated emails to verify per site",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Caps how many pattern-generated address guesses get a verification check on a single website, to keep verification calls bounded.",
            "default": 3
          },
          "enableProFallback": {
            "title": "🎭 Real-browser fallback for JS-heavy sites",
            "type": "boolean",
            "description": "When a React/Vue/Next.js/Angular site's static HTML comes back empty, re-renders that page in a real headless browser to recover contacts a plain HTTP fetch would miss. Leave the toggle in its middle ('use preset') state to let the preset decide."
          },
          "compareToPrevRun": {
            "title": "📈 Monitor for changes since the last run",
            "type": "boolean",
            "description": "Compares every domain against its snapshot from a previous run with the same watchlist key and adds change flags (new hire, new personal email, tier upgrade, and more) plus an account-momentum score. Persists across runs automatically.",
            "default": false
          },
          "monitorStateKey": {
            "title": "🔑 Watchlist key",
            "type": "string",
            "description": "Name this watchlist so scheduled re-runs compare against the right history. Leave blank to auto-derive one from the input domain list."
          },
          "autoFilter": {
            "title": "🧮 Auto-filter results",
            "enum": [
              "none",
              "send-now-only",
              "safe-only",
              "max-leads"
            ],
            "type": "string",
            "description": "Optionally trim the output down to only the leads that matter for your use case.",
            "default": "none"
          },
          "outputProfile": {
            "title": "📦 Output detail level",
            "enum": [
              "full",
              "standard",
              "minimal"
            ],
            "type": "string",
            "description": "'Full' keeps every field (recommended for automation). 'Standard' drops agent-diagnostic fields. 'Minimal' keeps just the fields you need to decide who to contact.",
            "default": "full"
          },
          "minLeadScore": {
            "title": "📉 Minimum lead score (0-100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Drop any website scoring below this. Leave blank for no minimum."
          },
          "requirePersonalEmail": {
            "title": "👤 Require a personal (non-generic) email",
            "type": "boolean",
            "description": "Only keep leads with a real person's email address, not just info@/hello@-style inboxes. Leave the toggle in its middle ('use preset') state to default to the confidence mode's setting."
          },
          "companyTypes": {
            "title": "🏷️ Restrict to company types",
            "type": "array",
            "description": "Only keep websites classified as one of the selected industries. Leave empty to keep every industry.",
            "items": {
              "type": "string",
              "enum": [
                "saas",
                "agency",
                "consulting",
                "legal",
                "accounting",
                "ecommerce",
                "healthcare",
                "real_estate",
                "financial_services",
                "manufacturing",
                "education",
                "nonprofit",
                "construction",
                "hospitality",
                "media",
                "recruitment",
                "logistics",
                "technology"
              ],
              "enumTitles": [
                "SaaS",
                "Agency",
                "Consulting",
                "Legal",
                "Accounting",
                "E-commerce",
                "Healthcare",
                "Real Estate",
                "Financial Services",
                "Manufacturing",
                "Education",
                "Nonprofit",
                "Construction",
                "Hospitality",
                "Media",
                "Recruitment",
                "Logistics",
                "Technology"
              ]
            }
          },
          "outputFormat": {
            "title": "💾 Combined output file format",
            "enum": [
              "json",
              "ndjson",
              "csv"
            ],
            "type": "string",
            "description": "Format of the single combined results file saved to this run's key-value store (in addition to the live dataset table).",
            "default": "json"
          },
          "exportFormats": {
            "title": "📤 Ready-to-import CSV exports",
            "type": "array",
            "description": "Generate a ready-to-import CSV for one or more outreach tools, saved to this run's key-value store.",
            "items": {
              "type": "string",
              "enum": [
                "instantly",
                "smartlead",
                "lemlist",
                "apollo",
                "hubspot",
                "salesforce",
                "mailshake",
                "outreach",
                "woodpecker",
                "generic"
              ],
              "enumTitles": [
                "Instantly",
                "Smartlead",
                "Lemlist",
                "Apollo",
                "HubSpot",
                "Salesforce",
                "Mailshake",
                "Outreach.io",
                "Woodpecker",
                "Generic CSV"
              ]
            }
          },
          "crmWebhookUrl": {
            "title": "🔌 CRM webhook URL",
            "type": "string",
            "description": "Every lead is POSTed here as it's produced (2 retries; auto-disabled after 5 consecutive failures so a dead endpoint can't stall the run)."
          },
          "crmFormat": {
            "title": "📋 CRM payload format",
            "enum": [
              "generic-json",
              "hubspot",
              "salesforce"
            ],
            "type": "string",
            "description": "Shape of the JSON body sent to the CRM webhook above.",
            "default": "generic-json"
          },
          "crmOnlyTierA": {
            "title": "🥇 Only push Tier-A leads to CRM",
            "type": "boolean",
            "description": "Skip the CRM webhook for anything below the top decision tier.",
            "default": false
          },
          "notionConnector": {
            "title": "📓 Enable Notion delivery",
            "type": "boolean",
            "description": "Posts a run digest (or one page per lead) to a Notion database. Requires the NOTION_API_KEY environment variable and a Database ID below.",
            "default": false
          },
          "notionDatabaseId": {
            "title": "🗄️ Notion database ID",
            "type": "string",
            "description": "Target database for Notion delivery."
          },
          "notionArchiveProfile": {
            "title": "📚 Notion delivery detail",
            "enum": [
              "summary",
              "per-lead"
            ],
            "type": "string",
            "description": "How much detail to post to Notion — a single digest page for the whole run, or one page per lead.",
            "default": "summary"
          },
          "slackConnector": {
            "title": "💬 Enable Slack delivery",
            "type": "boolean",
            "description": "Posts a run digest to Slack. Requires the SLACK_BOT_TOKEN environment variable.",
            "default": false
          },
          "slackChannel": {
            "title": "# Slack channel",
            "type": "string",
            "description": "Channel to post the digest to (e.g. \"#sales-leads\")."
          },
          "deliverTopN": {
            "title": "🔝 Top N leads to deliver",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many of your best leads (by pipeline rank) are included in the Notion/Slack digest.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy configuration",
            "type": "object",
            "description": "🚦 Default is NO proxy — every request goes straight to the target website. If a site ever rejects or blocks a request, the run automatically escalates step by step: 🚫 no proxy → 🖥️ datacenter proxy → 🏠 residential proxy (retrying at least 3× on residential) — then stays on residential for every remaining request for the rest of the run. Every escalation is logged clearly. Force a starting tier yourself here if you already know a target needs it.",
            "default": {
              "useApifyProxy": false
            }
          },
          "concurrency": {
            "title": "🧵 Websites processed in parallel",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many domains are crawled at the same time.",
            "default": 10
          },
          "retryAttempts": {
            "title": "🔁 Max retries per request",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many times one failed/blocked request is retried, with exponential backoff, before giving up (per proxy tier).",
            "default": 3
          },
          "retryBackoffBaseSeconds": {
            "title": "⏳ Retry backoff base (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Starting delay for exponential-jitter backoff between retries.",
            "default": 0.5
          },
          "requestTimeoutSeconds": {
            "title": "⏱️ Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for a single response before treating it as failed.",
            "default": 20
          },
          "searchProvider": {
            "title": "🔎 Discovery search provider",
            "enum": [
              "duckduckgo",
              "serper",
              "bing",
              "none"
            ],
            "type": "string",
            "description": "Used only when resolving business names or footer phrases into websites.",
            "default": "duckduckgo"
          },
          "jsRenderProvider": {
            "title": "🎭 Real-browser render engine",
            "enum": [
              "playwright",
              "none"
            ],
            "type": "string",
            "description": "Engine used by the real-browser fallback above.",
            "default": "playwright"
          },
          "userAgent": {
            "title": "🕵️ Custom User-Agent",
            "type": "string",
            "description": "Override the default User-Agent string sent with every request. Leave blank for the built-in default."
          },
          "dryRun": {
            "title": "🧪 Dry run (no network calls)",
            "type": "boolean",
            "description": "Skips every outbound request — useful for validating your input configuration without spending run time or budget.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}