{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Lead Enricher",
    "description": "Extract emails, phones, social profiles, and company data from any website. CRM-ready B2B lead enrichment with HubSpot, Salesforce, and Pipedrive export modes. Quality score, WHOIS lookup, and E.164 phone normalization included.",
    "version": "0.0",
    "x-build-id": "iojJsmueZgBrGRj4y"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/operational_zirconia~website-lead-enricher/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-operational_zirconia-website-lead-enricher",
        "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/operational_zirconia~website-lead-enricher/runs": {
      "post": {
        "operationId": "runs-sync-operational_zirconia-website-lead-enricher",
        "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/operational_zirconia~website-lead-enricher/run-sync": {
      "post": {
        "operationId": "run-sync-operational_zirconia-website-lead-enricher",
        "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": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "URLs to scrape",
            "type": "array",
            "description": "List of URLs or domains to enrich. Each entry is fetched, parsed, and analysed for contact data (emails, phones, social links). Bare domains automatically get 'https://' prepended. Example: ['https://acme.com', 'stripe.com', 'www.example.org/contact']. Total runtime scales with the list size; processing runs in parallel up to 'maxConcurrency'.",
            "items": {
              "type": "string"
            }
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of URLs processed in parallel. Example: with 20 URLs and concurrency 5, the actor handles 5 at a time and queues the remaining 15. Higher values finish faster but may trigger rate limits or get your IP blocked by target sites; lower values are slower but safer. Recommended: 3-5 for small batches (< 50 URLs), 1-2 for large batches (50+ URLs).",
            "default": 5
          },
          "includeWhois": {
            "title": "Include WHOIS",
            "type": "boolean",
            "description": "When true, each output row includes a 'whois' object with domain registration data: registrar name, creation/expiration dates, and registrant organization (when public per GDPR redaction). When false, only scraped page data is returned and no WHOIS lookup is performed. Example: enabling this for 'acme.com' adds {registrar: 'GoDaddy', createdAt: '2010-03-15', registrantOrg: 'ACME Corp'} to that row; disabling it skips the lookup entirely and saves ~1 second per URL. Default is false to minimize per-domain cost — enable explicitly when you need registrant data.",
            "default": false
          },
          "skipEmailPatternFinder": {
            "title": "Skip email pattern finder",
            "type": "boolean",
            "description": "Skip Step 2 (email pattern detection) — when true, the pipeline emits a synthetic 'pattern' step with status 'skipped' and no DNS lookups are performed. When false (default), Step 2 runs and adds emailPattern, patternConfidence, generatedEmails[], patternAnalysis, alternateEmailPatterns, and dataQuality to every record. See docs/NextSteps/EmailPatternFinder.md.",
            "default": false
          },
          "searchWhois": {
            "title": "Search WHOIS for registrant email",
            "type": "boolean",
            "description": "Mine the WHOIS registrant email (when includeWhois is true and the registry exposes it) and add it to generatedEmails[] with source 'whois-registrant'. No-op when skipEmailPatternFinder is true. Default false.",
            "default": false
          },
          "goal": {
            "title": "Outreach goal",
            "enum": [
              "quick-outreach",
              "high-deliverability",
              "max-coverage"
            ],
            "type": "string",
            "description": "Tunes patternAnalysis.bounceRiskBucket thresholds and sequenceStrategy per outreach intent. 'quick-outreach' is strict — only the safest ~20% of generated patterns ship (sequenceStrategy: 'single-shot'). 'high-deliverability' (default) is medium — top ~60% ship (sequenceStrategy: 'fallback'). 'max-coverage' is loose — top ~95% ship (sequenceStrategy: 'progressive'). See docs/NextSteps/EmailPatternFinder.md §goal semantics.",
            "default": "high-deliverability"
          },
          "hunterApiKey": {
            "title": "Hunter.io API key (optional)",
            "type": "string",
            "description": "Optional Hunter.io API key — when set, the Step 2 pipeline additionally pulls emails from Hunter.io's domain-search API and adds them to generatedEmails[] with source 'hunter-api'. Failures (401, 429, network) populate patternAnalysis.hunterError without failing the step. Free tier is fine for low-volume runs. Leave empty to skip. See docs/NextSteps/EmailPatternFinder.md."
          },
          "csvMode": {
            "title": "CSV Export Mode",
            "enum": [
              "standard",
              "hubspot",
              "salesforce",
              "pipedrive"
            ],
            "type": "string",
            "description": "Format of the generated CSV. 'standard' (generic - 18 columns, booleans true/false), 'hubspot' (First Name, Last Name, Email, Company, Phone, LinkedIn Profile URL - booleans true/false), 'salesforce' (FirstName, LastName, Email, Company, Phone, LeadSource - booleans TRUE/FALSE), 'pipedrive' (name, email, phone, org_name, linkedin - booleans 1/0). Default: 'standard'. Use the mode matching your CRM to import the CSV directly without mapping columns. In Apify cloud, the CRM-ready CSV is written to the Key-value store tab as OUTPUT_<MODE>_CSV. Locally, it is written to LOCAL_OUTPUT_DIR with the mode included in the file name.",
            "default": "standard"
          },
          "companyTypes": {
            "title": "Company Types Filter",
            "type": "array",
            "description": "Allow-list filter for company types. Each input website is heuristically classified as one of the supported verticals (saas, saas_b2b, agency, ecommerce, legal, medical, consulting, manufacturing, media, nonprofit, education, realestate, finance, or 'other' when no rule matches). When this list is non-empty, only records whose inferred companyType appears in the list are kept in the output; the rest are marked with passedCompanyTypeFilter=false in the dataset and dropped from the local CSV / JSON export. When this list is empty (default), every record is kept regardless of companyType. Note: 'other' is intentionally not in the enum — it is the fallback label when no rule matches, so filtering on it is meaningless.",
            "items": {
              "type": "string",
              "enum": [
                "saas",
                "saas_b2b",
                "agency",
                "ecommerce",
                "legal",
                "medical",
                "consulting",
                "manufacturing",
                "media",
                "nonprofit",
                "education",
                "realestate",
                "finance"
              ],
              "enumTitles": [
                "SaaS",
                "SaaS B2B",
                "Agency",
                "E-commerce",
                "Legal",
                "Medical",
                "Consulting",
                "Manufacturing",
                "Media",
                "Nonprofit",
                "Education",
                "Real estate",
                "Finance"
              ]
            },
            "default": []
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Apify proxy passthrough. **Default is OFF (no proxy)** — the actor makes direct HTTP requests when this section is left untouched. Flip 'Use Apify Proxy' on to route through the Apify-managed pool. Tier matters: **DATACENTER** is US-only and ~$2.50/GB (cheap US scrapes, blocked by Cloudflare/Akamai); **RESIDENTIAL** supports 200+ countries (DE, FR, UK, JP, BR, etc.) and is ~$12/GB (bypasses most anti-bot, required for non-US geo-targeting). Use 'apifyProxyCountry' to pin exit-node geography. For BYO proxies, set 'useApifyProxy' off and provide 'proxyUrls' in 'scheme://user:pass@host:port' form."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}