{
  "openapi": "3.0.1",
  "info": {
    "title": "Med Spa Lead Scraper — Aesthetics Business Contacts",
    "description": "Find med spas, Botox clinics and aesthetics businesses by city. Exclude previous Maps URLs, review public contact and email evidence, and export CSV/JSON/Excel. See the saved demo, redacted sample and prepared n8n/HubSpot starter.",
    "version": "1.8",
    "x-build-id": "eKQhstdSY8F57SUZN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/samstorm~med-spa-lead-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-samstorm-med-spa-lead-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/samstorm~med-spa-lead-scraper/runs": {
      "post": {
        "operationId": "runs-sync-samstorm-med-spa-lead-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/samstorm~med-spa-lead-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-samstorm-med-spa-lead-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",
        "required": [
          "businessType",
          "location"
        ],
        "properties": {
          "businessType": {
            "title": "Business Type",
            "enum": [
              "Med Spa",
              "Botox Clinic",
              "Laser Hair Removal Service",
              "Skin Care Clinic",
              "Plastic Surgeon",
              "Day Spa",
              "Custom"
            ],
            "type": "string",
            "description": "Select the type of med spa business to target. The actor builds the Google Maps query automatically - e.g., 'Med Spa' searches for 'Med Spas in [location]'. Choose 'Custom' to write your own query for niche searches.",
            "default": "Med Spa"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "The city, state, or region to search. Use 'City, ST' format for best results (e.g., 'Austin, TX' or 'Denver, CO'). You can also enter ZIP codes, neighborhoods, metro areas, or any geographic phrase Google Maps recognizes. Each location search returns up to ~120 listings. For US 'City, ST' searches, returned records must have that city and state in their Maps address; nearby municipalities are excluded. Other location formats use Google's area matching. A Custom query must include the location to enable this address check."
          },
          "searchQuery": {
            "title": "Custom Search Query",
            "type": "string",
            "description": "A raw Google Maps search query - only used when Business Type is 'Custom'. Write it exactly as you would type it into Google Maps. Example: 'medical aesthetics clinics in Scottsdale, AZ'. Ignored when a named Business Type is selected."
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "The maximum number of leads to collect and return. The default and prefill are 3 for a quick test run - increase to 50-200 for production use. Google Maps typically returns up to 120 results per search query; use a smaller number first to verify data quality before scaling up.",
            "default": 3
          },
          "excludeMapsUrls": {
            "title": "Exclude previously collected Google Maps URLs",
            "maxItems": 5000,
            "type": "array",
            "description": "Paste Maps URLs from an earlier output to request a new batch. Stable place identifiers are matched across supported URL variants. Known listings are skipped before details where possible and always before enrichment/output. The Actor scans up to 500 candidates; a full new batch is not guaranteed.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "default": []
          },
          "excludeBusinessKeys": {
            "title": "Exclude business keys (optional)",
            "maxItems": 5000,
            "type": "array",
            "description": "Advanced fallback for prior records without usable Maps URLs. Format: business:normalized name|normalized address. Lowercase both values, trim their ends and collapse internal whitespace to single spaces. Example: business:example med spa|12 main st, miami, fl 33101. Matching may require reading the Maps detail first.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "default": []
          },
          "enrichEmails": {
            "title": "Find Email Addresses",
            "type": "boolean",
            "description": "When enabled, the actor visits each business's website and scans contact pages, footers, and about pages for email addresses. This is what transforms raw Google Maps listings into a usable med spa email list. Disable only if you need phone numbers and addresses without website crawling.",
            "default": true
          },
          "verifyEmails": {
            "title": "Check email verification status",
            "type": "boolean",
            "description": "Optional DNS and SMTP checks. Off by default to reduce waiting; enable when you need verification evidence. True emailVerified requires recipient acceptance plus rejection of a random recipient. MX records, catch-all servers and inconclusive checks do not confirm a mailbox. Delivery is not guaranteed.",
            "default": false
          },
          "enrichSocials": {
            "title": "Find Social Media Links",
            "type": "boolean",
            "description": "Optional collection of public social profile links from business websites. Off by default; enable when social links are useful for your research.",
            "default": false
          },
          "outputFormat": {
            "title": "Output Format",
            "enum": [
              "full",
              "hubspot",
              "salesforce"
            ],
            "type": "string",
            "description": "Full preserves source URLs, email verification status and domain evidence. HubSpot and Salesforce provide column mappings; review destination fields and custom properties before import. CSV, JSON and Excel exports are available from the dataset.",
            "default": "full"
          },
          "proxyUrl": {
            "title": "Custom Proxy URL (optional)",
            "type": "string",
            "description": "Optional HTTP proxy URL for using third-party residential proxies instead of Apify's built-in proxies. Format: http://username:password@host:port. Leave empty to use Apify's default residential proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}