Cannabis License Watch avatar

Cannabis License Watch

Pricing

from $2.50 / 1,000 licenses

Go to Apify Store
Cannabis License Watch

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

Soco Supply

Maintained by Community

Actor 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

StateSourceStatus
CACalifornia DCC public ExportAll registry (same feed as search.cannabis.ca.gov)Verified
NYNYS Open Data — Current OCM Licenses (jskf-tt3q)Verified
OROregon Open Data — OLCC Cannabis Business Licenses (q32u-cmam)Verified
CTConnecticut Open Data — Licensed cannabis retail locations (42yd-3x3d)Verified
WAWashington Open Data — WSLCB Cannabis Renewal licensees (brpd-b6zd)Verified
MAMassachusetts CCC open data — public license details (l_licenses_all_details_public.json)Verified
CO, MI, IL, NJ, MD, MOOfficial 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

FieldDescription
statesState codes to monitor (e.g. ["CA"])
licenseTypesOptional allow-list (exact match)
statusesOptional allow-list (e.g. ["Active"])
counties / citiesOptional geographic filters
changeTypesnew, status_change, expiring (when emitAll is false)
expiringWithinDaysWindow for expiring alerts (default 30)
maxResultsCap rows pushed per run (0 = unlimited); licenses over the cap stay pending until a later run emits them
emitAllIf true, push all matching licenses, not just deltas
emitExistingOnFirstRunDefault 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, status
  • businessLegalName, dba, county, city
  • issueDate, expirationDate
  • sourceUrl, 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

  1. Deploy this Actor to your Apify account (Store or private).
  2. Open Schedules → Create new schedule.
  3. Choose the Actor, paste your input JSON, set cadence (e.g. daily after regulators update).
  4. 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-watch
npm install
APIFY_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.