{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Lead Enricher: Website Audit + AI Facts",
    "description": "signals (booking_platform, chat_widget, ad_tags), pitch_gaps, ai (services, price_points, financing, emergency_24_7, hiring) with quotes for each business on a Google Maps list. $0.002 per site scanned, $0.01 with AI facts; the free plan gets AI facts for up to 3 businesses per run without a key.",
    "version": "0.1",
    "x-build-id": "q7uuF3z16cmR75lFs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/emulative_capeskin~google-maps-lead-enricher/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-emulative_capeskin-google-maps-lead-enricher",
        "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/emulative_capeskin~google-maps-lead-enricher/runs": {
      "post": {
        "operationId": "runs-sync-emulative_capeskin-google-maps-lead-enricher",
        "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/emulative_capeskin~google-maps-lead-enricher/run-sync": {
      "post": {
        "operationId": "run-sync-emulative_capeskin-google-maps-lead-enricher",
        "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": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Each term is one Google Maps search, for example \"plumber\" or \"hair salon\". Together with Location, the Actor runs Google Maps Scraper in your Apify account (billed by that Actor, up to $0.004 per place, on top of this Actor's price; your maximum cost per run does not cover it, but it limits how many places are asked for: what that cost can pay to enrich with AI facts, or to scan when AI facts are off). Leave empty to use an existing dataset or your own list.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Where to search, for example \"Seattle, WA, USA\". Leave empty if your search terms already name the place, like \"plumbers in Seattle\"."
          },
          "maxBusinessesPerSearch": {
            "title": "Max businesses per search term",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Most places Google Maps Scraper returns for each search term. Each place is billed by that Actor at up to $0.004.",
            "default": 50
          },
          "mapsDatasetId": {
            "title": "Google Maps, Facebook or Instagram dataset ID",
            "type": "string",
            "description": "The dataset of a finished run of Google Maps Scraper, Facebook Pages Scraper or Instagram Profile Scraper; one dataset can mix them. Each row is read on its own: the website comes from website, websites or externalUrl, and a row without one comes back as no_website, free. To enrich every run automatically, add this Actor as an integration of that Actor with the run's default dataset."
          },
          "businesses": {
            "title": "Businesses",
            "type": "array",
            "description": "Your own list. Each item needs a name or a website. Rows from Google Maps Scraper work as they are; title, website, phone, address, city, state, placeId, categoryName, totalScore and reviewsCount are mapped. Other columns are passed through in input_extra.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "nullable": true,
                  "title": "Business name",
                  "description": "Name of the business."
                },
                "title": {
                  "type": "string",
                  "nullable": true,
                  "title": "Title (Maps rows)",
                  "description": "Name of the place in a Google Maps Scraper row. Used as the name when the item has no name."
                },
                "website": {
                  "type": "string",
                  "nullable": true,
                  "title": "Website URL",
                  "description": "The business's own website. Without one the business comes back as no_website, free."
                },
                "city": {
                  "type": "string",
                  "nullable": true,
                  "title": "City",
                  "description": "City of the business. Helps the AI confirm that the site belongs to it. Passed through to the output."
                },
                "state": {
                  "type": "string",
                  "nullable": true,
                  "title": "State",
                  "description": "State, for example WA. Helps the AI confirm that the site belongs to it. Passed through to the output."
                },
                "phone": {
                  "type": "string",
                  "nullable": true,
                  "title": "Phone",
                  "description": "Optional business phone. Helps the AI confirm that the site belongs to it. Passed through to the output."
                },
                "address": {
                  "type": "string",
                  "nullable": true,
                  "title": "Address",
                  "description": "Optional street address. Helps the AI confirm that the site belongs to it. Passed through to the output."
                },
                "placeId": {
                  "type": "string",
                  "nullable": true,
                  "title": "Google place ID",
                  "description": "Place ID in a Google Maps Scraper row. The same place twice in one run is processed once."
                }
              }
            }
          },
          "maxBusinesses": {
            "title": "Max businesses in the run",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "A hard cap for the whole run, whichever sources you use. Businesses beyond it get no row and cost nothing.",
            "default": 500
          },
          "aiFacts": {
            "title": "AI facts",
            "type": "boolean",
            "description": "Add AI-read facts (services, prices, financing, emergency service, hiring), each with a quote from the site: $0.01 per business instead of $0.002 for the website scan alone. Off: website signals only.",
            "default": true
          },
          "aiOnlyForGaps": {
            "title": "AI only for businesses with these gaps",
            "type": "array",
            "description": "Run the AI only on businesses whose website scan shows at least one of these gaps (for example no online booking); the others are scanned only, at $0.002. Leave empty to run the AI on every business.",
            "items": {
              "type": "string",
              "enum": [
                "no_booking_seen",
                "no_chat_seen",
                "no_ad_tags_seen",
                "no_https",
                "not_mobile_ready",
                "copyright_2023_or_older",
                "no_contact_form_seen"
              ],
              "enumTitles": [
                "No online booking seen",
                "No chat widget seen",
                "No ad pixels seen",
                "No HTTPS",
                "Not mobile-ready",
                "Copyright year 2023 or older",
                "No contact form seen"
              ]
            },
            "default": []
          },
          "anthropicApiKey": {
            "title": "Anthropic API key",
            "type": "string",
            "description": "Leave empty on paid plans. On the free Apify plan the first 3 businesses of a run get AI facts on the Actor's key and the rest are scanned only, so add your own key (billed to you by Anthropic) for AI facts on all of them. Your key is also needed for Sonnet or Opus and more than 5 pages per site. The Actor's key uses Haiku, at most 5 pages, and AI facts for at most 1,000 businesses per run."
          },
          "model": {
            "title": "Claude model",
            "enum": [
              "claude-opus-5-5",
              "claude-sonnet-5-5",
              "claude-haiku-5-5"
            ],
            "type": "string",
            "description": "Model used for the AI facts. Haiku is the default and the cheapest. Sonnet and Opus run only with your own key in anthropicApiKey; without one the Actor uses Haiku.",
            "default": "claude-haiku-5-5"
          },
          "maxPagesPerSite": {
            "title": "Max pages per site",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Pages read per site, homepage included: the homepage plus the most relevant subpages (contact, services, booking, pricing, financing, careers). Capped at 5 without your own Anthropic key, 8 with it.",
            "default": 5
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Businesses processed in parallel.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxies used to fetch business websites. Residential proxies are not available on the Actor plan: RESIDENTIAL is removed from the proxy groups and Apify Proxy uses its datacenter groups instead. Your own proxy URLs are used as given."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}