New York Cannabis Licenses Scraper: Dispensaries & Growers
Pricing
from $6.15 / 1,000 results
New York Cannabis Licenses Scraper: Dispensaries & Growers
Scrape New York State licensed cannabis businesses: adult-use retail dispensaries, cultivators, processors, distributors and microbusinesses. Extract entity name, trade name (DBA), license type and number, status, full address, county, website and licensed activities. Export to JSON, CSV or Excel.
Pricing
from $6.15 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
New York Cannabis Licenses Scraper: Dispensaries & Growers
Here is one real result, with every field the actor returns:
{"businessName": "FLUSHING CANNABIS CO","entityName": "10613 Northern LLC","dba": "FLUSHING CANNABIS CO","licenseType": "Adult-Use Retail Dispensary License","licenseTypeCode": "OCMRETL","licenseNumber": "OCM-RETL-25-000303","licenseStatus": "Active","licenseStatusCode": "LICACT","applicationNumber": "OCMRETL-2023-001318","operationalStatus": "Active","businessPurpose": "Adult-Use Retail Sales","tierType": null,"processorType": null,"address": "136-15 Roosevelt Ave, Flushing, NY 11354","addressLine1": "136-15 Roosevelt Ave","addressLine2": null,"city": "Flushing","state": "NY","zip": "11354","county": "Queens","region": "Queens","businessWebsite": "flushingcannabis.com","socialEquityCategory": "Minority-Owned Business, Women-Owned Business","seeCategory": "Minority-Owned Business, Women-Owned Business","primaryContactName": "Avie Li","hoursOfOperation": "Sun: 11:00 AM - 09:00 PM; Mon: 10:00 AM - 10:00 PM; Tues: 10:00 AM - 10:00 PM; Wed: 10:00 AM - 10:00 PM; Thurs: 10:00 AM - 10:00 PM; Fri: 10:00 AM - 11:00 PM; Sat: 10:00 AM - 11:00 PM","issuedDate": "2025-02-25","effectiveDate": "2025-02-25","expirationDate": "2027-02-25","retailDateOpenedToPublic": "2026-05-15","cultivationActivities": [],"processingActivities": [],"retailActivities": ["Sales with Delivery"],"locationId": "03F37735-6B0A-4A22-B8F0-7EED69A0EC04","observedAt": "2026-08-10T14:17:40.682Z","error": null}
The most complete New York cannabis license scraper available. It returns every field the New York State Office of Cannabis Management license dataset exposes for each business, including the legal entity, license type and status, address and county, primary contact, hours, social-equity category and activity lists, and gives you type, status and location filters plus free-text search to target exactly the businesses you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor queries New York State's public cannabis license dataset (published by the Office of Cannabis Management), applies the filters you pass as input, paginates through the matching businesses, and writes one normalized record per license to the run's dataset. You can search free text across the whole record or filter by license type, status, county and city.
Each record carries the business and legal entity names, the DBA, the license type/status with their codes, the application number, the full and split address with county and region, the business website, the primary contact, hours of operation, social-equity category, key dates and the cultivation/processing/retail activity lists. Missing source values are returned as null or empty arrays, never invented.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 licensed cannabis businesses across New York State.
{"maxLicenses": 10}
Add filters to narrow: set licenseType to Adult-Use Retail Dispensary License, licenseStatus to Active, or county to Kings. Use query for a free-text search across name, address, city and county. Every field is optional.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxLicenses | integer | no | 10 | Maximum license records to collect. Leave empty to collect every match. |
query | string | no | (empty) | Free-text search across business name, trade name (DBA), address, city or county, for example green, brooklyn, farm. |
licenseType | enum | no | (any) | Restrict to one license type (retail dispensary, cultivator, processor, distributor, microbusiness, registered organization, and more). |
licenseStatus | enum | no | (any) | Filter by status: Active, In-Process, Amendment Under Review, PCA Under Review, Inactive. |
county | string | no | (empty) | Match a New York county, for example Kings, Queens, New York, Erie, Monroe. |
city | string | no | (empty) | Match a city or town, for example Brooklyn, Buffalo, Albany. |
appToken | string | no | (empty) | Optional free Socrata app token to raise the rate limit for very large pulls. The dataset is keyless without it. |
enrichContacts | boolean | no | false | Paid add-on. For each business without an email, attempt to find a public business contact email and person. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the add-on tries to enrich. Free Apify accounts are capped at 3. |
Filters combine with logical AND.
Output reference
One dataset item per license. Types: string, array, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
businessName | string | Public business name. |
entityName | string | Legal entity name. |
dba | string | Trade name / doing-business-as, or null. |
licenseType | string | Full license type description. |
licenseTypeCode | string | License type code, for example OCMRETL. |
licenseNumber | string | License number (unique per license), for example OCM-RETL-25-000303. |
licenseStatus | string | License status, for example Active. |
licenseStatusCode | string | License status code, for example LICACT. |
applicationNumber | string | Application number. |
operationalStatus | string | Operational status, for example Active, Non-Operational. |
businessPurpose | string | Business purpose, for example Adult-Use Retail Sales. |
tierType | string | Cultivation/processing tier, or null. |
processorType | string | Processor type, or null. |
address | string | Full single-line address. |
addressLine1 / addressLine2 | string | Split street address lines. |
city / state / zip | string | City, state and ZIP. |
county | string | New York county. |
region | string | Region label. |
businessWebsite | string | Business website, or null. |
socialEquityCategory | string | Social-equity categories, or null. |
seeCategory | string | Social and economic equity category, or null. |
primaryContactName | string | Primary contact person name, or null. |
hoursOfOperation | string | Weekly hours of operation, or null. |
issuedDate | string | Date the license was issued (YYYY-MM-DD). |
effectiveDate | string | License effective date (YYYY-MM-DD). |
expirationDate | string | License expiration date (YYYY-MM-DD). |
retailDateOpenedToPublic | string | Date the retail location opened to the public, or null. |
cultivationActivities | string[] | Authorized cultivation activities. Empty array when none. |
processingActivities | string[] | Authorized processing activities. Empty array when none. |
retailActivities | string[] | Authorized retail activities, for example Sales with Delivery. |
locationId | string | Source location identifier. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
enrichedEmail | string | Add-on only. Public business contact email found, or null. |
enrichedContactName | string | Add-on only. Contact person name, or null. |
enrichedJobTitle | string | Add-on only. Contact person job title, or null. |
enrichedEmailStatus | string | Add-on only. guessed, not_found, or error. |
enrichedSource | string | Add-on only. Source of the found contact, or null. |
enrichedConfidence | string | Add-on only. Confidence of the found contact, or null. |
The enriched* fields are present only when the paid enrichContacts add-on is enabled.
Example output record
Real record from a live run (input {"maxLicenses": 10}). This one is a newly issued, non-operational dispensary with sparser detail:
{"businessName": "1027 6TH AVE 1 INC.","entityName": "1027 6TH AVE 1 INC.","dba": null,"licenseType": "Adult-Use Retail Dispensary License","licenseTypeCode": "OCMRETL","licenseNumber": "OCM-RETL-26-000515","licenseStatus": "Active","licenseStatusCode": "LICACT","applicationNumber": "OCMRETL-2023-001563","operationalStatus": "Non-Operational","businessPurpose": "Adult-Use Retail Sales","address": "1271 Broadway, Brooklyn, NY 11221","addressLine1": "1271 Broadway","addressLine2": null,"city": "Brooklyn","state": "NY","zip": "11221","county": "Kings","region": "Brooklyn","businessWebsite": null,"socialEquityCategory": null,"primaryContactName": "Oudey Matari","hoursOfOperation": null,"issuedDate": "2026-07-30","effectiveDate": "2026-07-30","expirationDate": "2028-07-30","retailDateOpenedToPublic": null,"cultivationActivities": [],"processingActivities": [],"retailActivities": ["Sales with Delivery"],"locationId": "E51F6C6F-662A-4804-9932-CF7304BF510E","observedAt": "2026-08-10T14:17:40.682Z","error": null}
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~ny-cannabis-licenses-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"licenseType":"Adult-Use Retail Dispensary License","licenseStatus":"Active","maxLicenses":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~ny-cannabis-licenses-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"county":"Kings","maxLicenses":100}'
Apify CLI:
apify call scrapers_lat/ny-cannabis-licenses-scraper \--input '{"query":"brooklyn"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 license record returned (
resultevent). See the pricing tab for the current per-result price. - Contact enrichment add-on. The optional
enrichContactsadd-on bills per attempt, plus an extra charge only when an email is found. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon 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
maxLicenses.
FAQ and troubleshooting
A run returned 0 records. Why?
The filter combination matched nothing. Loosen filters (remove county or licenseType) or clear query. Zero-result runs are not charged.
How do I get only dispensaries?
Set licenseType to Adult-Use Retail Dispensary License (or the conditional variant). Combine with licenseStatus set to Active for operating stores.
How do I search a neighborhood or name?
Use query for free text across the record, or set city and county for a precise location match.
Do I need the Socrata app token?
No. The dataset is keyless. A free appToken only raises the rate limit for very large pulls.
Why are some fields null?
Not every business fills every field (for example new licensees may lack a website or hours). Missing source values are returned as null, never invented.
Is this an official New York State tool? No. This actor is independent and has no affiliation with the New York State Office of Cannabis Management. It reads only data that is publicly available through the state's open data portal.
Related scrapers
- Cannabis Dispensary Scraper: US cannabis dispensary listings and menus.
- NY DOS Business Scraper: New York registered business entities.
- NY Professions Scraper: New York licensed professionals.
- NYC DOB Permits Scraper: New York City building permits.
- Colorado Business Entities Scraper: Colorado registered business entities.
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 the New York State Office of Cannabis Management. Accesses only publicly available data from the state's open data portal.
