Weedmaps Cannabis Dispensary & Business Leads Scraper
Pricing
from $5.00 / 1,000 cannabis listing scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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.
| Data | Typical scrapers | This actor |
|---|---|---|
| Business phone | ✅ | ✅ |
| Business email | ❌ | ✅ 100% of listings |
| State license number(s) + type | ❌ | ✅ |
| Website | partial | ✅ 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-since | partial | ✅ |
| 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, andstate, then reach out withphoneandemail. - 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
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Weedmaps Cannabis Dispensary & Business Leads Scraper, type one or more locations (e.g.
Denver, CO), pick the listing types, and click Start. - Watch licensed cannabis leads stream into the dataset table.
- 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 rawlat,lng. Each is searched independently and the item budget is shared evenly across them. - listingTypes — any of
dispensary(storefronts),delivery,brand,doctor. Defaultdispensary. - mode —
leads(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
0for 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:
- Google Maps Scraper — any local business with phone, website, and reviews.
- Houzz Scraper — home & design professional leads.
- Bark Listing Scraper — service-provider leads across hundreds of categories.
- US Business Formation Scraper — newly registered companies as fresh-intent leads.
- TaxBuzz Scraper — accountant & tax-preparer leads with contact data.
- LinkedIn Company Scraper — company firmographics and profiles.
- Google Ads Transparency Scraper — who's advertising what, including cannabis brands.
- Facebook Ad Library Scraper — competitor ad intelligence.
Tips
- More leads per city: raise
radiusMiles(up to 150) to widen the net, or add nearby cities tosearchTerms. - Highest-quality leads only: set
onlyLicensed: trueand sort the dataset byleadScore. - Cheapest runs: turn
includeDetailsoff for a fast list (still includes phone, email, rating); turn it on for licenses, website, hours, and socials. - Recurring monitoring: combine Schedules with
monitorMode: trueto track only new/changed listings. - Dispensaries vs delivery: storefront
dispensarylistings have the highest license/website coverage;deliverylistings 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.