California Cannabis License Search Scraper avatar

California Cannabis License Search Scraper

Pricing

Pay per event

Go to Apify Store
California Cannabis License Search Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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:

  • dispensary
  • Los Angeles
  • C10-0000038-LIC
  • cultivation
  • delivery

Status filter

Use licenseStatus to narrow results by public license status.

Common values include:

  • Active
  • Expired
  • Surrendered
  • Suspended
  • Revoked

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 Angeles
  • premiseCounty: Riverside
  • premiseCity: Sacramento
  • premiseZipCode: 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:

  • id
  • licenseNumber
  • licenseStatus
  • licenseStatusDate
  • licenseTerm
  • licenseType
  • licenseDesignation
  • issueDate
  • expirationDate
  • licensingAuthorityId
  • licensingAuthority
  • businessLegalName
  • businessDbaName
  • businessOwnerName
  • businessStructure
  • activity
  • premiseStreetAddress
  • premiseCity
  • premiseState
  • premiseCounty
  • premiseZipCode
  • businessEmail
  • businessPhone
  • parcelNumber
  • premiseLatitude
  • premiseLongitude
  • dataRefreshedDate
  • source
  • sourceUrl
  • detailUrl
  • scrapedAt

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

  1. Open the actor input page.
  2. Enter a search query or leave it blank.
  3. Add optional filters such as status or county.
  4. Choose a maximum number of licenses.
  5. Start the run.
  6. 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.

TierPrice 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 ApifyClient
import os
client = 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().items
print(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.

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.