# GrowthZone & ChamberMaster Scraper — Chamber Member Leads (`scrapersdelight/growthzone-directory-scraper`) Actor

Scrape any GrowthZone / ChamberMaster member directory into a lead list — company, website, full address, member type & categories — from chambers of commerce and trade associations. No login or API key. Monitor newly-joined members with Slack/email/webhook alerts. $4 per 1,000 members.

- **URL**: https://apify.com/scrapersdelight/growthzone-directory-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Automation, SEO tools
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 per record returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🏛️ GrowthZone Directory Scraper — Association & Chamber Member Lists

**Scrape the public member directory of any association or chamber of commerce that runs on GrowthZone / ChamberMaster — the platform behind thousands of trade-association and chamber directories. Pull each member's company name, website, full address, member type, and business categories into one clean dataset. Then run it on a schedule to monitor newly-joined members and get a Slack / email / webhook ping when a new business appears.**

One actor, *thousands* of directories — just point it at a GrowthZone directory URL (or pick a preset). No login, no browser automation; every field comes from the site's server-rendered, alphabetically-indexed listing pages.

***

### What does it do?

GrowthZone (and its chamber-focused product ChamberMaster) powers the online "member directory" on a huge number of `*.growthzoneapp.com` sites. Those directories are indexed A–Z at `/FindStartsWith?term=A…Z`, and this actor sweeps that index and returns clean, structured **business listings** you can export to **JSON, CSV, Excel, or push to your app via API**.

- 🏢 **Company name + member type** (e.g. "General Contractor", "Restaurant", "Insurance").
- 🌐 **Website** — the member's own site (great for enrichment/outreach research).
- 📍 **Full address** — street, city, state, ZIP (parsed from the listing's schema.org microdata).
- 🏷️ **Business categories** — every category/CSI code the member is listed under.
- 🔗 **Listing URL** — the member's detail page on the directory.
- 🔔 **New-member monitor** — schedule it and get alerts when a new business joins.

> **Scope:** this actor collects **public business listings** (company, website, address, categories). It does **not** scrape the per-member contact person or email — those are loaded by JavaScript on the detail page and are intentionally left out.

***

### What data does it extract?

For every member:

- 🆔 `member_id`, 🏢 `name`, 🏷️ `membership_type`
- 🌐 `website`
- 📍 `street`, `city`, `state`, `zip`, plus a combined `address`
- 🗂️ `categories[]`
- 🔗 `detail_url`, 🌐 `directory_host`
- ✨ `is_new` (monitor mode), 🕒 `scraped_at`

***

### Who is it for?

- 📇 **Sales & GTM teams** building a clean, current list of contractors / businesses in a vertical or region.
- 🧭 **Market researchers** mapping who belongs to which association or chamber.
- 🤝 **B2B service providers** (insurance, software, supplies) targeting an industry's membership.
- 📊 **Analysts** tracking how a directory's membership changes over time.

***

### Two ways to use it

1. **Bulk scrape** — point it at a directory URL (or a preset), sweep A–Z, and pull the whole membership into one dataset.
2. **New-member monitor** *(the recurring play)* — set `monitorMode: true`, attach an **Apify Schedule**, and the actor outputs/alerts **only newly-listed members** — catch new businesses the day they join.

***

### How to use it (step by step)

1. Click **Try for free**.
2. **Pick a Preset**, or paste a **Directory URL** — open any chamber/association's online member directory and copy the part before `/FindStartsWith` (e.g. `https://YOURCHAMBER.growthzoneapp.com/member-directory`).
3. *(Optional)* set **Category contains** (e.g. `concrete`) or **Letters** to sample.
4. Click **Start**, then open the **Dataset** tab to view/export.
5. *(Optional)* set **monitorMode** + a **Schedule** + an alert channel to get pinged on new members.

#### Quick start (preset)

```json
{ "preset": "abc-georgia" }
```

#### Quick start (any directory)

```json
{ "directoryUrl": "https://YOURCHAMBER.growthzoneapp.com/member-directory", "categoryContains": "restaurant" }
```

#### New-member monitor example

```json
{
  "preset": "tempe-chamber",
  "monitorMode": true,
  "alertOnNewMember": true,
  "slackWebhookUrl": "https://hooks.slack.com/services/…"
}
```

***

### How do I find a directory URL?

On a chamber/association website, open **Member Directory** (or "Find a Member" / "Find a Contractor"). If the address bar shows a `*.growthzoneapp.com` host, copy everything up to (but not including) `/FindStartsWith` — that's your `directoryUrl`. Examples of the path segment: `/member-directory`, `/memberdirectory`, `/directory`.

***

### Input

| Field | What it does |
|-------|--------------|
| `directoryUrl` | base URL of any GrowthZone directory (before `/FindStartsWith`) |
| `preset` | pick a verified directory instead of pasting a URL |
| `letters` | which A–Z index pages to crawl (default: full sweep) |
| `categoryContains` | client-side filter by business category text |
| `maxRecords` | hard cap per run (0 = unlimited) |
| `sortBy` | `default` · `name` · `city` |
| `monitorMode`, `alertOnNewMember` | recurring new-member watcher + alerts |
| `webhookUrl`, `slackWebhookUrl`, `emailRecipients` | alert channels |
| `proxyConfiguration` | proxy settings |

***

### Output

Each member is one dataset record (fields above). Export to **JSON, CSV, Excel, HTML, or RSS**, or fetch via the **Apify API**.

***

### How much does it cost?

Pay-per-event — you pay for what you pull, no subscription. Suggested rates:

| Event | What it covers | Suggested price |
|-------|----------------|-----------------|
| `lot-scraped` | each member returned | ~$0.003 / member |
| `monitor-run-completed` | each scheduled watch run | ~$0.05 / run |
| `new-lot-detected` | each newly-listed member | ~$0.02 / member |
| `alert-delivered` | each Slack/email/webhook push | ~$0.005 / alert |

*(Final per-event prices are set on the actor's pricing page.)*

***

### Is it legal to scrape these directories?

This actor reads **public business listings** — company name, website, business address, and categories that organizations publish specifically so the public can find them. It does **not** collect personal contact people or emails. Scraping publicly available business data is generally legal, but you are responsible for your use: **review the directory's Terms of Service before commercial use, and comply with applicable marketing/anti-spam laws (e.g. CAN-SPAM, CASL, GDPR) when contacting any business.**

***

### FAQ

**What is GrowthZone / ChamberMaster?**
GrowthZone is association-management software; ChamberMaster is its chamber-of-commerce edition. Both power public member directories on `*.growthzoneapp.com`.

**Will it work on my chamber's directory?**
If the directory is hosted on `growthzoneapp.com` and indexed at `/FindStartsWith`, yes — paste its `directoryUrl`. The parser uses the platform's standard markup, so it's portable across directories.

**Does it get phone numbers and emails?**
No. The actor returns public business listings (name, website, address, categories). Per-member contact people/emails are JS-rendered on detail pages and are intentionally excluded.

**Can I monitor new members?**
Yes. Turn on `monitorMode`, attach an Apify **Schedule**, and add a Slack/webhook/email channel — each run alerts only members new since the last run.

***

### Feedback

Want a preset added for your chamber/association, or per-member detail enrichment? Open an issue on the actor.

# Actor input Schema

## `directoryUrl` (type: `string`):

Base URL of any GrowthZone member directory, e.g. https://YOURCHAMBER.growthzoneapp.com/member-directory (everything before /FindStartsWith). Find it by opening a chamber/association's online member directory. Leave empty if you pick a Preset.

## `preset` (type: `string`):

Pick a verified directory instead of pasting a URL. Overrides Directory URL when set.

## `letters` (type: `array`):

Which alphabetical index pages to pull (the directory is indexed A-Z). Leave empty for the full A-Z sweep. Use e.g. \['A','B','C'] to sample.

## `categoryContains` (type: `string`):

Optional client-side filter: keep only members with a business category containing this text (e.g. 'concrete', 'restaurant', 'insurance').

## `maxRecords` (type: `integer`):

Hard cap on members scraped this run (cost/safety guard). 0 = unlimited (full directory).

## `sortBy` (type: `string`):

Client-side ordering of the output.

## `monitorMode` (type: `boolean`):

Recurring watcher: diff against the prior run's seen members (per directory) and output/alert ONLY newly-listed members. Pair with an Apify Schedule to catch new businesses as they join.

## `alertOnNewMember` (type: `boolean`):

In monitor mode, deliver an alert for each newly-listed member via the channels below.

## `webhookUrl` (type: `string`):

POST endpoint for new-member alert payloads (Make / Zapier / n8n / custom).

## `slackWebhookUrl` (type: `string`):

Slack incoming-webhook URL for formatted new-member cards.

## `emailRecipients` (type: `array`):

Email addresses for the new-member digest (sent via apify/send-mail).

## `proxyConfiguration` (type: `object`):

Proxy settings. Datacenter rotation is usually enough; switch to residential if you hit blocks.

## `requestConcurrency` (type: `integer`):

Reserved for future per-member detail fetching; the A-Z index sweep runs sequentially to respect the site.

## `diagnose` (type: `boolean`):

Dev only. Dumps the raw FindStartsWith?term=A HTML to the key-value store and logs the parsed first cards, then exits.

## Actor input object example

```json
{
  "preset": "tempe-chamber",
  "maxRecords": 0,
  "sortBy": "default",
  "monitorMode": false,
  "alertOnNewMember": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "requestConcurrency": 4,
  "diagnose": false
}
```

# Actor output Schema

## `members` (type: `string`):

The dataset of scraped directory members (one item per member).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "preset": "tempe-chamber"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/growthzone-directory-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "preset": "tempe-chamber" }

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/growthzone-directory-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "preset": "tempe-chamber"
}' |
apify call scrapersdelight/growthzone-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapersdelight/growthzone-directory-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Ul8beKWI4Z53eQ11y/builds/S4WRRaraWclTBzpvu/openapi.json
