Berkeley CA Business Licenses Scraper - Local B2B Leads
Pricing
from $2.10 / 1,000 business licenses
Berkeley CA Business Licenses Scraper - Local B2B Leads
Scrape active City of Berkeley, CA business licenses via the official open-data API: DBA, description, license type, NAICS, employees, ownership type, business and mailing address. Filter by name, NAICS, license type and ZIP for Bay Area B2B and rental-property leads. Export CSV, Excel, JSON.
Pricing
from $2.10 / 1,000 business licenses
Rating
0.0
(0)
Developer
Groundplane Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Features
Share
The Berkeley business licenses scraper gives you one row per active Berkeley business license for Berkeley, California, straight from the City of Berkeley Finance Department via the official open-data API. No login or coding needed: run it in your browser, on a schedule, or through the Apify API, and export results as JSON, CSV or Excel.
Get every active City of Berkeley, California business license as a clean lead list. The data comes from the City of Berkeley Finance Department through the official open-data API (data.cityofberkeley.info dataset rwnf-bu3w). The city refreshes the dataset regularly. The source publishes no license-opened date, so there is no per-record freshness date to report; the run status states the live source total on every run.
What you get
Each row is one active business license and parcel pair. Most licenses have one row; 91 licenses tied to several parcels (different apn) add 94 extra rows (13,906 rows, 13,812 distinct licenses at the 2026-11-05 census). Turn on dedupeLicenses for one row per license (the run status then states how many parcel rows were dropped). Rows include DBA and business name, business description, city license type, NAICS code and description, reported employee count, ownership type, business location, mailing address and parcel number. Sorted by license ID, highest (newest) first with a stable :id tiebreak.
Sample output (real run)
{"licenseId": "BL-054225","dba": "FEELING BETTER: CERTIFIED MASS","businessName": "FEELING BETTER: CERTIFIED MASS","description": "MASSAGE THERAPY","licenseType": "Massage","naicsCode": "812199","naicsDescription": "Other Personal Care Services","taxCode": "BM","employees": 1,"ownershipType": "Sole Ownership","businessAddress": "1611 SAN PABLO AVE","businessCity": "BERKELEY","businessState": "CA","businessZip": "94702","mailingAddress": "461 METRO WALK WAY","mailingCity": "RICHMOND","mailingState": "CA","mailingZip": "94801","contactType": "Business Owner","apn": "059 228702901","source": "City of Berkeley Finance Department via data.cityofberkeley.info"}
Use cases
- Property services: 3,439 rental-property licenses (
subtypeContains: ["Rental of Real Property"]) for property management, insurance, maintenance and landscaping leads. - Contractor and trade lists: 3,499 construction licenses.
- B2B sales: professional services, retail and restaurants by NAICS (
naicsContains: ["7225"]).
How to scrape Berkeley business licenses
- Click Try for free (or Start) on this page. A free Apify account is enough.
- Leave the prefilled input to get a quick sample, or set the filters described below.
- Set maxItems to cap how many rows (and how much) a run returns.
- Click Start and wait a few seconds to a minute.
- Download the results as JSON, CSV or Excel, or connect them to Google Sheets, Zapier, Make or a webhook.
Input
| Field | Description |
|---|---|
| nameContains | Matches DBA or business name |
| naicsContains | NAICS code prefix or text |
| subtypeContains | City license type, e.g. Rental, Contractor, Retail |
| zipCodes | Berkeley business ZIPs (94702–94710, 94720) |
| dedupeLicenses | One row per license ID (drops 94 extra parcel rows) |
| maxItems | Default 200 |
Output fields
| Field | What it is |
|---|---|
| licenseId | City license record ID (BL-xxxxxx) |
| dba / businessName | Doing-business-as and business name as published |
| description | Business description as published (null on the few records published without one) |
| licenseType | City license sub-type |
| naicsCode / naicsDescription | Split from the one published NAICS text field; code is null when the published value does not carry a numeric code |
| taxCode | City tax code |
| employees | Employee count as reported; null when the city publishes no whole number (one live record reads 69.6) |
| ownershipType | Ownership type (LLC, Corporation, Sole Ownership...); null when not published |
| businessAddress / businessCity / businessState / businessZip | Business location as published (ZIP truncated to 5 digits) |
| mailingAddress / mailingCity / mailingState / mailingZip | Mailing address as published |
| contactType | Contact type as published |
| apn | Assessor parcel number |
| source | Always "City of Berkeley Finance Department via data.cityofberkeley.info" |
Canary input (small labeled check run): {"maxItems": 5} returns the 5 highest license IDs and ends Complete.
Run status
Every run ends with a status you can trust:
- Complete: every matched license was delivered. If maxItems stopped delivery early, the status says so and gives the full matched total (for example, "Complete: 200 of 13,906 matched license(s) delivered, capped at maxItems 200"). A run whose filters match nothing ends "Complete: 0 license(s) matched your filters" and states how many rows the source holds.
- PARTIAL: something material is disclosed in the status. Source-caused reasons (the status then ends with the Issues-tab line): invalid rows skipped; employee counts that were not whole numbers shipped as null; NAICS values in an unexpected format shipped with the code as null; a source column that carried no value on any scanned row. The one user-caused PARTIAL reason is the max charge limit: the status says the limit was reached and how to raise it, with no Issues-tab line.
- Failed with a clear message: the source returned no records at all, the source response is missing an expected column, over 20% of matched rows on a page were invalid, or an input was not usable (for example, a maxItems under 1).
Troubleshooting
- Zero matches: widen or clear the filters. The status tells you the source is healthy and how many rows it holds, so a zero is a filter result, not a broken run.
- Caps: maxItems caps rows (stated in the status with the matched total). The max charge limit stops a run PARTIAL; raise maxTotalChargeUsd to get more rows.
- Freshness: the source has no license-opened date, so "newest" means highest license ID. Each run reads the source live.
- Anything else: open an issue on this actor's Issues tab and we'll fix it fast.
Pricing (pay per event)
$3 per 1,000 rows ($0.003 each) plus Apify's minimal $0.00005 start fee. Example: 200 leads = 200 × $0.003 + $0.00005 ≈ $0.60. The full list (13,906 rows at the 2026-11-05 census) costs about $41.72.
Data caveats
Data is provided as published by the City of Berkeley. The source has no license-opened date, so "newest" means highest license ID. Employee counts are self-reported. Mailing addresses are where the city sends notices and may be outside Berkeley. Some contractor licenses use placeholder values such as address 0 VARIOUS or APN ZZZZZZZZZZZZZ; these are passed through unchanged. About 48% of rows have ZIP 94704 (6,727 of 13,906 at the 2026-11-05 census). 4,846 rows have the placeholder business address VARIOUS (mostly Construction or Contractor licenses), as checked in the source data on 2026-11-05, so a 94704 filter is not a reliable location filter. Name matching ignores apostrophes on both sides (Peet's matches PEETS). The source contains no phone numbers or emails, and none are added. naicsCode / naicsDescription are split from one published text field.
License and disclaimer
Source: City of Berkeley Open Data. No open-data license published; public records. This actor uses only the official public open-data API and is not affiliated with or endorsed by the City of Berkeley.
Changelog
- 0.2 (audit candidate, 2026-11-05; fix rounds 1 and 2 the same day): no output change on healthy data. Adds a payload core-column sentinel and per-row validation with skip counting, the Complete:/PARTIAL: run status contract with matched and source totals, employee-count and NAICS value-format checks with counts stated, hollow-column disclosure, dedupe drop counts in the status, and the fleet retry standard. Categories set to BUSINESS only.
- 0.1 (2026-10-12): first release.
FAQ
How much does it cost to scrape Berkeley business licenses?
You pay $0.003 per result ($3 per 1,000) plus a $0.00005 start fee, and nothing else. That is the free-plan price: on paid Apify plans you pay less per result (Bronze 10%, Silver 20%, Gold and above 30% off). Apify's free plan includes $5 of monthly credit, which covers about 1,600 results. See Pricing above for a worked example.
Is it legal to scrape Berkeley business licenses?
This Actor reads public records from the City of Berkeley Finance Department via the official open-data API, using only public endpoints (no login, no CAPTCHA bypass, no private accounts). See the source/license section above for the dataset's terms. You are responsible for how you use the data; this is not legal advice.
How fresh is the data?
Each run reads the source live, so you get whatever the agency has published at that moment. How often the agency updates, and any known lag, is described in the data caveats/notes section above.
Can I use it via API, on a schedule, or with Google Sheets?
Yes. Every Apify Actor has a REST API and client libraries for Python and JavaScript. You can schedule daily or weekly runs, and send results to Google Sheets, Slack, Zapier, Make, n8n, webhooks, or an AI agent via the Apify MCP server.
I need another city, county or field. Can you add it?
Open an issue on the Issues tab with the city or data source you need. We build new public-records scrapers regularly.
More public-records scrapers by Groundplanes
Same clean output, pay-per-result pricing and official public data sources:
Restaurant & food inspections
- Maricopa County (Phoenix) Restaurant Inspections Scraper
- Las Vegas Restaurant Inspections & Grades Scraper (SNHD)
- Pittsburgh Restaurant Inspections Scraper (Allegheny County)
- Delaware Restaurant Inspections Scraper - Statewide Violations
- Boulder CO Restaurant Inspections Scraper - 2013–2026 Snapshot
- Montgomery County MD Restaurant & Food Inspections Scraper
- NY State Restaurant Inspections Scraper - NYSDOH, Non-NYC
- Boston Restaurant Inspections Scraper - Health Violations
- Santa Clara County Restaurant Inspections Scraper - San Jose
Code violations & distressed property leads
- Pittsburgh Code Violations Scraper - Distressed Property Leads
- Orlando FL Code Enforcement Scraper - Code Violation Leads
- New Orleans Code Violations Scraper - Code Enforcement Leads