{
  "openapi": "3.0.1",
  "info": {
    "title": "Angi Scraper | Angie's List HVAC Near Me",
    "description": "Scrape Angi.com (formerly Angie's List) HVAC, plumbers, roofers and home-service contractors by ZIP. Export names, nearme street addresses, ratings, and Angi Inc contact phones. HomeStars Canada public phones when listed. Guest pages only — US merchant phones are gated. CSV, Excel, or JSON.",
    "version": "0.2",
    "x-build-id": "BR1fcjcZsQ72MVEHp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lentic_clockss~angi-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lentic_clockss-angi-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/lentic_clockss~angi-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lentic_clockss-angi-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/lentic_clockss~angi-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lentic_clockss-angi-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": {
          "searchType": {
            "title": "Search type",
            "enum": [
              "nearme",
              "search",
              "detail",
              "contact",
              "about",
              "intl-list",
              "intl-detail",
              "homestars",
              "catalog",
              "sitemap",
              "map",
              "city-hub",
              "leads-funnel",
              "fake-tld"
            ],
            "type": "string",
            "description": "Opened: nearme (JSON-LD street), search (gateway v5; needs postalCode + categoryId), detail, contact, about, intl-list, intl-detail, catalog (public metadata catalogues; set catalogKind), sitemap (category list / provider URL index rows; set catalogKind + sitemapShard). map/city-hub/leads-funnel are out of scope.",
            "default": "nearme"
          },
          "market": {
            "title": "Market",
            "enum": [
              "us",
              "ca",
              "uk",
              "de",
              "at",
              "fr",
              "nl",
              "it"
            ],
            "type": "string",
            "description": "us is www.angi.com (opened). ca=HomeStars, uk=MyBuilder. de/at/fr/nl/it Instapro: list paths opened; reveal 未验证 until live lead DQ.",
            "default": "us"
          },
          "category": {
            "title": "Category / nearme slug",
            "type": "string",
            "description": "Free-text /nearme/{slug}/ (hvac, roofing, windows, flooring, pest-control, …). Aliases: gutters→gutter-repair-replacement. For searchType=search, plumbing maps to categoryId 107; other slugs need categoryId or homepage harvest.",
            "default": "hvac"
          },
          "catalogKind": {
            "title": "Catalog kind",
            "enum": [
              "categories",
              "businessHighlights",
              "featureflags",
              "platformConfig",
              "category-sitemap",
              "pro-pool"
            ],
            "type": "string",
            "description": "For searchType=catalog/sitemap: which public metadata catalogue to enumerate. pro-pool lists provider URL index rows (not fetched detail content)."
          },
          "sitemapShard": {
            "title": "Sitemap shard",
            "minimum": 1,
            "maximum": 71,
            "type": "integer",
            "description": "For searchType=sitemap catalogKind=pro-pool: which pro_profile shard (1-71) to enumerate."
          },
          "categoryId": {
            "title": "US search categoryId",
            "type": "integer",
            "description": "Required for searchType=search unless category=plumbing (107). Do not parse the 36KB /search HTML shell.",
            "default": 107
          },
          "postalCode": {
            "title": "US postal code",
            "type": "string",
            "description": "US ZIP (5 digits or ZIP+4). An explicit ZIP always takes precedence over city/region. When postalCode is omitted or empty, set city (and optional region) to resolve a representative ZIP; this is one ZIP search, not complete city coverage. ZIP 10001 is used only when no postalCode, city or region is supplied. The form is prefilled with 10001: clear it when searching by city. The requested location never becomes a merchant's own address."
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Optional text sent with US gateway search (address-bar query=).",
            "default": ""
          },
          "city": {
            "title": "City / international city slug",
            "type": "string",
            "description": "For US search/nearme with postalCode omitted or empty, city and optional region resolve one representative ZIP. An explicit ZIP takes precedence. For intl-list, supply the site's city slug; it is never silently replaced by another city."
          },
          "region": {
            "title": "US state / region",
            "type": "string",
            "description": "Optional state code/name for US city-to-ZIP resolution, e.g. WA for Seattle. Used with city when postalCode is omitted or empty; region alone is rejected."
          },
          "ssaFilter": {
            "title": "Super Service Award filter",
            "type": "boolean",
            "description": "US search only. Maps to XHR superServiceAwardFilter (not the URL key ssaFilter).",
            "default": false
          },
          "enrichDetails": {
            "title": "Enrich details",
            "type": "boolean",
            "description": "Fetch US ...-reviews-{id}.htm (ZIP/names) and Instapro profiles (phone when public). Default off — detail pages return an interstitial; enable only when a path through is configured.",
            "default": false
          },
          "mergeNearmeStreets": {
            "title": "Merge nearme streets onto search",
            "type": "boolean",
            "description": "When searchType=search, overlay /nearme/{slug}/?postalCode= JSON-LD streets onto matching reviews-{id} rows. Does not hit request.angi.com.",
            "default": true
          },
          "maxResults": {
            "title": "Max results per search or detail URL",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Most rows for each category/ZIP search or each detail URL. Default 50 because this Actor's current maximum is 50. Contractor and review rows count together. The whole run stops at your maximum total charge. Free Apify plan: up to 200 rows per run and 10 runs of this Actor (limits set by the Actor developer).",
            "default": 50
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "US search pages via gateway offset (limit=20) and Instapro city-list page=N. Hard cap 10.",
            "default": 1
          },
          "slice": {
            "title": "Built-in seed slice",
            "type": "string",
            "description": "A validated slice in the form 'market/slice' (e.g. 'us/plumbing', 'ca/toronto'). A bare slice name resolves inside the chosen market (e.g. 'plumbing' with market=us resolves to 'us/plumbing'). When set it supersedes 'category' for US search/nearme and 'city' for intl-list. Run 'catalog' to list validated slices."
          },
          "harvestSeeds": {
            "title": "Persist harvested seeds",
            "type": "boolean",
            "description": "When true, slugs/cities/category ids discovered during this run are appended to the worker's local seed pool (/app/state/seed-pool/) so subsequent runs skip the re-harvest. Default off; the pool is optional and never replaces live calls.",
            "default": false
          },
          "detailUrls": {
            "title": "Detail URLs",
            "type": "array",
            "description": "Optional live angi.com ...-reviews-{id}.htm, /landing/contact-us, or HomeStars /profile/ URLs. Do not send request.angi.com or /send-request-to.",
            "items": {
              "type": "string"
            }
          },
          "workerBaseUrl": {
            "title": "Worker base URL override",
            "type": "string",
            "description": "HTTPS only. Production source of truth is Actor env WORKER_BASE_URL."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}