California Cannabis License Search Scraper
Pricing
Pay per event
California Cannabis License Search Scraper
Export California Department of Cannabis Control license records with statuses, business names, contacts, addresses, dates, and coordinates.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Export public California Department of Cannabis Control (DCC) cannabis license records from the Cannabis Unified License Search.
This actor collects license numbers, statuses, business names, DBA names, owner names, addresses, counties, contact details, license dates, coordinates, and source metadata from the official California DCC public search API.
What does this actor do?
The California Cannabis License Search Scraper turns the public DCC license search into a structured dataset.
It is designed for recurring compliance and market-monitoring workflows where teams need a machine-readable export instead of manually searching the state website.
Typical results include active and inactive licenses, legal business names, trade names, license types, issue dates, expiration dates, county, address, phone, email, latitude, longitude, and data refresh timestamps.
Why use it?
California cannabis licensing data changes over time.
Operators open, close, surrender licenses, renew licenses, and update public contact or premise information.
A repeatable actor run helps you capture the same fields in the same format every time.
You can load the output into spreadsheets, CRMs, compliance systems, BI tools, or downstream enrichment pipelines.
Data source
The actor uses the public California DCC Cannabis Unified License Search.
Website: https://search.cannabis.ca.gov/
Public API base: https://as-dcc-pub-cann-w-p-002.azurewebsites.net
No account, login, CAPTCHA solving, or private token is required for the default search workflow.
Example use cases
- Monitor active cannabis retailers in a county.
- Build a lead list of licensed California cannabis businesses.
- Check license expiration dates before outreach.
- Compare license coverage by city or county.
- Feed compliance dashboards with official state license records.
- Enrich B2B vendor, insurance, lending, or real-estate datasets.
- Track surrendered, suspended, expired, or revoked licenses.
- Audit business names and DBA names against internal records.
Who is it for?
This actor is useful for cannabis compliance teams, wholesalers, distributors, lenders, insurers, attorneys, consultants, real-estate teams, site-selection analysts, and B2B data providers.
It can also help journalists, researchers, and public-policy analysts who need structured access to California cannabis licensing data.
Input overview
You can run the actor with a free-text search query, optional filters, and a maximum item limit.
Leave the query empty when you want to export all matching records.
Use filters when you need a narrower subset, such as active licenses in a specific county.
Search query
The searchQuery field is passed to the DCC search endpoint.
It can match business names, DBA names, owners, addresses, cities, license numbers, or other searchable text supported by the public site.
Example queries:
dispensaryLos AngelesC10-0000038-LICcultivationdelivery
Status filter
Use licenseStatus to narrow results by public license status.
Common values include:
ActiveExpiredSurrenderedSuspendedRevoked
The DCC API controls the exact values returned.
License type filter
Use licenseType to focus on a business category.
Examples include retailer, distributor, cultivator, manufacturer, testing laboratory, microbusiness, event organizer, or other DCC license classifications.
Because public API values may contain prefixes or spacing, use the wording visible in the DCC search interface when you need exact filtering.
Location filters
The actor supports county, city, and ZIP code filters.
Useful examples:
premiseCounty:Los AngelespremiseCounty:RiversidepremiseCity:SacramentopremiseZipCode:92530
Location filters are helpful for territory planning and local compliance checks.
Pagination controls
maxItems controls how many license records are saved.
pageSize controls how many records are requested per API page and is capped at 100.
startPage lets you resume a large export from a later API page.
The default input is intentionally modest so test runs finish quickly.
Detail endpoint option
The includeDetails option fetches /licenses/{id} for each license returned by search.
The default is false because the search response already includes the core fields most users need.
Turn this option on if you want the actor to verify detail endpoint data for every row.
For large exports, leaving it off is faster and cheaper.
Output fields
The dataset can include these fields:
idlicenseNumberlicenseStatuslicenseStatusDatelicenseTermlicenseTypelicenseDesignationissueDateexpirationDatelicensingAuthorityIdlicensingAuthoritybusinessLegalNamebusinessDbaNamebusinessOwnerNamebusinessStructureactivitypremiseStreetAddresspremiseCitypremiseStatepremiseCountypremiseZipCodebusinessEmailbusinessPhoneparcelNumberpremiseLatitudepremiseLongitudedataRefreshedDatesourcesourceUrldetailUrlscrapedAt
Example output item
{"id": 6371,"licenseNumber": "C10-0000038-LIC","licenseStatus": "Active","licenseType": "Commercial - Retailer","licenseDesignation": "Adult-Use and Medicinal","businessLegalName": "Lake Elsinore Community Investment Corp","businessDbaName": "Mr Nice Guy Marijuana Cannabis Dispensary Lake Elsinore","businessOwnerName": "Joseph Martin","premiseCity": "Lake Elsinore","premiseCounty": "Riverside","businessEmail": "example@example.com","businessPhone": "(949) 293-2370","sourceUrl": "https://search.cannabis.ca.gov/results"}
How to run
- Open the actor input page.
- Enter a search query or leave it blank.
- Add optional filters such as status or county.
- Choose a maximum number of licenses.
- Start the run.
- Download the dataset as JSON, CSV, Excel, XML, RSS, or HTML.
Example input: active Riverside dispensaries
{"searchQuery": "dispensary","licenseStatus": "Active","premiseCounty": "Riverside","maxItems": 100,"pageSize": 100,"includeDetails": false}
Example input: statewide export sample
{"searchQuery": "","maxItems": 500,"pageSize": 100,"includeDetails": false}
Example input: one known license
{"searchQuery": "C10-0000038-LIC","maxItems": 10,"includeDetails": true}
Pricing
This actor uses pay-per-event pricing.
A small start event of $0.005 is charged once per run.
A license-record event is charged for each dataset item saved.
| Tier | Price per license record |
|---|---|
| Free | $0.000025036 |
| Bronze | $0.00002177 |
| Silver | $0.000016981 |
| Gold | $0.000013062 |
| Platinum | $0.00001 |
| Diamond | $0.00001 |
Higher Apify plans receive volume discounts.
Performance notes
The actor uses the public HTTP API directly and does not start a browser.
This keeps memory use low and makes large exports faster than browser automation.
The default page size is 100, which the API accepts during validation.
Data freshness
The DCC API includes a dataRefreshedDate field on license records.
That timestamp comes from the source and is saved to the dataset when present.
The actor also adds scrapedAt, which records when the actor collected the row.
Data quality notes
Some fields may contain Data Not Available or null values.
That reflects the public source data.
The actor does not invent missing emails, phone numbers, or parcel numbers.
Downstream workflows should treat blank values as unavailable public data.
Limitations
The actor depends on the public DCC search API.
If California changes the API, field names, or filtering behavior, the actor may require an update.
The actor does not verify license compliance beyond returning public records.
It is not legal advice.
Troubleshooting
If you receive fewer rows than expected, broaden the query or remove filters.
If an exact filter returns nothing, try the same wording in the DCC website and copy the visible value.
For very large exports, increase maxItems and keep includeDetails disabled unless you specifically need detail endpoint checks.
Integration ideas
- Schedule the actor daily or weekly to monitor changes.
- Compare exports over time in a database.
- Trigger alerts for expiration dates or status changes.
- Join records to territory, sales, or lending pipelines.
- Use coordinates for mapping and site-selection analysis.
API usage
You can run this actor from the Apify API, Apify Client libraries, schedules, integrations, or webhooks.
Node.js API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/california-cannabis-license-search-scraper').call({searchQuery: 'dispensary',licenseStatus: 'Active',premiseCounty: 'Riverside',maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/california-cannabis-license-search-scraper').call(run_input={'searchQuery': 'dispensary','licenseStatus': 'Active','premiseCounty': 'Riverside','maxItems': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL API example
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~california-cannabis-license-search-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchQuery":"dispensary","licenseStatus":"Active","premiseCounty":"Riverside","maxItems":20}'
MCP
You can use this actor from MCP-compatible assistants through the Apify MCP server.
Example Claude CLI setup:
$claude mcp add apify -- npx -y @apify/actors-mcp-server --actors automation-lab/california-cannabis-license-search-scraper
Example MCP server JSON configuration:
{"mcpServers": {"apify": {"command": "npx","args": ["-y","@apify/actors-mcp-server","--actors","automation-lab/california-cannabis-license-search-scraper"],"env": {"APIFY_TOKEN": "YOUR_APIFY_TOKEN"}}}}
Example prompts:
- "Run the California cannabis license scraper for active Riverside County dispensaries and summarize the business names."
- "Export 100 statewide California cannabis license records and identify records with missing email addresses."
- "Look up license C10-0000038-LIC and tell me the public status, owner, city, and expiration date."
The structured dataset output is suitable for agent workflows that need to answer questions such as "which active retailers are in Riverside County?" or "which licenses expire soon?".
Legality and compliance
The data is public licensing information, but your use of it may be subject to internal policies, customer contracts, outreach rules, or regulatory requirements.
Review your intended use before contacting businesses or making compliance decisions.
This actor returns source data and does not provide legal advice.
FAQ
Does this actor require a California DCC account?
No. It uses the public license search API.
Can I export all California cannabis licenses?
Yes. Leave searchQuery empty and raise maxItems to the number of records you need.
Why are some emails or parcel numbers missing?
The actor preserves the public source values. Missing or Data Not Available fields mean the DCC API did not provide that data for the record.
Does the actor use a browser?
No. It uses the public HTTP API directly.
Related actors
This actor fits a cannabis compliance and licensing-data workflow alongside other state cannabis license scrapers, business directory scrapers, government registry scrapers, and lead-enrichment actors.
Use it as the California source in a broader state-by-state license monitoring pipeline.
Support
If the actor stops returning data, include your run ID, input, and a short description of the expected records when reporting the issue.
This helps reproduce the problem against the public DCC API quickly.
Changelog
Initial version exports California DCC cannabis license search records with pagination, filters, optional detail fetching, and structured dataset output.