Cannabis License Watch
Pricing
from $2.50 / 1,000 licenses
Cannabis License Watch
Scheduled monitor of state cannabis business licenses from official regulator open data. Returns new licenses, status changes, and upcoming expirations since your last run.
Pricing
from $2.50 / 1,000 licenses
Rating
0.0
(0)
Developer
Soco Supply
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Monitor state cannabis business license registries from official regulator open data. Each scheduled run tells you what changed since the last run: new licenses, status changes, and licenses expiring soon—so vendors (packaging, compliance software, insurance, equipment, labs) can reach licensed businesses at the right time.
Supported states
| State | Source | Status |
|---|---|---|
| CA | California DCC public ExportAll registry (same feed as search.cannabis.ca.gov) | Verified |
| NY | NYS Open Data — Current OCM Licenses (jskf-tt3q) | Verified |
| OR | Oregon Open Data — OLCC Cannabis Business Licenses (q32u-cmam) | Verified |
| CT | Connecticut Open Data — Licensed cannabis retail locations (42yd-3x3d) | Verified |
| WA | Washington Open Data — WSLCB Cannabis Renewal licensees (brpd-b6zd) | Verified |
| MA | Massachusetts CCC open data — public license details (l_licenses_all_details_public.json) | Verified |
| CO, MI, IL, NJ, MD, MO | Official regulator portals (see REPORT.md) | Researched; no stable public bulk feed verified yet in this Actor |
We only ingest regulator-published open data. We do not include owner names, personal emails, personal phone numbers, or street addresses in output.
Input
| Field | Description |
|---|---|
states | State codes to monitor (e.g. ["CA"]) |
licenseTypes | Optional allow-list (exact match) |
statuses | Optional allow-list (e.g. ["Active"]) |
counties / cities | Optional geographic filters |
changeTypes | new, status_change, expiring (when emitAll is false) |
expiringWithinDays | Window for expiring alerts (default 30) |
maxResults | Cap rows pushed per run (0 = unlimited); licenses over the cap stay pending until a later run emits them |
emitAll | If true, push all matching licenses, not just deltas |
emitExistingOnFirstRun | Default false: first run saves a baseline snapshot and emits nothing (no pay-per-event charge for ~20k existing licenses). Set true to emit existing licenses as new on the first run |
Example:
{"states": ["CA"],"statuses": ["Active"],"changeTypes": ["new", "status_change", "expiring"],"expiringWithinDays": 30,"maxResults": 20,"emitAll": false}
Output
Each dataset row:
state,licenseNumber,licenseType,statusbusinessLegalName,dba,county,cityissueDate,expirationDatesourceUrl,changeType,previousStatus(when status changed)
Example (from a local test run; values reflect the registry at run time):
{"state": "CA","licenseNumber": "C10-0000123-LIC","licenseType": "Commercial - Retailer","status": "Active","businessLegalName": "Example Farms LLC","dba": "Example Retail","county": "Los Angeles","city": "Los Angeles","issueDate": "2020-03-15","expirationDate": "2026-03-14","sourceUrl": "https://fa-dcc-pub-vip-cann-ww-p-001.azurewebsites.net/api/ExportAll?searchQuery=","changeType": "new","previousStatus": null}
Pricing
$2.50 per 1,000 licenses returned, plus $0.003 per run. Platform usage is included. The first run saves a baseline and returns nothing (unless you turn on emitting existing licenses), so a daily California run with a few dozen changes typically costs cents.
Sample run vs. monitoring
The example input in Console returns up to 10 current matching records so you can see the output right away ("Emit all matches" on, max results 10). For a scheduled monitor, turn "Emit all matches" off and clear the max-results limit: each run then returns only records that are new or changed since the previous run, so you pay only for what's new.
Schedule on Apify
- Deploy this Actor to your Apify account (Store or private).
- Open Schedules → Create new schedule.
- Choose the Actor, paste your input JSON, set cadence (e.g. daily after regulators update).
- Send results to webhook, dataset, or your CRM.
State between runs is kept in the Actor key-value store cannabis-license-watch-state.
Source attribution
- California: Data from the California Department of Cannabis Control public license export API. Not affiliated with or endorsed by the State of California. Verify critical compliance decisions against official DCC records.
Local run
cd cannabis-license-watchnpm installAPIFY_LOCAL_STORAGE_DIR=./storage apify run -p --input-file=INPUT.json# or:APIFY_LOCAL_STORAGE_DIR=./storage node src/main.js
Requires Node.js 20+. First run with emitAll: false emits new/changed/expiring rows; a second run with the same input should emit zero delta rows if the registry unchanged.