Chamber of Commerce Member Directory & Business Leads Scraper
Export every member of a Chamber of Commerce directory — business, phone, address, website, socials — and optionally the contact email crawled from each member's own site.
Verification
Output fields
Authoritative field set from the dataset schema.
| Field | Type |
|---|---|
business_name | string|null |
member_id | string|null |
chamber_name | string|null |
chamber_city | string|null |
county | string|null |
state | string|null |
categories | array|null |
description | string|null |
phone | string|null |
address | string|null |
city | string|null |
zip_code | string|null |
website | string|null |
logo_url | string|null |
facebook | string|null |
instagram | string|null |
linkedin | string|null |
youtube | string|null |
twitter | string|null |
contact_reps | array|null |
emails | array|null |
email_domain_matches_website | boolean|null |
source_url | string|null |
status | string|null |
Sample row
{
"business_name": "A2Z Media Group, LLC",
"chamber_name": "Concord Chamber of Commerce",
"phone": "(415) 404-6407",
"address": "1350 Arnold Dr., Suite 201",
"city": "Martinez",
"zip_code": "94553",
"website": "http://a2zmediagroup.com",
"categories": [
"Marketing/Advertising"
],
"facebook": "https://www.facebook.com/A2ZMediaGroup/",
"linkedin": "https://www.linkedin.com/company/a2z-media-group/",
"contact_reps": [
{
"name": "Zuleyka Jinks",
"title": "Owner/Partner"
}
],
"emails": [
{
"email": "info@a2zmediagroup.com",
"source_url": "http://a2zmediagroup.com/contact",
"type": "generic",
"confidence": "high"
}
],
"email_domain_matches_website": true,
"source_url": "https://business.concordchamber.com/list/member/a2z-media-group-llc-12179"
} Inputs
| Field | Type | Req | Default | Description |
|---|---|---|---|---|
listChambers | boolean | no | false | If true, skip scraping and return the list of chambers this actor can scrape (city, county, chamber name, directory URL). Free — not charged. Use it to see which cities are available, then run again (or loop) with a 'county' or 'cities'. Optionally narrow the list with 'state'/'county'. |
county | string | no | "Contra Costa" | Select every indexed chamber in this county, e.g. 'Contra Costa' ('Contra Costa County' works too). Combine with 'state' to disambiguate. Leave empty if using 'cities' or 'directoryUrls'. |
counties | array | no | ["Contra Costa"] | Select every indexed chamber across several counties in ONE run, e.g. 'Contra Costa' and 'Alameda'. Combined with 'County' if you fill both. Turn on Discovery Mode to see which counties are indexed. |
cities | array | no | [] | Select indexed chambers in these cities, e.g. ['Concord', 'Danville']. Case-insensitive. |
state | string | no | "CA" | Two-letter state code to scope 'county'/'cities' matching, e.g. 'CA'. Needed when a name is indexed in more than one state (Orange, Washington, Springfield...): without it those names are skipped and a free notice lists the states to choose from. |
categories | array | no | [] | Keep only members whose chamber category contains any of these terms (case-insensitive substring), e.g. ['insurance', 'marketing']. Empty = all members. |
enrichContacts | boolean | no | false | If true, crawl each member's own website for a contact email (adds the emails / enrichment fields). Off by default — the directory scrape is fast and cheap on its own, and this adds several page fetches per member. On a whole-county sweep (~1,200 members) enrichment gets a fixed slice of the run's time; anything past it comes back without an email rather than the run timing out. Narrow the run to enrich every member. |
maxResults | integer | no | — | Cap on member rows returned across the WHOLE run (all selected chambers combined) — a directory sweep can be large, so this is a spend control. Leave empty to return every member of every selected chamber. |
directoryUrls | array | no | [] | Escape hatch for a GrowthZone/ChamberMaster chamber not yet in the registry. Give the base directory URL, e.g. 'https://business.concordchamber.com'. |
proxyConfiguration | object | no | {"useApifyProxy":false} | Optional. Chamber directories are reachable directly; enable a proxy only if runs return no data because the IP is blocked. |
Pricing
Pay per result (member-row) — no charge for empty runs.
Example: 500 chamber members at $0.004/result ≈ $2.00.
FAQ
What does one run return?
Every member of the selected chamber(s) — business, phone, address, website, categories, social links, and listed reps. With enrichContacts on, each member's website is crawled for a contact email.
How do I pick which chambers to scrape?
Run with `listChambers: true` (free) to list the available cities/chambers, then run with a `county` (all chambers in it) or `cities`. Advanced: pass a directory URL directly via `directoryUrls`.
Where do the emails come from?
Chambers don't publish member emails, so the actor crawls each member's own website (homepage + contact/about/team pages) and extracts the contact address, flagging franchise/corporate ones.
How am I charged?
Pay-per-result: one charge per member row. Email enrichment is included in that price, so a member whose site has no email costs the same as one without enrichment. Empty runs, and the notice rows that explain a skipped county or a refused directory, are free.
Which directories are supported?
Chambers on the GrowthZone / ChamberMaster / MicroNet platform (both its current and its older page templates). As of 2026-11-02 the index holds 1,126 chambers in 736 counties across all 50 states — including Los Angeles, Cook, Harris, Maricopa, San Diego, Orange (CA), Miami-Dade, Dallas and King counties. Run `listChambers: true` (with a `state`) for the current list. A county or city with no indexed chamber returns a free notice row saying so; any other GrowthZone chamber works through `directoryUrls`.
Guides & use cases
Related actors