Weedmaps Dispensary Scraper — Dispensary Lists & Contacts avatar

Weedmaps Dispensary Scraper — Dispensary Lists & Contacts

Pricing

from $0.80 / 1,000 dispensary results

Go to Apify Store
Weedmaps Dispensary Scraper — Dispensary Lists & Contacts

Weedmaps Dispensary Scraper — Dispensary Lists & Contacts

Build cannabis dispensary lists from Weedmaps by US city or state: address, phone, email, rating, license type, hours and deals. USD 1 per 1,000 dispensaries.

Pricing

from $0.80 / 1,000 dispensary results

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

14 days ago

Last modified

Features

Limited permissions

Share

Weedmaps Dispensary Scraper builds cannabis dispensary lists from Weedmaps: enter a US city or state, or paste Weedmaps URLs, and get each dispensary's name, address, coordinates, phone, email, rating, review count, license type, today's hours, payment options and active deals. It is built for cannabis brands, distributors, ancillary B2B vendors and market researchers, and it costs USD 1 per 1,000 dispensaries on the FREE tier (USD 0.80 per 1,000 on GOLD), plus USD 0.005 per run.

What dispensary data does Weedmaps Dispensary Scraper return?

Each Weedmaps listing is one dataset row:

FieldWhat it contains
id, wmid, slug, urlWeedmaps identifiers and the listing URL
name, typeListing name and type, for example dispensary
address, city, state, zipCode, countryStreet address and location
latitude, longitudeCoordinates
phoneNumber, email, websiteBusiness contacts, when the listing shows them
rating, reviewsCount, rankingStar rating, number of reviews and Weedmaps ranking score
licenseTyperecreational, medical or hybrid
retailerServices, hasCurbsidePickupServices such as storefront, pickup or delivery, and curbside pickup
openNow, todaysHours, minAgeOpen status at scrape time, today's hours and minimum customer age
acceptsCreditCards, acceptsDebitCards, acceptsCashlessPaymentsPayment options
menuItemsCount, verifiedMenuItemsCount, hasSaleItemsMenu size and whether items are on sale
hasFeaturedDeal, topDeals, topDealsCountActive deals with title, brand and slug
socialEquityWhether Weedmaps marks the business as social equity
avatarImageUrl, introBodyLogo and the listing's intro text
menuItemsOnly with Scrape Menu Items: up to 200 items with name, brand, category, price, units, THC, CBD and image
scrapedAtCollection time

In a 20-row Los Angeles test run on 2026-10-26, every row had a phone number and an email address, and none had a website. Each run also writes an OUTPUT record with the status, row count, locations crawled and warnings.

How do I get a list of dispensaries in a city or state?

Type the place into Location / City and run. Use City, ST or City, State for a city, such as Denver, CO, or a state code or full state name alone, such as AZ or Arizona, for the state page. The Actor opens the matching Weedmaps listing page, reads about 30 dispensaries per page and follows up to Max Pages per Location pages (default 5, up to 50).

Every dispensary in Phoenix, up to 300:

{
"location": "Phoenix, AZ",
"maxResults": 300,
"maxPagesPerLocation": 10
}

You can also paste Weedmaps URLs into Start URLs: region pages such as https://weedmaps.com/dispensaries/in/united-states/colorado/denver, or single listings such as https://weedmaps.com/dispensaries/stiiizy. Pasted URLs take priority over the location field.

Two specific dispensaries with menu items:

{
"startUrls": [
{ "url": "https://weedmaps.com/dispensaries/stiiizy" },
{ "url": "https://weedmaps.com/dispensaries/purple-star-md" }
],
"scrapeMenuItems": true,
"maxMenuItemsPerDispensary": 20,
"maxResults": 2
}

Max Results (1–5,000, default 20) caps the rows across all inputs. Duplicate listings are removed.

When should I use it, and when not?

Use it when you need contact and location data for dispensaries in a market: wholesale and distribution outreach, territory planning, retail mapping, competitor counts per city or a statewide dispensary list.

Use another Actor when:

How do I get Weedmaps dispensary data through an API?

Run the Actor through the Apify API and read the dataset. No Weedmaps account or API key is needed.

JavaScript with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/weedmaps-dispensary-scraper').call({
location: 'Denver, CO',
maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((d) => [d.name, d.phoneNumber, d.email]));

Python with apify-client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/weedmaps-dispensary-scraper").call(run_input={
"location": "Detroit, MI",
"maxResults": 100,
})
for d in client.dataset(run.default_dataset_id).iterate_items():
print(d["name"], d["address"], d["licenseType"], d["rating"])

Export the dataset as CSV or Excel for a CRM import, or schedule weekly runs to keep a list current.

Use it from an AI assistant

Weedmaps Dispensary Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/weedmaps-dispensary-scraper to your client, then ask, for example: "Use Weedmaps Dispensary Scraper to list 50 dispensaries in Denver, CO with phone, email, address and rating as a CSV."

What does the output look like?

Two rows from the 2026-10-26 Los Angeles test run, shortened:

[
{
"id": 65841,
"name": "STIIIZY Downtown LA",
"url": "https://weedmaps.com/dispensaries/stiiizy",
"type": "dispensary",
"address": "728 E Commercial St",
"city": "Los Angeles",
"state": "California",
"zipCode": "90012",
"latitude": 34.052206,
"longitude": -118.232052,
"phoneNumber": "(323) 929-4201",
"email": "retail.dtla@stiiizy.com",
"website": null,
"rating": 4.8,
"reviewsCount": 8426,
"licenseType": "hybrid",
"retailerServices": ["storefront", "pickup"],
"todaysHours": "6:00am - 9:45pm",
"minAge": 21,
"menuItemsCount": 1753,
"topDeals": [{ "id": 1484008, "title": "Up to 25% off Top Brands!" }],
"topDealsCount": 4,
"acceptsDebitCards": true,
"scrapedAt": "2026-10-26T07:49:54.325Z"
},
{
"id": 458,
"name": "Dtpg Collective",
"url": "https://weedmaps.com/dispensaries/the-cure-company-dtla",
"type": "dispensary",
"address": "930 South Alameda Street",
"city": "Los Angeles",
"zipCode": "90021",
"phoneNumber": "(213) 275-1599",
"email": "info@curecompany.com",
"rating": 4.7,
"reviewsCount": 3486,
"licenseType": "hybrid",
"todaysHours": "9:00am - 9:00pm",
"minAge": 18,
"scrapedAt": "2026-10-26T07:49:54.393Z"
}
]

How much does Weedmaps Dispensary Scraper cost?

The Actor uses pay-per-event pricing. Platform usage is included in the event prices.

EventFREEBRONZESILVERGOLDPLATINUM / DIAMOND
Dispensary result (one dataset row)USD 0.001USD 0.000975USD 0.00095USD 0.0008USD 0.0008
Actor start (per started GB of allocated memory)USD 0.005USD 0.005USD 0.005USD 0.005USD 0.005

The Actor runs with at most 1 GB of memory, so each run has one start event. Worked totals on the FREE tier:

  • Prefilled run (20 Los Angeles dispensaries): 20 × USD 0.001 + USD 0.005 = USD 0.025
  • 1,000 dispensaries: 1,000 × USD 0.001 + USD 0.005 = USD 1.005 (USD 0.805 on GOLD)

Menu items are included in the dispensary price. A run that returns nothing charges only the start fee.

What are the limits?

  • About 30 dispensaries per listing page. One location covers at most 50 pages; use several start URLs or runs for larger areas.
  • US locations from the location field. City, ST, City, State, state codes and full state names build US Weedmaps URLs. A bare city name without a state may not match a Weedmaps page. For other regions, paste the Weedmaps region URL; coverage outside the US was not tested.
  • Menus are slower and optional. Scrape Menu Items opens each dispensary's page, and menuItems appears only when that page includes menu data.
  • Speed. The 20-row Los Angeles run took about 6 seconds.
  • Truthful empties. A location that does not exist on Weedmaps returns 0 rows with a warning in OUTPUT, not invented records.
  • Data access is handled by the Actor; there is no proxy setting in the input. If its access route is unavailable, the run fails with a configuration message and charges no rows.

FAQ

Do I need a Weedmaps API key?

No. The Actor reads the public Weedmaps listing pages. Weedmaps' own developer APIs are aimed at integration partners and are not used here.

Can I get every dispensary in a state?

Yes, up to 50 listing pages per location (about 1,500 listings). Enter the state code or name, such as CO or Colorado, set Max Pages per Location to 50 and raise Max Results, or run major cities separately.

Does it include product prices and THC levels?

Only with Scrape Menu Items, and only for items the dispensary page includes. For full menus and cross-store product search, use Weedmaps Scraper.

Are the emails and phone numbers personal?

They are the business contacts each dispensary publishes on Weedmaps, usually shared inboxes such as info@.

Does it cover delivery services?

Single delivery listings work when you paste their weedmaps.com/deliveries/... URL. Location searches read Weedmaps' dispensary listing pages.

Is there a free dispensary list tool?

You can run this Actor on Apify's free plan. Each row is charged at the FREE-tier price above, and there is no subscription.

Other travel and local-place data tools from the same developer:

Weedmaps Dispensary Scraper collects business information that Weedmaps shows publicly, without logging in or bypassing access controls. Cannabis marketing is regulated: follow your state's advertising rules, CAN-SPAM for email, TCPA and Do Not Call rules for calls and texts, and Weedmaps' terms. This is not legal advice, and the Actor is not affiliated with Weedmaps.

Last verified: 2026-10-27