{
  "openapi": "3.0.1",
  "info": {
    "title": "Weedmaps Cannabis Dispensary & Business Leads Scraper",
    "description": "Scrape Weedmaps dispensaries, delivery services, brands & doctors with licenses, phone, email, website, hours, ratings, payments & menus. Lead scoring + monitoring.",
    "version": "0.1",
    "x-build-id": "jCTkpb8XqYiiha8ch"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~weedmaps-cannabis-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-weedmaps-cannabis-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/scrapesage~weedmaps-cannabis-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-weedmaps-cannabis-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/scrapesage~weedmaps-cannabis-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-weedmaps-cannabis-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": {
          "searchTerms": {
            "title": "Search locations (city / state / ZIP)",
            "type": "array",
            "description": "Locations to search, e.g. \"Los Angeles, CA\", \"Denver, Colorado\", \"Portland, OR\" or a ZIP like \"90001\". Each is combined with every selected listing type. Leave empty if you use Start URLs or direct coordinates.",
            "default": [
              "Los Angeles, CA"
            ],
            "items": {
              "type": "string"
            }
          },
          "listingTypes": {
            "title": "Listing types",
            "type": "array",
            "description": "Which Weedmaps listing types to collect. Dispensaries (storefronts) and delivery services are the core B2B retail leads; brands and doctors are also supported.",
            "items": {
              "type": "string",
              "enum": [
                "dispensary",
                "delivery",
                "brand",
                "doctor"
              ],
              "enumTitles": [
                "Dispensaries (storefronts)",
                "Delivery services",
                "Brands",
                "Doctors / clinics"
              ]
            },
            "default": [
              "dispensary"
            ]
          },
          "mode": {
            "title": "Output mode",
            "enum": [
              "leads",
              "menu"
            ],
            "type": "string",
            "description": "`Leads` (default) = one rich record per business (dispensary/delivery/brand/doctor) with contacts, license, hours & lead score. `Menu` = one record per product on each business's live menu (name, brand, category, price tiers, THC/CBD) for product & price intelligence.",
            "default": "leads"
          },
          "startUrls": {
            "title": "Start URLs (Weedmaps pages)",
            "type": "array",
            "description": "Optional. Paste Weedmaps listing URLs (e.g. https://weedmaps.com/dispensaries/some-shop) to scrape those specific listings directly.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of listings to return across all locations and types. Use 0 for no limit (advanced — can be large and slow). Default keeps runs fast and cheap.",
            "default": 100
          },
          "includeDetails": {
            "title": "Include full details (licenses, website, hours, socials)",
            "type": "boolean",
            "description": "Fetch each listing's detail page to enrich it with license number(s), website, full weekly hours, social links, description and business attributes. One extra fast API call per listing. Recommended ON for the richest leads.",
            "default": true
          },
          "includeMenu": {
            "title": "Include menu products",
            "type": "boolean",
            "description": "Also collect each listing's live menu (product name, brand, category, price, THC/CBD). Adds extra API calls and time — opt-in for pricing/inventory intelligence.",
            "default": false
          },
          "maxMenuItemsPerListing": {
            "title": "Max menu items per listing",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on menu products collected per business — applies to 'Include menu products', the menu summary, and Menu output mode.",
            "default": 50
          },
          "includeMenuSummary": {
            "title": "Add menu summary to each lead",
            "type": "boolean",
            "description": "In Leads mode, attach a compact `menuSummary` to each business: total products, top product categories, top brands carried, and price range. One extra API call per business.",
            "default": false
          },
          "onlyLicensed": {
            "title": "Only licensed listings",
            "type": "boolean",
            "description": "Keep only listings that expose a state license number (requires 'Include full details'). Filters out unverified/placeholder listings.",
            "default": false
          },
          "openNow": {
            "title": "Only open now",
            "type": "boolean",
            "description": "Keep only listings that are currently open for business.",
            "default": false
          },
          "onlineOrderingOnly": {
            "title": "Only with online ordering",
            "type": "boolean",
            "description": "Keep only listings that accept online orders (pickup or delivery).",
            "default": false
          },
          "radiusMiles": {
            "title": "Search radius (miles)",
            "minimum": 1,
            "maximum": 150,
            "type": "integer",
            "description": "Radius around each resolved location to search. Larger = more listings, wider net.",
            "default": 25
          },
          "latitude": {
            "title": "Latitude (advanced)",
            "type": "string",
            "description": "Optional. Search around an exact point instead of a city name. Use together with Longitude."
          },
          "longitude": {
            "title": "Longitude (advanced)",
            "type": "string",
            "description": "Optional. Search around an exact point instead of a city name. Use together with Latitude."
          },
          "monitorMode": {
            "title": "Monitor mode (only new / changed)",
            "type": "boolean",
            "description": "Track results across runs in a key-value store and, by default, only output listings that are new or have changed since the last run. Pair with an Apify Schedule for a recurring 'new dispensary openings' lead feed. (Independent of the scheduler — the schedule decides WHEN to run, monitor mode decides WHAT each run outputs.)",
            "default": false
          },
          "monitorOnlyNew": {
            "title": "Monitor: emit only new/changed",
            "type": "boolean",
            "description": "When Monitor mode is on: if true, emit only new or changed listings; if false, emit everything but tag each record as new/updated/unchanged.",
            "default": true
          },
          "monitorKey": {
            "title": "Monitor state key",
            "type": "string",
            "description": "Namespace for the monitor state store, so different saved tasks track their own history. Letters, numbers and hyphens.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Residential proxy is required — Weedmaps blocks datacenter IPs. The default (Apify Residential) is recommended for reliability; data volume is tiny (JSON), so residential cost is negligible.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}