{
  "openapi": "3.0.1",
  "info": {
    "title": "Electrician Scraper — Verified Emails & License Numbers",
    "description": "Scrape electrician & electrical contractor contacts from Google Maps with verified emails, phones, license numbers & service areas. Export to HubSpot, Salesforce, or CSV. Built for solar SaaS sales, EV charging & electrical supply.",
    "version": "1.0",
    "x-build-id": "L0UZzKljVKEQeXMHX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/muhammadafzal~electrician-lead-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-muhammadafzal-electrician-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/muhammadafzal~electrician-lead-scraper/runs": {
      "post": {
        "operationId": "runs-sync-muhammadafzal-electrician-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/muhammadafzal~electrician-lead-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-muhammadafzal-electrician-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",
        "properties": {
          "businessType": {
            "title": "Electrician Specialty",
            "enum": [
              "Residential Electrician",
              "Commercial Electrician",
              "Industrial Electrician",
              "Electrical Contractor",
              "Solar Installer",
              "EV Charging Station Installer",
              "Low Voltage Electrician",
              "Emergency Electrician",
              "Generator Installer",
              "Custom"
            ],
            "type": "string",
            "description": "Use this field to select the type of electrical contractor to find on Google Maps. The actor automatically builds the search query — 'Residential Electrician' finds home wiring & repair electricians, 'Commercial Electrician' finds office/retail electrical contractors, 'Industrial Electrician' finds factory & plant electricians, 'Solar Installer' finds solar PV installers, 'EV Charging Station Installer' finds EV charger installers. Choose 'Custom' to write your own search query via the searchQuery field.",
            "default": "Residential Electrician"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Use this field to specify the city, state, or region to search for electricians. Use 'City, ST' format for US locations — 'Dallas, TX', 'Phoenix, AZ', 'Los Angeles, CA'. ZIP codes and neighborhoods also work. The more specific your location, the more targeted your electrician lead list."
          },
          "locations": {
            "title": "Multiple Locations (Batch Mode)",
            "type": "array",
            "description": "Use this field when you want to search multiple cities in a single run. Each location is searched separately and results are combined with deduplication. Example: ['Dallas, TX', 'Houston, TX', 'Austin, TX']. Leave empty to use the single 'location' field instead.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Custom Search Query",
            "type": "string",
            "description": "A raw Google Maps search query, used ONLY when Electrician Specialty is set to 'Custom'. Write queries the same way you would type them into Google Maps — 'ev charging installers in Seattle WA', 'low voltage contractors near Denver', 'master electrician 90210'. For all other specialties the search is built automatically from Specialty + Location."
          },
          "startUrls": {
            "title": "Start URLs (Direct Google Maps Place URLs)",
            "type": "array",
            "description": "Use this field when the user provides specific Google Maps place URLs to scrape directly. Format: [{\"url\": \"https://www.google.com/maps/place/...\"}]. Do NOT use this when the user describes a specialty or location — use businessType + location instead.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "The maximum number of electrician leads to collect and return. Set to a small number (3-5) first to verify data quality before scaling. Google Maps typically returns up to 120 results per search query; run multiple locations to build larger datasets.",
            "default": 50
          },
          "enrichEmails": {
            "title": "Find Email Addresses",
            "type": "boolean",
            "description": "When enabled, the actor visits each electrician's website and scans contact pages, footers, and about pages to extract email addresses. Disable if you only need phone numbers and addresses, or to run faster without website crawling.",
            "default": true
          },
          "verifyEmails": {
            "title": "Verify Email Deliverability",
            "type": "boolean",
            "description": "When enabled, each extracted email is checked via DNS MX record lookup to confirm the mailbox exists and can receive mail — without sending a message. Reduces bounce rates. Only applies when 'Find Email Addresses' is enabled.",
            "default": true
          },
          "enrichSocials": {
            "title": "Find Social Media Links",
            "type": "boolean",
            "description": "When enabled, the actor scans each electrician's website for links to Facebook, Instagram, LinkedIn, Twitter/X, YouTube, and TikTok. Useful for multi-channel outreach and Facebook ad targeting (Custom Audiences).",
            "default": true
          },
          "extractLicenseNumber": {
            "title": "Extract License Numbers",
            "type": "boolean",
            "description": "When enabled, the actor scans electrician websites for contractor license numbers (TECL, EC, state license formats). Critical for compliance verification and skip-tracing licensed vs. unlicensed contractors.",
            "default": true
          },
          "extractServiceAreas": {
            "title": "Extract Service Areas",
            "type": "boolean",
            "description": "When enabled, the actor parses electrician websites for service area coverage (cities/counties they serve). Useful for territory planning and identifying contractors serving specific regions.",
            "default": true
          },
          "outputFormat": {
            "title": "Output Format",
            "enum": [
              "full",
              "hubspot",
              "salesforce"
            ],
            "type": "string",
            "description": "Controls the structure of the output dataset. 'full' returns all available fields. 'hubspot' reformats for HubSpot CSV import. 'salesforce' reformats for Salesforce data import. All formats exportable as CSV, JSON, or Excel from Apify.",
            "default": "full"
          },
          "deduplicateResults": {
            "title": "Deduplicate Results",
            "type": "boolean",
            "description": "When enabled, removes duplicate electricians based on phone number or business name. Recommended for batch mode when searching multiple locations that may overlap.",
            "default": true
          },
          "maxWebsitePages": {
            "title": "Max Website Pages to Crawl",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of pages to crawl on each electrician's website when enriching emails, socials, license numbers, or service areas. Higher values find more contacts but slow down the run. Default 5 is sufficient for most contractor sites.",
            "default": 5
          },
          "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. Compatible with IPRoyal, Smartproxy, Bright Data, and other rotating proxy services. 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}