Dutchie Dispensary & Menu Scraper - Cannabis Prices
Pricing
from $1.00 / 1,000 results
Dutchie Dispensary & Menu Scraper - Cannabis Prices
Scrape Dutchie (dutchie.com) cannabis dispensaries and menus: products by size, recreational and medical prices, specials, THC and CBD, stock, hours and location. Search by city, zip or state. Cache returns only new or changed products. Export JSON, CSV or Excel.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
ActorFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Security
Limited permissionsShare
Dutchie (dutchie.com) Dispensary & Menu Scraper - Cannabis Prices
Scrape cannabis dispensaries and menus from Dutchie (dutchie.com): every product by size with recreational and medical prices, live specials, THC and CBD, stock, brand and category, plus the store's address, phone, hours and coordinates. Paste a dispensary menu link, or search by city, zip code, coordinates or whole state, and press Start. Export JSON, CSV or Excel, or call it as an API.
Target website: dutchie.com

✨ Features of this Dutchie dispensary and menu scraper
- Full menu extraction — one row per product size with brand, category, subcategory, strain type, THC, CBD, terpenes, cannabinoids, effects, images and an optional description.
- Recreational and medical prices — both prices are saved on every row, and you choose which menu is the shelf price.
- Specials and sales — live special names, kinds and dates, the sale price, and a specials-only filter.
- Stock — units available for each size and an in-stock flag.
- Find dispensaries — search by city and state, by zip or postal code with a radius, by coordinates, or cover a whole state or province in one run.
- Dispensary details — name, address, phone, chain, time zone, coordinates, pickup and delivery hours, and order options repeated on every product row. A dispensary-only mode saves just the store details without opening any menu.
- Brand, store name and review filters — keep only chosen brands or stores whose name contains a word, and add customer reviews (author, rating, text, effects) to reviewed products.
- Pagination support — whole menus of thousands of products are read page by page.
- Category and menu filters — keep only Flower, Pre-Rolls, Edibles and so on, and choose the recreational or medical menu.
- Cache, only new or changed products — repeat runs return only products with a new price, special or stock.
- Closed and test stores skipped — location searches keep real, open stores unless you ask for the rest.
- No browser required — plain data requests make runs fast and light.
🚀 How to scrape Dutchie menus in 5 steps
- Sign up for a free Apify account — includes $5 monthly credit.
- Open the actor page and click Try for free.
- Paste one or more Dutchie dispensary links in Dispensary URLs, or add Search dispensaries by location.
- Click Start and wait for the run to complete.
- Download results from the Output tab in JSON, CSV, or Excel format.
You can also run this actor via the Apify API or integrate it directly into your workflows using Zapier, Make, or n8n.
💰 Pricing for the Dutchie scraper
This actor uses pay-per-result billing: you pay for the rows saved. A product with three sizes makes three rows.
- New Apify accounts include $5 of free monthly credit.
- The cache skips products that did not change, so scheduled runs cost less over time.
- It uses plain data requests instead of a browser, so it costs significantly less to run than browser-based scrapers.
🖼️ Dutchie scraper input screenshot

The numbers match the input fields below:
- Dispensary URLs: Dutchie menu links to scrape.
- Max products per dispensary: how many product rows are saved for each store.
- Cache project name: reuse the same name on each run to get only new or changed products.
- Search dispensaries by location: find stores by city, zip code, coordinates or state.
- What to save: menu products, or only the dispensary details.
- Menu type: which menu's price is the shelf price, recreational or medical.
- Categories: keep only the chosen menu categories.
- Specials only: keep only products with a live sale or special.
🔧 Dutchie scraper input configuration
The form starts with the dispensary links, the product limit and the cache name. Everything else is in the collapsible optional settings and filters.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
Dispensary URLs (startUrls) | array | — | example menu | Dutchie dispensary menu links, embedded menu links and product page links. |
Max products per dispensary (maxItems) | integer | — | 5 | Product rows saved for each dispensary. |
Cache project name (cacheProjectName) | string | — | — | Same name on each run to get only new or changed products. |
Search dispensaries by location (searchLocations) | array | — | — | One search per line: Boston, MA, a zip or postal code, 42.36,-71.06, or a state or province code such as CO. |
Search radius (radiusMiles) | integer | — | 25 | Miles around a zip code or coordinates, up to 150. |
Max dispensaries per search (maxDispensaries) | integer | — | 5 | Stores kept per location search, nearest first. |
What to save (outputMode) | string | — | products | Menu products (one row per size) or dispensary details only. |
Max rows in total (maxTotalItems) | integer | — | — | Optional cap for the whole run. |
Menu type (menuType) | string | — | rec | Recreational or medical menu for the shelf price. |
Categories (categories) | array | — | — | Keep only these categories. |
Specials only (offersOnly) | boolean | — | off | Keep only products with a live special or sale. |
Include product descriptions (includeDescriptions) | boolean | — | off | Adds the full product description to every row. |
Include closed and test stores (includeClosedStores) | boolean | — | off | Keep stores that are not open and test or demo stores in location searches. |
Store name contains (storeNames) | array | — | — | Keep only stores whose name contains one of these words, for example a chain name. |
Brands (brands) | array | — | — | Keep only products of these brands. |
Include product reviews (includeReviews) | boolean | — | off | Adds customer reviews to products that have them. |
Max reviews per product (maxReviewsPerProduct) | integer | — | 5 | Newest reviews kept per product. |
Supported URL types:
- Dispensary menu:
https://dutchie.com/dispensary/pinnacle-cannabis-quincy - Embedded menu:
https://dutchie.com/embedded-menu/<store-name> - Product page:
https://dutchie.com/dispensary/<store-name>/product/<product>
Search locations: Boston, MA searches that city, 02169 or 42.36,-71.06 search the radius around the point, and CO covers a whole state with overlapping searches. A store found by several searches is saved once.
📦 Dutchie scraper output data
Every record has the same keys (null when there is no value): recordType, dispensaryId, dispensaryName, dispensarySlug, dispensaryUrl, dispensaryAddress, city, state, zipcode, country, dispensaryPhone, latitude, longitude, timezone, chain, storeStatus, offersPickup, offersDelivery, recreational, medical, pickupHours, deliveryHours, dispensaryEmail, dispensaryDescription, logoImage, bannerImage, menuCategories, distanceMiles, dispensaryCreatedAt, productId, productName, productUrl, brand, category, subcategory, strainType, size, sizeLabel, menuType, price, specialPrice, recPrice, medPrice, recSpecialPrice, medSpecialPrice, currency, onSpecial, specials, thc, cbd, thcValue, cbdValue, totalTerpenes, terpenes, cannabinoids, effects, quantityAvailable, inStock, imageUrl, images, description, medicalOnly, recreationalOnly, rating, reviewCount, reviews, productCreatedAt, productUpdatedAt, changeType, scrapedAt. Product rows have recordType: product, dispensary-only rows have recordType: dispensary and leave the product fields empty.
There are 2 views: Menu products shows the product, brand, category, size, price, special price, THC, CBD and stock, and Dispensaries shows the store details.
Output at a glance:
| Product | Brand | Size | Price | Special | THC | Stock |
|---|---|---|---|---|---|---|
| Jointz Sports Balm RSO CBD | Jointz | 0.01g | 50 | 848.34mg | 21 | |
| Rosin Capsules 100mg | Harbor House Collective | .1g | 20 | 100mg | 10 | |
| Trop Cherry x Cherry Whip 1g Live Hash Rosin | Brown Bag | 1g | 47.5 | 81.24mg | 1 | |
| Yellow Zushi | DRO | 1/4oz | 49.99 | 34.99 | 10 | |
| Vanilla Berry Pie | DRO | 1/2oz | 65.99 | 46.19 | 3 |
Sample output (raw JSON):
[{"recordType": "product","dispensaryId": "670ec32b882fe8cc1a14c248","dispensaryName": "Pinnacle Cannabis - Quincy","dispensarySlug": "pinnacle-cannabis-quincy","dispensaryUrl": "https://dutchie.com/dispensary/pinnacle-cannabis-quincy","dispensaryAddress": "15 Liberty Street, Quincy, MA 02169, USA","city": "Quincy","state": "MA","zipcode": "02169","country": "United States","dispensaryPhone": "(617) 481-5472","latitude": 42.2404373,"longitude": -71.0060973,"timezone": "America/New_York","chain": "pinnacle-cannabis","storeStatus": "open","offersPickup": true,"offersDelivery": false,"recreational": true,"medical": false,"pickupHours": {"Monday": "8:00 AM - 11:00 PM","Tuesday": "8:00 AM - 11:00 PM","Wednesday": "8:00 AM - 11:00 PM","Thursday": "8:00 AM - 11:00 PM","Friday": "8:00 AM - 11:00 PM","Saturday": "8:00 AM - 11:00 PM","Sunday": "8:00 AM - 11:00 PM"},"deliveryHours": null,"dispensaryEmail": null,"dispensaryDescription": null,"logoImage": null,"bannerImage": null,"menuCategories": null,"distanceMiles": null,"dispensaryCreatedAt": null,"productId": "6920de89f7e7fb59bb757cd9","productName": "Jointz Sports Balm RSO CBD","productUrl": "https://dutchie.com/dispensary/pinnacle-cannabis-quincy/product/jointz-sports-balm-rso-cbd","brand": "Jointz","category": "Topicals","subcategory": "balms","strainType": "2 to 1","size": "0.01g","sizeLabel": "0.01g","menuType": "rec","price": 50,"specialPrice": null,"recPrice": 50,"medPrice": 50,"recSpecialPrice": null,"medSpecialPrice": null,"currency": "USD","onSpecial": false,"specials": null,"thc": "848.34mg","cbd": "1530mg","thcValue": 848.34,"cbdValue": 1530,"totalTerpenes": null,"terpenes": null,"cannabinoids": [{"name": "CBD (Cannabidiol)","value": 25.5,"unit": "MILLIGRAMS_PER_GRAM"},{"name": "CBN (Cannabinol)","value": 3.14,"unit": "MILLIGRAMS_PER_GRAM"}],"effects": {"relaxed": 5},"quantityAvailable": 21,"inStock": true,"imageUrl": "https://s3-us-west-2.amazonaws.com/dutchie-images/010263bb19929ffa3b181609a220c6ed","images": ["https://s3-us-west-2.amazonaws.com/dutchie-images/010263bb19929ffa3b181609a220c6ed"],"description": "1:4 (RSO:CBD) Muscle Salve\n?\n\nJointz Muscle Salve has a strong aroma of menthol and other essential oils. It's a solid salve that begins to melt with body he...","medicalOnly": false,"recreationalOnly": false,"rating": null,"reviewCount": null,"productCreatedAt": "2025-11-21T21:50:01.657Z","productUpdatedAt": "2026-11-02T23:35:22.635Z","changeType": null,"scrapedAt": "2026-11-04T17:05:05.728Z"},{"recordType": "product","dispensaryId": "wPM2uAQJsEk2CZyTn","dispensaryName": "Good Chemistry (Colfax)","dispensarySlug": "good-chemistry-colfax","dispensaryUrl": "https://dutchie.com/dispensary/good-chemistry-colfax","dispensaryAddress": "330 E Colfax Ave, Denver, CO 80203, USA","city": "Denver","state": "CO","zipcode": "80203","country": "United States","dispensaryPhone": "(720) 524-4657","latitude": 39.7398235,"longitude": -104.982628,"timezone": "US/Mountain","chain": "good-chemistry","storeStatus": "open","offersPickup": true,"offersDelivery": false,"recreational": true,"medical": false,"pickupHours": {"Monday": "9:00 AM - 8:45 PM","Tuesday": "9:00 AM - 8:45 PM","Wednesday": "9:00 AM - 8:45 PM","Thursday": "9:00 AM - 8:45 PM","Friday": "9:00 AM - 8:45 PM","Saturday": "9:00 AM - 8:45 PM","Sunday": "11:00 AM - 8:30 PM"},"deliveryHours": {"Monday": "8:00 AM - 9:00 PM","Tuesday": "8:00 AM - 9:00 PM","Wednesday": "8:00 AM - 9:00 PM","Thursday": "8:00 AM - 9:00 PM","Friday": "8:00 AM - 9:00 PM","Saturday": "8:00 AM - 9:00 PM","Sunday": "10:00 AM - 9:00 PM"},"dispensaryEmail": null,"dispensaryDescription": null,"logoImage": null,"bannerImage": null,"menuCategories": null,"distanceMiles": null,"dispensaryCreatedAt": null,"productId": "6ae2646bcd98150023776cc3","productName": "GC Popcorn Biscotti","productUrl": "https://dutchie.com/dispensary/good-chemistry-colfax/product/gc-popcorn-biscotti","brand": "Good Chemistry Nurseries","category": "Flower","subcategory": "smalls-popcorn","strainType": "Indica","size": "1g","sizeLabel": "1.0g","menuType": "rec","price": 5.01,"specialPrice": 5.01,"recPrice": 5.01,"medPrice": 5.01,"recSpecialPrice": 5.01,"medSpecialPrice": 5.01,"currency": "USD","onSpecial": true,"specials": null,"thc": "21.17%","cbd": null,"thcValue": 21.17,"cbdValue": null,"totalTerpenes": null,"terpenes": null,"cannabinoids": null,"effects": {"Relaxed": 9,"Pain-Relief": 7,"Sleepy": 8,"Happy": 8,"Euphoric": 8},"quantityAvailable": 4,"inStock": true,"imageUrl": "https://s3-us-west-2.amazonaws.com/dutchie-images/flower-stock-12-v1.jpg","images": null,"description": null,"medicalOnly": false,"recreationalOnly": false,"rating": null,"reviewCount": null,"productCreatedAt": "2026-10-28T21:08:59.797Z","productUpdatedAt": "2026-11-03T18:37:15.962Z","changeType": null,"scrapedAt": "2026-11-04T17:07:59.753Z"}]
🔁 Scrape only new or changed Dutchie products with the cache
Set the same Cache project name on every scheduled run. Products already saved under that name with the same price, special and stock are skipped, not charged and not counted towards the maximums, so each run returns only products that are new (changeType: "new") or whose price, special or stock changed (changeType: "updated"). Different names keep separate caches. Combine it with Apify Schedules to track a store's menu every day.
🐍 How to scrape Dutchie with Python, JavaScript or the API
Run the actor programmatically with the official Apify clients. Replace <YOUR_API_TOKEN> with the token from your Apify Console.
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("confidential_gnat/dutchie-dispensary-menu-scraper").call(run_input={"startUrls": [{"url": "https://dutchie.com/dispensary/pinnacle-cannabis-quincy"}],"maxItems": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('confidential_gnat/dutchie-dispensary-menu-scraper').call({startUrls: [{ url: 'https://dutchie.com/dispensary/pinnacle-cannabis-quincy' }],maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL — start a run and wait for the dataset:
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~dutchie-dispensary-menu-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://dutchie.com/dispensary/pinnacle-cannabis-quincy"}], "maxItems": 50}'
💡 What you can use Dutchie menu data for
- Price monitoring and price comparison across dispensaries in a city or state
- Tracking specials, sales and mix-and-match deals over time
- Brand and assortment analysis: which brands, strains and sizes each store carries
- Market research on recreational versus medical pricing and potency
- Building a dispensary directory or lead list with addresses, phones, hours and coordinates
Cannabis brands, retailers, analysts, marketplaces and data teams typically use this data for pricing, distribution and competitor research.
⚠️ Limitations of the Dutchie scraper
- Dutchie stores only — it reads menus that are hosted on Dutchie. Stores listed only on other platforms are not covered.
- Location search needs a place — a state is covered with overlapping searches, a zip code or coordinates use a radius of up to 150 miles, and a state name alone as text (for example
Colorado) is not understood: use the code (CO). - Hidden products — products the store hides because of low stock thresholds do not show on its menu and are not returned.
- Reviews — ratings, review counts and reviews are filled only for products that customers have reviewed. Reviewers appear as first name and last initial.
- No store license numbers — Dutchie does not publish license numbers on its menus, so they are not returned.
❓ Dutchie scraper FAQ
Can I scrape Dutchie legally?
The actor only collects menu and store data that is already publicly visible on dutchie.com, with no login or private content. Scraping publicly available data is generally considered lawful (see hiQ Labs v. LinkedIn), but you are responsible for complying with Dutchie's Terms of Service and the laws that apply to you, including cannabis advertising and privacy rules.
What data does the Dutchie scraper return?
One row per product size with the store details, brand, category, strain type, prices for both menus, specials, THC and CBD, terpenes, cannabinoids, effects, stock and images. Switch on Include product descriptions for the full description, or choose Dispensary details only to save just the stores.
How many products can I scrape from one dispensary?
Max products per dispensary limits the rows saved for each store, and Max rows in total can cap the whole run. Menus are read 100 products per page with no depth limit, so a store with thousands of products can be scraped in full by raising the limit.
How do I find all dispensaries in a city, zip code or state?
Add the place to Search dispensaries by location (Boston, MA, 02169, 42.36,-71.06 or CO) and raise Max dispensaries per search. Use Dispensary details only first if you want to list the stores before reading their menus.
How do I scrape Dutchie with Python?
Use the Python example above: start the actor with ApifyClient and iterate over the dataset items to get every row.
Can I run this Dutchie scraper on a schedule?
Yes. Use Apify Schedules and set the same Cache project name on each run, so every run saves only products that are new or whose price, special or stock changed.
What output formats are supported?
JSON, CSV, Excel, XML and RSS, either from the Output tab or through the Apify API.
Why do some products have no THC or strain type?
Stores publish potency and strain type only for products that have them, so accessories and apparel, for example, leave those fields null.
🔗 Relevant actors for Dutchie and price data
| Scraper | Description |
|---|---|
| 🍷 Total Wine Scraper | Scrape Total Wine & More wine, liquor and beer prices, sizes, ratings and stock. |
| 🇺🇸 Yellow Pages USA Scraper - Emails & Leads | Scrape US businesses with emails: name, phone, address and website. |
| 🛒 Google Shopping Scraper - Prices, Deals & Product Data | Scrape Google Shopping product listings, prices and deals for any search. |
| 🛍️ eBay Listings Scraper | Scrape eBay search results and item pages: title, price, condition and seller. |
🔗 Other actors you may find useful
| Scraper | Description |
|---|---|
| 🧴 Incidecoder Scraper | Scrapes skincare product pages with full ingredient lists. |
| ✈️ Kiwi.com Flight Scraper | Scrapes flight prices and schedules from Kiwi.com. |
| 🔎 WHOIS Domain Lookup Scraper | Bulk WHOIS lookups from URLs, bare domains or whois.com links. |
| 📄 Google Patents Scraper | Scrapes patent data from Google Patents by keyword or URL. |
| 💼 Dice Jobs Scraper | Scrapes tech job listings from Dice by keyword or URL. |
💬 Support & contact
If you encounter any issues or have questions, please open an issue.
You can also find more of our actors on the Actor Flow page.