← Health board

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.

100%golden-diff pass
Run it on Apify → verified nightly

Verification

100%golden-diff success
44canary runs
0days since last canary run

Output fields

Authoritative field set from the dataset schema.

FieldType
business_namestring|null
member_idstring|null
chamber_namestring|null
chamber_citystring|null
countystring|null
statestring|null
categoriesarray|null
descriptionstring|null
phonestring|null
addressstring|null
citystring|null
zip_codestring|null
websitestring|null
logo_urlstring|null
facebookstring|null
instagramstring|null
linkedinstring|null
youtubestring|null
twitterstring|null
contact_repsarray|null
emailsarray|null
email_domain_matches_websiteboolean|null
source_urlstring|null
statusstring|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

FieldTypeReqDefaultDescription
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