{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper + AI Lead Generation & Outreach",
    "description": "Scrape Google Maps businesses with emails, reviews, and social links. Let AI score every lead and write personalized cold emails for you. Choose your goal (web design, SEO, reputation or custom) and get ready-to-send outreach for every lead. Free email extraction. Export to CSV, Sheets, or CRM.",
    "version": "1.0",
    "x-build-id": "Srlq9OXqA67kK7sId"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/buseta~google-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-buseta-google-maps-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/buseta~google-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-buseta-google-maps-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/buseta~google-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-buseta-google-maps-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Scrape mode",
            "enum": [
              "search",
              "place_urls"
            ],
            "type": "string",
            "description": "How to find places. 'search' uses keyword + location with auto-grid for comprehensive results. 'place_urls' scrapes specific Google Maps URLs.",
            "default": "search"
          },
          "search_queries": {
            "title": "Search queries",
            "type": "array",
            "description": "List of search queries. Each query should include what and where, e.g. 'dentists in Chicago'. You can add multiple queries to scrape across cities or categories in one run."
          },
          "bounding_box": {
            "title": "Bounding box (optional, overrides location in query)",
            "type": "object",
            "description": "Custom search area as coordinates: {\"sw_lat\": 40.70, \"sw_lng\": -74.02, \"ne_lat\": 40.80, \"ne_lng\": -73.93}. Uses grid search to cover the entire area."
          },
          "place_urls": {
            "title": "Place URLs",
            "type": "array",
            "description": "List of Google Maps place URLs to scrape details from. Used in 'place_urls' mode."
          },
          "max_places": {
            "title": "Max places per query",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of places to scrape per search query. Set higher (500+) for comprehensive area coverage with auto-grid.",
            "default": 100
          },
          "get_reviews": {
            "title": "Scrape reviews",
            "type": "boolean",
            "description": "Extract reviews for each place. Charged at $0.50 per 1,000 reviews.",
            "default": false
          },
          "max_reviews_per_place": {
            "title": "Max reviews per place",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of reviews to scrape per place.",
            "default": 20
          },
          "reviews_sort": {
            "title": "Sort reviews by",
            "enum": [
              "relevant",
              "newest",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "How to sort reviews when scraping.",
            "default": "newest"
          },
          "get_emails": {
            "title": "Extract emails & social links",
            "type": "boolean",
            "description": "Crawl each business website to find email addresses and social media links. Free — no extra charge.",
            "default": false
          },
          "only_without_website": {
            "title": "Only businesses WITHOUT a website",
            "type": "boolean",
            "description": "Filter to only return businesses that don't have a website listed. Perfect for web design agencies looking for prospects.",
            "default": false
          },
          "min_rating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Only include places with this rating or higher (1.0 - 5.0)."
          },
          "max_rating": {
            "title": "Maximum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Only include places with this rating or lower. Useful for finding businesses that need help (reputation management leads)."
          },
          "ai_lead_scoring": {
            "title": "AI Lead Scoring & Outreach",
            "type": "boolean",
            "description": "AI analyzes each business and generates a lead score (0-100) with a personalized outreach email draft. Charged at $35 per 1,000 businesses.",
            "default": false
          },
          "ai_goal": {
            "title": "Your business goal (for AI outreach)",
            "enum": [
              "web_design",
              "seo_marketing",
              "reputation_management",
              "general_sales",
              "custom"
            ],
            "type": "string",
            "description": "Tell the AI what you're selling so it writes relevant outreach emails for each lead.\n\n• Web Design — You build websites. AI targets businesses with no website or outdated sites, pitching modern web presence and how competitors are getting customers online.\n\n• SEO & Marketing — You do SEO, Google Ads, or digital marketing. AI targets businesses with low visibility, few reviews, or weak online presence compared to local competitors.\n\n• Reputation Management — You help businesses improve their online image. AI targets businesses with low ratings or negative reviews, highlighting specific complaints and offering solutions.\n\n• General B2B Sales — You sell any product/service to local businesses. AI writes a professional intro pitch based on the business profile. Describe what you sell in the 'Custom pitch' field.\n\n• Custom — Write your own pitch context. AI uses your description to craft personalized outreach for every lead.",
            "default": "general_sales"
          },
          "ai_custom_pitch": {
            "title": "Custom pitch context (for 'Custom' or 'General B2B Sales' goal)",
            "maxLength": 300,
            "type": "string",
            "description": "Describe what you're selling and who you are in 1-2 sentences. Example: 'I run a commercial cleaning company. I want to pitch office cleaning services to businesses in the area.' Max 300 characters."
          },
          "ai_sender_name": {
            "title": "Your name (for outreach emails)",
            "type": "string",
            "description": "Your name to sign the AI-generated outreach emails. Leave blank for '[Your Name]' placeholder."
          },
          "ai_market_report": {
            "title": "AI Market Intelligence Report",
            "type": "boolean",
            "description": "After all places are scraped, AI generates a market report: saturation analysis, underserved areas, competitor benchmarks, and top opportunities. Charged once per run at $0.10.",
            "default": false
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language for results (ISO 639-1 code).",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Country code for localized results (ISO 3166-1 alpha-2).",
            "default": "us"
          },
          "proxy_config": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Datacenter proxies work well for Google Maps."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}