Weedmaps Cannabis Dispensary & Business Leads Scraper avatar

Weedmaps Cannabis Dispensary & Business Leads Scraper

Pricing

from $5.00 / 1,000 cannabis listing scrapeds

Go to Apify Store
Weedmaps Cannabis Dispensary & Business Leads Scraper

Weedmaps Cannabis Dispensary & Business Leads Scraper

Scrape Weedmaps dispensaries, delivery services, brands & doctors with licenses, phone, email, website, hours, ratings, payments & menus. Lead scoring + monitoring.

Pricing

from $5.00 / 1,000 cannabis listing scrapeds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Weedmaps Scraper — Cannabis Dispensary, Delivery & Brand Leads (Licenses, Emails, Phones & Menus)

Extract complete Weedmaps listing data — including the fields other scrapers leave empty: state license numbers, business email, phone, full weekly hours, payment methods, social links, and live menu pricing (THC/CBD). Turn every licensed dispensary, delivery service, brand, and doctor into a ready-to-contact B2B lead with a built-in lead score.

No login, no API key, no browser — fast JSON extraction straight from Weedmaps' public discovery API.

Why this Weedmaps scraper?

Most cannabis scrapers return a name and an address and stop there. This actor merges Weedmaps' list and detail endpoints to ship the richest dataset in the category — and every record carries a real, contactable phone and email.

DataTypical scrapersThis actor
Business phone
Business email100% of listings
State license number(s) + type
Websitepartial✅ when listed
Full weekly business hours
Payment methods (cash/debit/credit/ACH/ATM)
Online ordering / pickup / curbside / delivery flags
Social links (Instagram/Facebook/Twitter/YouTube)✅ opt-in detail
Rating, review count, ranking, member-sincepartial
Live menu — product, brand, category, price tiers, THC/CBD✅ opt-in
Menu mode — one record per product across stores
Per-store menu summary (top categories & brands)✅ opt-in
Price range (eighth / ounce / gram min–max)
Active promo / deal codes
Distance from search point
Lead score (0–100) per business
New-opening / change monitoring✅ built-in

Use cases

  • B2B lead generation — sell to licensed cannabis operators: POS & payments, compliance/seed-to-sale, packaging, lab testing, insurance, banking, security, marketing & SEO, delivery logistics, and real estate. Filter by leadScore, isLicensed, and state, then reach out with phone and email.
  • Market & competitor intelligence — map every dispensary and delivery service in a city, track ratings, online-ordering adoption, and menu pricing / THC potency by brand and category.
  • M&A and investment sourcing — find licensed operators by market, license type (medical/recreational), and size signals (reviewsCount, menuItemsCount, currentDealsCount).
  • Brand distribution & retail expansion — see which retailers carry which brands, and where the white space is, by scraping menus across markets.
  • New-opening alerts — schedule recurring runs with monitor mode to capture newly licensed dispensaries and delivery services the day they appear — the highest-intent leads in the industry.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Weedmaps Cannabis Dispensary & Business Leads Scraper, type one or more locations (e.g. Denver, CO), pick the listing types, and click Start.
  3. Watch licensed cannabis leads stream into the dataset table.
  4. Export as JSON, CSV, Excel, or XML — or pull results programmatically via the Apify API.

Input

{
"searchTerms": ["Los Angeles, CA", "Denver, CO"],
"listingTypes": ["dispensary", "delivery"],
"maxItems": 100,
"includeDetails": true,
"includeMenu": false,
"onlyLicensed": false,
"radiusMiles": 25,
"monitorMode": false
}
  • searchTerms — locations to search: City, ST (Denver, CO), City, State, a ZIP, or raw lat,lng. Each is searched independently and the item budget is shared evenly across them.
  • listingTypes — any of dispensary (storefronts), delivery, brand, doctor. Default dispensary.
  • modeleads (default) = one rich record per business; menu = one record per product on each business's live menu (name, brand, category, price tiers, THC/CBD) with retailer context, for product & price intelligence.
  • startUrls — optional. Paste Weedmaps listing URLs (https://weedmaps.com/dispensaries/...) to scrape specific listings directly.
  • maxItems (default 100) — total cap across all locations/types. Use 0 for no limit (advanced).
  • includeDetails (default true) — enrich each listing with license number(s), website, full hours, social links, description and business attributes (one fast API call each). Recommended on.
  • includeMenu (default false) — in Leads mode, nest the live menu (product name, brand, category, price tiers, THC/CBD, rating) inside each business record.
  • includeMenuSummary (default false) — in Leads mode, attach a compact menuSummary (total products, top categories, top brands, price range) to each business.
  • maxMenuItemsPerListing (default 50) — menu cap per business (applies to nested menu, summary, and Menu mode).
  • onlyLicensed (default false) — keep only listings that expose a state license number.
  • openNow / onlineOrderingOnly — quick quality filters.
  • radiusMiles (default 25) — search radius around each location.
  • latitude / longitude — search around an exact point instead of a city name.
  • monitorMode (default false) — track listings across runs and, by default, output only new or changed ones (see below).
  • proxyConfiguration — defaults to Apify Proxy; Weedmaps is reachable from datacenter IPs.

Output

One rich record per listing. Example (claimed dispensary, trimmed):

{
"platform": "weedmaps",
"listingType": "dispensary",
"wmid": 161027351,
"name": "Pharmer's Market - Norman",
"doingBusinessAs": "Pharmer's Market - Norman",
"licenseType": "medical",
"isMedical": true,
"isRecreational": false,
"licenseNumber": "DAAA-N1JM-2WP4",
"licenses": [{ "type": "Medical Retail", "number": "DAAA-N1JM-2WP4" }],
"isLicensed": true,
"address": "530 West Lindsey Street",
"city": "Norman",
"state": "Oklahoma",
"zipCode": "73069",
"latitude": 35.203962,
"longitude": -97.448847,
"distanceMiles": 0.4,
"timezone": "America/Chicago",
"phone": "(405) 857-7445",
"email": "pharmersmarketlindsey@gmail.com",
"website": "http://www.pharmersmarketonlindsey.com",
"socialInstagram": "https://www.instagram.com/pharmersmarketonlindsey/",
"socialFacebook": "https://www.facebook.com/PharmerMarket/",
"rating": 5.0,
"reviewsCount": 1473,
"memberSince": "2019",
"isVerifiedSeller": true,
"claimed": true,
"socialEquity": false,
"onlineOrderingEnabled": true,
"hasCurbsidePickup": true,
"retailerServices": ["storefront", "pickup"],
"acceptsCreditCards": false,
"hasAtm": true,
"hasSecurityGuard": true,
"openNow": true,
"todaysHours": "9:00am - 11:59pm",
"businessHours": { "monday": "9:00am - 10:00pm", "friday": "9:00am - 11:59pm" },
"menuItemsCount": 819,
"avatarImage": "https://images.weedmaps.com/dispensaries/.../avatar.png",
"webUrl": "https://weedmaps.com/dispensaries/pharmhouse-cannabis-company",
"leadScore": 96,
"leadSignals": ["phone", "email", "website", "licensed", "well-rated", "established", "online-ordering", "verified", "social"],
"searchLocation": "Norman, OK",
"scrapedAt": "2026-06-26T21:00:00.000Z"
}

Every business record also includes a priceSummary (overall + eighth/ounce/gram min–max) and, when active, a promoCode ({ code, title, discount, discountType }). With includeMenu: true you also get a nested menu array of { name, brand, category, genetics, price, priceTiers, thcPercent, cbdPercent, rating }; with includeMenuSummary: true you get a compact menuSummary ({ totalProducts, topCategories, topBrands, priceMin, priceMax }).

Menu mode (mode: "menu") — one record per product, with its business attached:

{
"type": "menuItem",
"retailerName": "STIIIZY Downtown LA",
"retailerCity": "Los Angeles",
"retailerState": "California",
"retailerLicenseType": "hybrid",
"name": "Jack of Diamonds | Indoor Smalls - Half Oz",
"brand": "Connected Cannabis Co.",
"category": "Indica",
"genetics": "Hybrid",
"price": 110,
"priceTiers": [{ "label": "1/2 oz", "price": 110, "unit": "ounce" }],
"thcPercent": 28.4,
"isOnlineOrderable": true
}

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

  • Apify API — start runs, fetch datasets, and manage schedules over REST.
  • apify-client for JavaScript and apify-client for Python — official SDKs.
  • Schedules — run it daily/weekly with monitor mode to capture newly licensed dispensaries and price changes; perfect for lead pipelines.
  • Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/weedmaps-cannabis-scraper').call({
searchTerms: ['Denver, CO', 'Los Angeles, CA'],
listingTypes: ['dispensary', 'delivery'],
maxItems: 100,
includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} cannabis business leads`);

Monitor mode vs. Schedules — how they work together

They are independent and complementary: a Schedule decides when the actor runs (e.g. every morning), while monitor mode decides what each run outputs. With monitorMode: true the actor remembers every listing it has seen in a key-value store and, by default (monitorOnlyNew: true), emits only listings that are new or changed since last time — so a daily schedule becomes a clean "new dispensary openings & price changes" feed with no duplicates.

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new cannabis leads straight into your CRM.
  • Slack — get notified when a monitored market gets a new licensed operator.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find licensed dispensaries in Denver with online ordering and list their emails" and let it run this scraper for you.

Agent-ready: autonomous payments (x402 & Skyfire)

This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

More scrapers from scrapesage

Build a complete local-business & B2B lead-gen stack:

Tips

  • More leads per city: raise radiusMiles (up to 150) to widen the net, or add nearby cities to searchTerms.
  • Highest-quality leads only: set onlyLicensed: true and sort the dataset by leadScore.
  • Cheapest runs: turn includeDetails off for a fast list (still includes phone, email, rating); turn it on for licenses, website, hours, and socials.
  • Recurring monitoring: combine Schedules with monitorMode: true to track only new/changed listings.
  • Dispensaries vs delivery: storefront dispensary listings have the highest license/website coverage; delivery listings include more unclaimed operators (still phone + email).

FAQ

How do I scrape dispensaries for a specific city? Put the city in searchTerms as City, ST (e.g. Denver, CO), choose your listingTypes, and start. You can mix many cities in one run.

Does it need a Weedmaps API key or login? No. It reads Weedmaps' public discovery endpoints — no key, no cookies, no browser.

Where do the emails and phones come from? They are the public contact details Weedmaps displays on each listing. Coverage of phone and email is ~100% across listing types; website, license, and hours are present for claimed/storefront listings and may be absent on unclaimed delivery-only listings.

Can I get menu prices and THC levels? Yes — set includeMenu: true. Each listing gets its live menu with product, brand, category, price tiers, and THC/CBD percentages.

How do I monitor new dispensary openings? Turn on monitorMode, then create a daily Schedule. Each run outputs only new or changed listings — add a webhook or Zapier zap to push them into your CRM.

A field is null — why? Core fields (name, phone, email, rating, location, lead score) are present for every listing. Some listings — especially unclaimed, delivery-only ones — don't publish a website, license number, or hours; those fields are null only when Weedmaps genuinely doesn't expose them, never because the scraper skipped them.

Is scraping Weedmaps legal? This actor collects publicly available business data only. You are responsible for using the data in compliance with applicable laws (including marketing/communication and privacy regulations) and Weedmaps' terms.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.