{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Lead Intelligence — Find the Right Person, Verified",
    "description": "Turn company websites into ready-to-email decision-makers. Verified emails, named contacts ranked by seniority, buying-committee classification, A/B/C decision tiers, and optional scheduled monitoring + CRM auto-push to HubSpot/Salesforce. $0.15/site.",
    "version": "2.0",
    "x-build-id": "7c8K4TKO0UbQqIVxP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ryanclinton~website-contact-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ryanclinton-website-contact-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/ryanclinton~website-contact-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ryanclinton-website-contact-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/ryanclinton~website-contact-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ryanclinton-website-contact-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "goal": {
            "title": "Goal (what is this run optimizing for?)",
            "enum": [
              "quick-outreach",
              "high-deliverability",
              "max-coverage"
            ],
            "type": "string",
            "description": "Plain-English run goal — sets defaults for both `preset` and `confidenceMode`. Use this if you don't want to configure two technical dials. Manual settings still override."
          },
          "preset": {
            "title": "Preset mode (execution depth)",
            "enum": [
              "auto",
              "fast",
              "balanced",
              "maximum"
            ],
            "type": "string",
            "description": "How deep the actor scrapes. Configures verification, email fill, deep scan, and Pro browser fallback automatically. Pick `auto` if you don't want to think about settings.",
            "default": "auto"
          },
          "confidenceMode": {
            "title": "Confidence mode (risk appetite)",
            "enum": [
              "safe",
              "balanced",
              "aggressive"
            ],
            "type": "string",
            "description": "How conservative or aggressive to be about which emails end up in your output. Independent from preset. Use `safe` for cold-outreach lists where bounces hurt sender reputation. Use `aggressive` for low-stakes prospecting where you want maximum coverage including pattern-generated emails.",
            "default": "balanced"
          },
          "urls": {
            "title": "Website URLs",
            "maxItems": 500,
            "type": "array",
            "description": "List of business website URLs to scrape for contact information. One result per domain. Maximum 500 URLs per run. Leave empty if you're using business names or footer phrases instead.",
            "items": {
              "type": "string"
            }
          },
          "knownNames": {
            "title": "Business names (instead of URLs)",
            "type": "array",
            "description": "Optional. Paste a list of business names and the actor resolves each one to its website via Google before scraping. Leave URLs empty if you only have names. Combine with name suffix below to disambiguate (e.g. 'land', 'real estate').",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "footerPhrases": {
            "title": "Footer / marketing phrases",
            "type": "array",
            "description": "Optional. Distinctive phrases that identify a niche (e.g. 'we buy land in any state', 'sell your land fast for cash'). Each phrase is run as an exact-match Google query and every organic result is collected.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "nameSuffix": {
            "title": "Name search suffix (optional)",
            "type": "string",
            "description": "Appended to every business-name query to disambiguate (e.g. 'land', 'real estate', 'plumber'). Leave blank to search names verbatim.",
            "default": ""
          },
          "discoveryCountry": {
            "title": "Discovery country (for names/phrases)",
            "enum": [
              "US",
              "UK",
              "CA",
              "AU",
              "EU"
            ],
            "type": "string",
            "description": "Used for both Google country code and TLD filtering when resolving names/phrases. Domains that don't match the country's TLDs are dropped.",
            "default": "US"
          },
          "maxResultsPerQuery": {
            "title": "Max results per discovery query",
            "minimum": 10,
            "maximum": 100,
            "type": "integer",
            "description": "How many organic Google results to collect per phrase query.",
            "default": 50
          },
          "maxDiscoveredDomains": {
            "title": "Max discovered domains to scan",
            "minimum": 10,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on how many newly-discovered domains are sent through contact extraction. Controls run cost.",
            "default": 1000
          },
          "maxPagesPerDomain": {
            "title": "Max pages per domain",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of pages to crawl per website. Higher values find more contacts but cost more.",
            "default": 5
          },
          "includeNames": {
            "title": "Extract contact names",
            "type": "boolean",
            "description": "Attempt to extract people's names and job titles from team/about pages.",
            "default": true
          },
          "includeSocials": {
            "title": "Extract social links",
            "type": "boolean",
            "description": "Extract social media profile links (LinkedIn, Twitter, Facebook, etc.).",
            "default": true
          },
          "deepScan": {
            "title": "Deep scan mode",
            "type": "boolean",
            "description": "Probe common hidden pages (/imprint, /impressum, /privacy-policy, /legal, /support) that often contain emails not listed on the main contact page. Automatically increases max pages to 10."
          },
          "verifyEmails": {
            "title": "Verify email deliverability",
            "type": "boolean",
            "description": "Verify all found emails using MX record checks and disposable/role detection. Adds verified status, confidence score, and reason to each result."
          },
          "fillMissingEmails": {
            "title": "Fill missing emails",
            "type": "boolean",
            "description": "When team members are found without email addresses, automatically generate probable emails using the company's email pattern (e.g., first.last@company.com) and verify them. Uses Email Pattern Finder internally. Costs ~$0.10 per domain with missing emails."
          },
          "enableProFallback": {
            "title": "Auto-retry JavaScript sites with Pro",
            "type": "boolean",
            "description": "When a JavaScript-heavy site is detected (React, Angular, Vue, Next.js) and no contacts are found, automatically re-run it through Website Contact Scraper Pro which renders the page in a real browser. Costs $0.35 per site that gets re-run. Only triggered when JS is detected AND no contacts were found.",
            "default": false
          },
          "compareToPrevRun": {
            "title": "Compare to previous run",
            "type": "boolean",
            "description": "When enabled, every domain result includes changeFlags[] and changeSinceLastRun. First run establishes the baseline (all domains flagged NEW_DOMAIN). Subsequent runs compute deltas. Pair with Apify Schedules for daily/weekly monitoring."
          },
          "monitorStateKey": {
            "title": "Monitor state key (optional)",
            "type": "string",
            "description": "Optional name for the key-value store that holds your monitoring baseline. Use the same key across scheduled runs to maintain history. Auto-derived from input domains if left blank.",
            "default": ""
          },
          "autoFilter": {
            "title": "Auto-filter (plain-English output filter)",
            "enum": [
              "none",
              "send-now-only",
              "safe-only",
              "max-leads"
            ],
            "type": "string",
            "description": "One-click output filter mapped to send-decision action. `send-now-only` = only ready-to-email Tier-A leads. `safe-only` = ready-to-email leads with low risk only. `max-leads` = everything except SKIP. `none` = no auto-filter (default).",
            "default": "none"
          },
          "minLeadScore": {
            "title": "Minimum lead score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only include domains with a lead score at or above this threshold (0-100). Domains below the threshold are excluded from output."
          },
          "requirePersonalEmail": {
            "title": "Require personal email",
            "type": "boolean",
            "description": "Only include domains where at least one personal email (not info@, hello@, etc.) was found.",
            "default": false
          },
          "exportFormats": {
            "title": "Export-ready CSV formats",
            "uniqueItems": true,
            "type": "array",
            "description": "Pick one or more outreach-tool CSV formats to generate. Each format writes a ready-to-import CSV to the run's key-value store using the platform's expected column names. Leave empty to skip CSV generation.",
            "items": {
              "type": "string",
              "enum": [
                "instantly",
                "smartlead",
                "apollo"
              ],
              "enumTitles": [
                "Instantly.ai CSV",
                "Smartlead CSV",
                "Apollo CSV"
              ]
            },
            "default": []
          },
          "crmWebhookUrl": {
            "title": "CRM webhook URL (HubSpot / Salesforce / Make / Zapier)",
            "type": "string",
            "description": "HTTPS endpoint to receive lead payloads. Each enriched domain triggers one POST. Failures retry 2× with backoff; 5 consecutive failures disable pushing for the rest of the run."
          },
          "crmFormat": {
            "title": "CRM payload format",
            "enum": [
              "generic-json",
              "hubspot",
              "salesforce"
            ],
            "type": "string",
            "description": "Pick a payload shape that matches your CRM. Generic JSON sends the full domain record (use this for Make.com / Zapier / n8n).",
            "default": "generic-json"
          },
          "crmOnlyTierA": {
            "title": "Only push Tier-A leads to CRM",
            "type": "boolean",
            "description": "When enabled, only domains with decision tier 'A' (verified personal email + senior contact) are pushed to the webhook. Recommended for outbound sales — keeps your CRM clean of low-quality leads."
          },
          "companyTypes": {
            "title": "Filter by company type",
            "maxItems": 18,
            "type": "array",
            "description": "Only include domains classified as these company types. Leave empty to include all. Available types: saas, agency, consulting, legal, accounting, ecommerce, healthcare, real_estate, financial_services, manufacturing, education, nonprofit, construction, hospitality, media, recruitment, logistics, technology.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Select proxies to use. Recommended for scraping many sites."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}