{
  "openapi": "3.0.1",
  "info": {
    "title": "BuiltWith Alternative — Tech Stack, Emails & Phones API",
    "description": "Look up website technologies or discover indexed technology leads; distinguish indexed evidence from live checks. Bulk export: JSON, CSV, Excel and API. PPE: $5/1K website results; start fee extra.",
    "version": "0.15",
    "x-build-id": "zxfy23VvV1fJXgh7D"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apivault_labs~tech-stack-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apivault_labs-tech-stack-lookup",
        "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/apivault_labs~tech-stack-lookup/runs": {
      "post": {
        "operationId": "runs-sync-apivault_labs-tech-stack-lookup",
        "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/apivault_labs~tech-stack-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-apivault_labs-tech-stack-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "🔀 What do you want to do?",
            "enum": [
              "find",
              "detect",
              "lookalike",
              "monitor",
              "catalog"
            ],
            "type": "string",
            "description": "find requires technologies, technologyPreset or opportunityPreset; detect requires domains; lookalike requires seed domains; monitor requires domains and a stable monitorName; catalog needs no other input.",
            "default": "find"
          },
          "domains": {
            "title": "🌐 Domains (Detect / Lookalike / Monitor only)",
            "uniqueItems": true,
            "type": "array",
            "description": "Required when mode is detect, lookalike or monitor; ignored otherwise. Accepts hostnames or URLs. Unknown domains are skipped without a result charge.",
            "items": {
              "type": "string"
            }
          },
          "monitorName": {
            "title": "🔔 Monitor name (Monitor only)",
            "type": "string",
            "description": "Used only when mode=monitor. Reuse the same name to compare saved domain baselines. Each newly included or newly found domain establishes its own free baseline; its existing stack is not a new adoption. Changes stopped by the run charge limit remain pending for the next run.",
            "default": "my-tech-monitor"
          },
          "verifyLive": {
            "title": "🌐 Verify current website live (Detect only)",
            "type": "boolean",
            "description": "Used only when mode=detect. Check the public homepage and add current technology evidence; capped at 100 domains per run.",
            "default": false
          },
          "technologyPreset": {
            "title": "⚡ Popular technology preset",
            "enum": [
              "Shopify",
              "Shopify Plus",
              "WooCommerce",
              "WordPress",
              "Klaviyo",
              "HubSpot",
              "Stripe",
              "PayPal",
              "Mailchimp",
              "Salesforce",
              "Cloudflare",
              "Magento",
              "BigCommerce",
              "Yotpo",
              "Gorgias"
            ],
            "type": "string",
            "description": "Used only when mode=find. Optional shortcut combined with custom Technologies."
          },
          "opportunityPreset": {
            "title": "🎯 Sales opportunity preset",
            "enum": [
              "shopify_without_klaviyo",
              "klaviyo_without_yotpo",
              "mailchimp_replacement",
              "woocommerce_migration",
              "hubspot_without_klaviyo",
              "stripe_without_paypal"
            ],
            "type": "string",
            "description": "Used only when mode=find. Returns matching leads, missing technology, opportunity score and suggested pitch."
          },
          "technologies": {
            "title": "✅ Technologies to include",
            "uniqueItems": true,
            "type": "array",
            "description": "Used only when mode=find. Enter complete product names such as Klaviyo, Stripe, Shopify Plus, HubSpot or Cloudflare. AI agents should prefer technologyPreset for one popular technology and technologies for custom or multiple values.",
            "items": {
              "type": "string"
            }
          },
          "matchMode": {
            "title": "🔗 Match logic",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "Used only when mode=find. any = at least one technology (OR); all = every technology (AND).",
            "default": "any"
          },
          "excludeTechnologies": {
            "title": "🚫 Technologies to exclude",
            "uniqueItems": true,
            "type": "array",
            "description": "Used only when mode=find. Exclude sites using any listed technology; e.g. Klaviyo leads without Yotpo.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "🧩 Technology category",
            "enum": [
              "any",
              "ecommerce",
              "cms",
              "crm",
              "marketing",
              "payments",
              "hosting",
              "ai"
            ],
            "type": "string",
            "description": "Used only when mode=find. Limit matching to one stack layer; any is recommended because a product may appear in multiple layers.",
            "default": "any"
          },
          "country": {
            "title": "🌍 Countries (ISO-2)",
            "uniqueItems": true,
            "type": "array",
            "description": "One or more ISO-2 country codes, e.g. US, DE, GB. Type each code and press Enter. Empty — no country filter.",
            "items": {
              "type": "string"
            }
          },
          "vertical": {
            "title": "🏷️ Industry / vertical",
            "type": "string",
            "description": "Keep only sites in this industry, e.g. Fashion, Technology, Health, or Food. Leave empty to include every industry."
          },
          "hasEmail": {
            "title": "📧 Only websites with email",
            "type": "boolean",
            "description": "Keep only sites where the Emails field is not empty.",
            "default": false
          },
          "hasPhone": {
            "title": "📞 Only websites with phone",
            "type": "boolean",
            "description": "Keep only sites where the Telephones field is not empty.",
            "default": false
          },
          "newWithinDays": {
            "title": "🆕 First indexed within days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Return websites first added to the index within the last N days. Use 7 for a weekly new-lead feed. Set 0 to disable.",
            "default": 0
          },
          "lastIndexedWithinDays": {
            "title": "🔄 Re-indexed within days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep websites whose record was indexed within the last N days. Useful for recently refreshed data. Set 0 to disable.",
            "default": 0
          },
          "lastFoundWithinDays": {
            "title": "✅ Last confirmed within days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep websites last observed within the previous N days. Use this to prefer recently confirmed leads. Set 0 to disable.",
            "default": 0
          },
          "sortBy": {
            "title": "📊 Sort results by",
            "enum": [
              "Root Domain",
              "Overall Score",
              "Tranco",
              "Page Rank",
              "Sales Revenue",
              "Employees",
              "Technology Spend",
              "SKU",
              "Performance",
              "SEO",
              "First Indexed",
              "Last Indexed",
              "Last Found",
              "Tech Checked At",
              "Tech Verification Status",
              "Tech Detected Stack",
              "Tech Evidence"
            ],
            "type": "string",
            "description": "Order rows by this column before applying the limit, so you get the top leads instead of an arbitrary slice. Empty — no ordering."
          },
          "sortDesc": {
            "title": "⬇️ Highest values first",
            "type": "boolean",
            "description": "Highest values first (recommended for scores/traffic/revenue).",
            "default": true
          },
          "dedupeByDomain": {
            "title": "🧹 Remove duplicate domains",
            "type": "boolean",
            "description": "Return each normalized Root Domain only once across all data segments. Recommended for lead exports.",
            "default": true
          },
          "outputPreset": {
            "title": "📋 Output detail",
            "enum": [
              "essential",
              "contacts",
              "tech_stack",
              "opportunity",
              "full"
            ],
            "type": "string",
            "description": "essential is recommended for AI and most lead exports; contacts returns contact fields; tech_stack returns technology fields; opportunity returns sales-gap fields; full returns all source and derived fields. Ignored when columns is provided.",
            "default": "essential"
          },
          "countOnly": {
            "title": "🔢 Preview audience size only",
            "type": "boolean",
            "description": "Preview stored in COUNT_SUMMARY without per-result charges. Actor start and platform usage may still apply. Counts matching segment rows; the same domain may occur in multiple segments, so this is an upper bound for unique websites.",
            "default": false
          },
          "maxItems": {
            "title": "📦 Maximum websites (5–50 for AI)",
            "minimum": 1,
            "maximum": 250000,
            "type": "integer",
            "description": "Upper limit across all data segments. AI/MCP calls should normally request 5–50 rows; bulk exports can request up to 250000 and paginate with offset.",
            "default": 1000
          },
          "offset": {
            "title": "➡️ Offset (skip first N)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip the first N matching rows, then return the next batch. Use it to export more than one run allows: run 1 with Offset 0, run 2 with Offset = the rows you already got, and so on. Set a Sort by column for stable pagination.",
            "default": 0
          },
          "columns": {
            "title": "🗂️ Custom output columns (optional)",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional exact field list. When provided, it overrides Output detail. Leave empty to use outputPreset; each website remains one result row. Historical First/Last date selections are accepted for compatibility but are omitted from every exported row.",
            "items": {
              "type": "string",
              "enum": [
                "Root Domain",
                "Location on Site",
                "Primary Domain",
                "Technology Spend",
                "Sales Revenue",
                "Social",
                "Employees",
                "SKU",
                "Company",
                "Vertical",
                "Tranco",
                "Page Rank",
                "Majestic",
                "Umbrella",
                "Overall Score",
                "Performance",
                "Accessibility",
                "SEO",
                "Best Practices",
                "Telephones",
                "Emails",
                "X",
                "Twitter",
                "TikTok",
                "Weibo",
                "Threads",
                "Facebook",
                "LinkedIn",
                "Google",
                "Pinterest",
                "GitHub",
                "Instagram",
                "Vk",
                "Vimeo",
                "YouTube",
                "People",
                "Ticker",
                "Verified Profiles",
                "City",
                "State",
                "Zip",
                "Country",
                "First Detected",
                "Last Found",
                "First Indexed",
                "Last Indexed",
                "eCommerce Platform",
                "CMS Platform",
                "CRM Platform",
                "Marketing Automation Platform",
                "Payment Platforms",
                "CRuX Rank",
                "Cloudflare Rank",
                "Agency",
                "Has Ads",
                "Hosting Provider",
                "AI",
                "Exclusion",
                "Compliance",
                "Matched Technologies",
                "Matched Categories",
                "Technology Count",
                "Technology Fit Score",
                "Contactability Score",
                "Lead Tier",
                "Why This Lead",
                "Data Age Days",
                "Similarity Score",
                "Shared Technologies",
                "Opportunity Type",
                "Missing Technologies",
                "Opportunity Score",
                "Signal Strength",
                "Suggested Pitch",
                "Live Verification Status",
                "Live HTTP Status",
                "Live Technologies",
                "Live Technology Categories",
                "Live Confidence",
                "Live Evidence",
                "Live Final URL",
                "Live Checked At",
                "Live Added Technologies",
                "Tech Checked At",
                "Tech Verification Status",
                "Tech Detected Stack",
                "Tech Evidence"
              ]
            }
          },
          "techCheckedWithinDays": {
            "title": "Homepage checked within days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Optional: only rows with a server homepage check in this date window. Coverage is gradual. A check does not validate every historical technology; use observedTechnologies for positive recent detections.",
            "default": 0
          },
          "observedTechnologies": {
            "title": "Technologies observed on homepage",
            "type": "array",
            "description": "Require ALL listed names in the latest successful server homepage observation, for example Shopify. Combine with Homepage checked within days. Unknown or inaccessible pages do not match; absent signals do not prove a technology was removed.",
            "items": {
              "type": "string"
            }
          },
          "dataSource": {
            "title": "Data source",
            "enum": [
              "standard",
              "warmed"
            ],
            "type": "string",
            "description": "Fresh exports use the warmed source pool when this field is omitted. Older offset-only inputs without sourceSession use the standard index. Keep the sourceSession from the complete continuation input to stay on the same live copy. Platform eligibility and stored field availability are enforced separately; source records can overlap."
          },
          "sourceSession": {
            "title": "Saved export session",
            "maxLength": 2048,
            "type": "string",
            "description": "Leave empty for a new export. Keep the opaque value from EXPORT_CONTINUATION.resumeInput unchanged to continue the same source copy. A warmed continuation may reconnect to an older copy that is no longer kept warm.",
            "default": ""
          },
          "parallelReaders": {
            "title": "Export speed",
            "enum": [
              "7",
              "1"
            ],
            "type": "string",
            "description": "Large exports read more source segments at the same time inside this single run. Results go to one Dataset and each accepted result is charged once. Your spending limit still applies. Small exports keep standard reading; available memory and source performance affect speed. You may switch this setting when continuing an export.",
            "default": "7"
          },
          "exportCursor": {
            "title": "Export checkpoint",
            "type": "string",
            "description": "Optional signed checkpoint from EXPORT_CONTINUATION.resumeInput. Copy the complete resumeInput unchanged except maxItems. Valid for 24 hours, tied to your account, source and filters. Reads saved segment positions without replaying the prefix; live source changes can still affect positions. Omit for a fresh export or legacy offset. Traffic filtering/sorting uses legacy offset."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}