Weedmaps Cannabis Dispensary Scraper avatar

Weedmaps Cannabis Dispensary Scraper

Pricing

from $6.00 / 1,000 results

Go to Apify Store
Weedmaps Cannabis Dispensary Scraper

Weedmaps Cannabis Dispensary Scraper

Scrape cannabis dispensaries and delivery services from Weedmaps by location. Get name, license type, address, phone, rating, reviews, coordinates and services. Export to JSON, CSV or Excel.

Pricing

from $6.00 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Weedmaps Cannabis Dispensary Scraper

Weedmaps Cannabis Dispensary Scraper

Here is one real result, with every field the actor returns (the long description is trimmed with an ellipsis, every value real):

{
"id": 29191,
"name": "SUNSET",
"slug": "sunset-herbal-corner-2-2",
"type": "dispensary",
"licenseType": "hybrid",
"retailerServices": ["storefront", "pickup"],
"rating": 5,
"reviewsCount": 3770,
"phone": "(818) 762-2282",
"email": "sunsetherbalcorner@gmail.com",
"website": "https://weedmaps.com/dispensaries/sunset-herbal-corner-2-2",
"address": "11503 Burbank Blvd",
"city": "North Hollywood",
"state": "California",
"zip": "91601",
"country": "United States",
"latitude": 34.172486,
"longitude": -118.38277,
"timezone": "America/Los_Angeles",
"online": null,
"url": "https://weedmaps.com/dispensaries/sunset-herbal-corner-2-2",
"licenses": null,
"description": "Welcome to Sunset! Proudly serving since 2007, Sunset is your trusted neighborhood dispensary now under new management ...",
"openNow": false,
"todaysHours": "6:00am - 10:00pm",
"menuItemsCount": 2125,
"verifiedMenuItemsCount": 2037,
"menuId": 840608498,
"onlineOrdering": true,
"hasCurbsidePickup": true,
"hasSaleItems": true,
"promoCode": "CELEBRATEJULY4EARLY",
"acceptsCreditCards": false,
"acceptsDebitCards": false,
"acceptsCashlessPayments": true,
"acceptsAch": false,
"minAge": 18,
"packageLevel": "listing_plus",
"bestOfWeedmaps": false,
"endorsementCount": 2037,
"isPublished": true,
"logo": "https://images.weedmaps.com/dispensaries/000/029/191/avatar/1786575688-1.png",
"aiProfileSummary": null,
"aiCategories": null,
"aiPrimaryCategory": null,
"source": "Weedmaps",
"observedAt": "2026-08-14T07:03:10.159Z",
"error": null
}

The most complete Weedmaps cannabis retailer scraper available. It returns every field the Weedmaps listing exposes for each dispensary, delivery service or doctor, including phone, email, website, coordinates, rating, review count, menu size, payment options and promos, plus optional AI add-ons, and gives you a location and retailer-type filter to target exactly the retailers you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches Weedmaps around the latitude and longitude you provide, applies your retailer-type filter, and writes one normalized record per cannabis retailer to the run's dataset. Each record carries the retailer name, license type, full address and coordinates, phone, email and website, rating and review count, opening hours, menu size, payment options, active promo code and logo. Missing source values are returned as null.

Choose the kind of retailer with retailerService: storefront dispensaries, delivery services, or doctors. Optional AI add-ons (withAiProfileSummary, withAiCategorize) add a plain-English profile summary and a category classification per retailer. They are paid add-ons, charged only when they return usable output.

Quickstart

Open the actor, paste this into the input, and press Run. It returns three storefront dispensaries near Los Angeles.

{
"latitude": "34.0522",
"longitude": "-118.2437",
"retailerService": "storefront",
"maxDispensaries": 3
}

Every input field is optional; latitude and longitude default to Los Angeles. Change the coordinates to search any area.

Input reference

FieldTypeRequiredDefaultDescription
maxDispensariesintegerno10Maximum number of cannabis retailers to collect (1 to 1000000).
latitudestringno34.0522Center latitude of the area to search. Defaults to Los Angeles.
longitudestringno-118.2437Center longitude of the area to search. Defaults to Los Angeles.
retailerServiceenumnostorefrontWhich kind of retailer to return. One of storefront, delivery, doctor.
withAiProfileSummarybooleannofalseAI plain-English profile summary per retailer. Paid add-on, billed only when a summary is produced.
withAiCategorizebooleannofalseAI categorization (storefront/delivery/medical/recreational and product categories). Paid add-on, billed only when a classification is produced.

Output reference

One dataset item per retailer. Types: string, integer, number, boolean, string[], or null when the source value is absent.

FieldTypeDescription
idintegerWeedmaps retailer ID.
namestringRetailer name.
slugstringWeedmaps URL slug.
typestringListing type, for example dispensary.
licenseTypestringLicense type, for example hybrid, medical, recreational.
retailerServicesstring[]Services offered, for example storefront, pickup, delivery.
ratingnumberAverage star rating.
reviewsCountintegerNumber of reviews.
phonestringContact phone, or null.
emailstringContact email, or null.
websitestringRetailer website URL.
addressstringStreet address.
citystringCity.
statestringState.
zipstringZIP / postal code.
countrystringCountry.
latitudenumberRetailer latitude.
longitudenumberRetailer longitude.
timezonestringIANA timezone.
onlinebooleanWhether the retailer is currently online, or null.
urlstringWeedmaps listing URL.
licensesstring[]State license numbers, or null.
descriptionstringRetailer description text.
openNowbooleanWhether the retailer is open at run time.
todaysHoursstringToday's opening hours.
menuItemsCountintegerNumber of menu items.
verifiedMenuItemsCountintegerNumber of verified menu items.
menuIdintegerWeedmaps menu ID.
onlineOrderingbooleanWhether online ordering is available.
hasCurbsidePickupbooleanWhether curbside pickup is offered.
hasSaleItemsbooleanWhether the retailer has items on sale.
promoCodestringActive promo code, or null.
acceptsCreditCardsbooleanWhether credit cards are accepted.
acceptsDebitCardsbooleanWhether debit cards are accepted.
acceptsCashlessPaymentsbooleanWhether cashless payments are accepted.
acceptsAchbooleanWhether ACH payments are accepted.
minAgeintegerMinimum entry age.
packageLevelstringWeedmaps listing package tier.
bestOfWeedmapsbooleanWhether the retailer holds a Best of Weedmaps award.
endorsementCountintegerNumber of endorsements.
isPublishedbooleanWhether the listing is published.
logostringLogo image URL.
aiProfileSummarystringAI profile summary, or null unless withAiProfileSummary is on.
aiCategoriesstring[]AI category tags, or null unless withAiCategorize is on.
aiPrimaryCategorystringAI primary category, or null.
sourcestringData source. Weedmaps.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"latitude":"34.0522","longitude":"-118.2437","retailerService":"storefront","maxDispensaries":3,"withAiProfileSummary":true,"withAiCategorize":true}). The AI fields are populated because this run enabled them, and the long description is trimmed with an ellipsis:

{
"id": 29191,
"name": "SUNSET",
"slug": "sunset-herbal-corner-2-2",
"type": "dispensary",
"licenseType": "hybrid",
"retailerServices": ["storefront", "pickup"],
"rating": 5,
"reviewsCount": 3770,
"phone": "(818) 762-2282",
"email": "sunsetherbalcorner@gmail.com",
"website": "https://weedmaps.com/dispensaries/sunset-herbal-corner-2-2",
"address": "11503 Burbank Blvd",
"city": "North Hollywood",
"state": "California",
"zip": "91601",
"country": "United States",
"latitude": 34.172486,
"longitude": -118.38277,
"timezone": "America/Los_Angeles",
"url": "https://weedmaps.com/dispensaries/sunset-herbal-corner-2-2",
"description": "Welcome to Sunset! Proudly serving since 2007 ...",
"openNow": false,
"todaysHours": "6:00am - 10:00pm",
"menuItemsCount": 2125,
"verifiedMenuItemsCount": 2037,
"onlineOrdering": true,
"hasCurbsidePickup": true,
"promoCode": "CELEBRATEJULY4EARLY",
"acceptsCashlessPayments": true,
"minAge": 18,
"aiProfileSummary": "Sunset is a highly-rated cannabis dispensary in North Hollywood, California, offering over 2,100 menu items with online ordering and curbside pickup, serving customers since 2007.",
"aiCategories": ["storefront", "delivery", "recreational"],
"aiPrimaryCategory": "storefront",
"source": "Weedmaps",
"observedAt": "2026-08-14T07:03:10.159Z"
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~cannabis-dispensary-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"latitude":"34.0522","longitude":"-118.2437","retailerService":"storefront","maxDispensaries":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~cannabis-dispensary-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"latitude":"40.7128","longitude":"-74.0060","retailerService":"delivery","maxDispensaries":100}'

Apify CLI:

apify call scrapers_lat/cannabis-dispensary-scraper \
--input '{"latitude":"37.7749","longitude":"-122.4194","retailerService":"doctor"}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per retailer record returned (result event). See the pricing tab for the current per-result price.
  • AI add-ons are billed separately. withAiProfileSummary and withAiCategorize each charge only when they return usable output, and are available to paying users.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxDispensaries.

FAQ and troubleshooting

How do I search a different city? Change latitude and longitude to the center of the area you want. The actor collects retailers around that point.

Can I get delivery services or doctors instead of storefronts? Yes. Set retailerService to delivery or doctor.

Does it include phone and email? Yes, when Weedmaps publishes them. Missing contact fields are returned as null.

A run returned 0 records. Why? There may be no listed retailers of that type near the coordinates. Try a denser urban area or a different retailerService. Zero-result runs are not charged.

Why are the AI fields null? They only populate when you enable withAiProfileSummary or withAiCategorize. Otherwise they stay null.

Is this an official Weedmaps tool? No. This actor is independent and has no affiliation with Weedmaps. It reads only data that is publicly available on Weedmaps listings. Use the results in accordance with the source's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Weedmaps. Accesses only publicly available listing data. Use in accordance with the source's terms.