{
  "openapi": "3.0.1",
  "info": {
    "title": "Local Business Leads Enricher: Emails, Phones & Tech Stack",
    "description": "Enrich local business leads: paste plumber, roofer, HVAC, electrician or contractor websites and get emails, phone numbers, contact forms, booking tools, services and tech stack (WordPress, Wix, GA4, Meta Pixel, Housecall Pro, ServiceTitan). Every result has a source. Pay only for useful results.",
    "version": "0.1",
    "x-build-id": "g7jhtodSMIlOr6fii"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mortenm~local-business-prospect-qualifier/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mortenm-local-business-prospect-qualifier",
        "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/mortenm~local-business-prospect-qualifier/runs": {
      "post": {
        "operationId": "runs-sync-mortenm-local-business-prospect-qualifier",
        "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/mortenm~local-business-prospect-qualifier/run-sync": {
      "post": {
        "operationId": "run-sync-mortenm-local-business-prospect-qualifier",
        "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": [
          "businesses"
        ],
        "properties": {
          "businesses": {
            "title": "Businesses to qualify",
            "type": "array",
            "description": "Array of objects: {\"website\": \"https://example-roofing.com\", \"clientRecordId\": \"crm-123\", \"businessName\": \"Example Roofing LLC\", \"country\": \"US\", \"city\": \"Austin\"}. website and clientRecordId are required; businessName, country (ISO 3166-1 alpha-2) and city are optional context. Context is preserved and used only to normalise phone numbers and to report whether the name/city was mentioned; it is never treated as verified site geography. Up to 1,000 rows per run."
          },
          "targetServiceCategories": {
            "title": "Target service categories",
            "type": "array",
            "description": "Optional. Report whether terms for these home-service categories were observed (targetServiceMatch). All categories are still reported in summary.serviceCategories. Term occurrences are evidence of wording on the site, not proof of what the business currently sells; no match never proves absence.",
            "items": {
              "type": "string",
              "enum": [
                "plumbing",
                "hvac",
                "roofing",
                "electrical",
                "landscaping",
                "tree_service",
                "pest_control",
                "cleaning",
                "painting",
                "garage_doors",
                "pool_service",
                "restoration",
                "pressure_washing",
                "handyman",
                "remodeling",
                "flooring",
                "fencing",
                "gutters",
                "windows_doors",
                "solar",
                "septic",
                "locksmith",
                "appliance_repair",
                "moving"
              ],
              "enumTitles": [
                "Plumbing",
                "HVAC",
                "Roofing",
                "Electrical",
                "Landscaping & lawn care",
                "Tree service",
                "Pest control",
                "Cleaning",
                "Painting",
                "Garage doors",
                "Pool service",
                "Water/fire restoration",
                "Pressure washing",
                "Handyman",
                "Remodeling",
                "Flooring",
                "Fencing",
                "Gutters",
                "Windows & doors",
                "Solar",
                "Septic",
                "Locksmith",
                "Appliance repair",
                "Moving"
              ]
            },
            "default": []
          },
          "customServiceTerms": {
            "title": "Custom service terms",
            "type": "array",
            "description": "Optional, up to 20 extra English terms (e.g. \"commercial roofing\", \"tankless\"). Matched case-insensitively as whole words; each match is reported with page context and an excerpt.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "defaultCountry": {
            "title": "Default country for phone numbers",
            "pattern": "^([A-Za-z]{2})?$",
            "type": "string",
            "description": "Optional ISO 3166-1 alpha-2 code (e.g. US) used to normalise phone numbers for rows without a country. Numbers written with an explicit +country prefix always take precedence. The source of every normalisation is reported."
          },
          "maxDomains": {
            "title": "Max unique websites per run",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Unique canonical websites processed in this run (duplicate rows of the same site count once). Rows beyond this are returned as NOT_PROCESSED_BUDGET for resubmission.",
            "default": 100
          },
          "maxPagesPerDomain": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Homepage plus up to this many minus one same-site contact/services/booking/about/location pages. robots.txt requests are counted separately in the run summary.",
            "default": 3
          },
          "runTimeBudgetSecs": {
            "title": "Run time budget (seconds)",
            "minimum": 60,
            "maximum": 3600,
            "type": "integer",
            "description": "The run stops starting new work so it can finish within this time, and returns untouched rows as NOT_PROCESSED_BUDGET. This is a cost cap, not a promise that every row completes. Keep the run timeout above this value.",
            "default": 270
          },
          "perDomainTimeBudgetSecs": {
            "title": "Time budget per website (seconds)",
            "minimum": 15,
            "maximum": 180,
            "type": "integer",
            "description": "Total time one website may consume across all its requests, so a slow host cannot hold a worker.",
            "default": 60
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 30,
            "type": "integer",
            "description": "Hard deadline for each HTTP request including redirects and body download. Transient network/5xx failures are retried once within budget; blocks are never retried.",
            "default": 15
          },
          "maxConcurrency": {
            "title": "Max concurrent websites",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Websites processed in parallel. Each website is fetched one request at a time.",
            "default": 10
          },
          "maxPageSizeKiB": {
            "title": "Max page size (KiB)",
            "minimum": 64,
            "maximum": 2048,
            "type": "integer",
            "description": "Decompressed HTML bytes read per page; larger pages are truncated and analysed partially.",
            "default": 2048
          },
          "maxTotalDownloadMiB": {
            "title": "Max total download (MiB)",
            "minimum": 10,
            "maximum": 8000,
            "type": "integer",
            "description": "Response-body byte budget for the whole run, including robots.txt and retries. When it would be exceeded, no new requests start.",
            "default": 300
          },
          "excludedDomains": {
            "title": "Excluded domains",
            "type": "array",
            "description": "Domains you do not want fetched (subdomains included). They are returned as PROHIBITED_TARGET and never charged. A built-in list also excludes sites known to restrict automated access.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}