# GrowthZone Chamber Directory Scraper (`automation-lab/growthzone-chamber-directory-scraper`) Actor

Extract public GrowthZone and ChamberMaster chamber member directories into clean B2B lead lists with websites, phones, categories, and addresses.

- **URL**: https://apify.com/automation-lab/growthzone-chamber-directory-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Lead generation
- **Stats:** 3 total users, 2 monthly users, 96.8% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Chamber Directory Scraper

Extract public member records from GrowthZone and ChamberMaster chamber directories. Turn chamber search pages, category pages, and new-member pages into clean B2B lead datasets with company names, categories, phones, websites, addresses, profile URLs, and membership signals.

### What does GrowthZone Chamber Directory Scraper do?

GrowthZone Chamber Directory Scraper is an Apify Actor for public chamber of commerce member directories powered by GrowthZone / ChamberMaster.

It helps you collect structured member records from pages like:

- Chamber directory search results
- Keyword result pages
- New member listings
- Category pages
- Public member profile pages

The actor is built HTTP-first, so it does not open a browser for normal pages. That keeps runs faster and cheaper than browser automation.

### Who is it for?

This actor is useful for teams that need repeatable chamber member data:

- 🧲 **B2B sales teams** building local prospect lists
- 🏢 **Local agencies** finding advertisers, sponsors, partners, or SMB clients
- 🤝 **Chambers and associations** monitoring member directories and new members
- 📊 **Data providers** enriching company databases with chamber membership signals
- 🗺️ **Market researchers** mapping business categories in a local region
- 🔔 **Growth teams** watching newly joined member lists for timely outreach

### Why use this actor?

Manual chamber directory research is slow. A single directory can contain hundreds of member cards, and every chamber may use a slightly different host or URL structure.

This actor gives you:

- Clean records instead of copied web text
- Profile URLs for verification
- Website and phone fields where available
- Category and chamber-host provenance
- Optional detail-page enrichment
- Configurable limits for small tests or larger exports

### Supported websites

The actor targets public GrowthZone / ChamberMaster directory pages, commonly served from hosts like `web.examplechamber.org`.

Examples of supported URL patterns include:

- `/search`
- `/advancedsearch`
- `/directory/results.aspx?keyword=business`
- `/directory/results.aspx?NewMemberSearch=true&adkeyword=NewMember`
- `/Category-Name/Member-Name-12345`

### Data you can extract

Each dataset item represents one chamber member or business listing.

| Field | Description |
| --- | --- |
| `memberName` | Business or organization name |
| `profileUrl` | GrowthZone / ChamberMaster member profile URL |
| `sourceUrl` | Results page where the record was found |
| `chamberHost` | Directory host, useful for multi-chamber batches |
| `category` | Business category inferred from profile path or detail page |
| `categoryUrl` | Public category URL |
| `website` | Member website when shown |
| `phone` | Phone number when shown |
| `streetAddress` | Street address when available |
| `city` | City |
| `region` | State or region |
| `postalCode` | Postal or ZIP code |
| `fullAddress` | Full address block text |
| `description` | Listing summary or detail text |
| `memberSince` | Membership year when the chamber displays it |
| `isNewMember` | Whether the record appears as a new member |
| `scrapedAt` | ISO timestamp for the extraction |

### How much does it cost to scrape GrowthZone chamber members?

The actor uses pay-per-event pricing:

- Start event: `$0.005` per run
- Item event: tiered per saved member record

Current item pricing starts at the BRONZE tier shown in the actor pricing panel. Larger usage tiers receive lower per-record prices.

### Input overview

The main input is `startUrls`. Add one or more public chamber directory URLs.

```json
{
  "startUrls": [
    { "url": "https://web.grandrapids.org/directory/results.aspx?keyword=business" }
  ],
  "maxItems": 100,
  "includeDetails": false,
  "requestDelayMs": 0
}
```

### Input fields

#### `startUrls`

Public GrowthZone / ChamberMaster URLs to scrape. Use results URLs for fastest exports.

#### `maxItems`

Maximum number of member records to save across all start URLs.

#### `includeDetails`

When enabled, the actor opens each member profile page to enrich category, address, website, and description fields.

#### `requestDelayMs`

Optional delay between profile-page requests. This applies only when `includeDetails` is enabled.

### Recommended start URL patterns

For broad lead lists, use keyword result URLs:

```text
https://web.grandrapids.org/directory/results.aspx?keyword=business
```

For newly joined companies, use new-member result URLs:

```text
https://web.grandrapids.org/directory/results.aspx?NewMemberSearch=true&adkeyword=NewMember
```

For discovery from a directory homepage, use:

```text
https://web.grandrapids.org/search
```

### Output example

```json
{
  "memberName": "Business System Solutions - Indiana",
  "profileUrl": "https://web.grandrapids.org/Computers-Technology/Business-System-Solutions-Indiana-8576",
  "sourceUrl": "https://web.grandrapids.org/directory/results.aspx?keyword=business",
  "chamberHost": "web.grandrapids.org",
  "category": "Computers Technology",
  "website": "https://bssconsulting.com/",
  "phone": "(765) 742-3440",
  "city": "West Lafayette",
  "region": "IN",
  "memberSince": "2024",
  "isNewMember": false,
  "scrapedAt": "2026-07-04T04:20:18.378Z"
}
```

### Step-by-step guide

1. Open the chamber directory in your browser.
2. Search for a keyword or open a new-member/category page.
3. Copy the URL from your browser.
4. Paste it into `startUrls`.
5. Set `maxItems`.
6. Run the actor.
7. Export the dataset as CSV, Excel, JSON, or via API.

### Tips for better results

- Use `/directory/results.aspx?keyword=...` pages for broad exports.
- Use new-member pages for timely outreach workflows.
- Keep `includeDetails` disabled for fast first runs.
- Enable `includeDetails` when you need cleaner profile-page descriptions.
- Use multiple chamber URLs in one run when comparing regions.

### Integrations

You can connect the dataset to:

- CRM lead imports
- Google Sheets reporting
- Airtable databases
- HubSpot or Salesforce enrichment pipelines
- Clay, Make, Zapier, or n8n workflows
- Local market dashboards

### Monitoring newly joined members

Schedule the actor weekly with a new-member URL and compare the exported profile URLs to your previous run. New profile URLs represent companies that joined recently and may be good outreach targets.

### Local market research workflow

Run the actor for several category or keyword URLs, group by `category`, and count member records. This helps estimate active industries in a local chamber market.

### API usage with Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/growthzone-chamber-directory-scraper').call({
  startUrls: [{ url: 'https://web.grandrapids.org/directory/results.aspx?keyword=business' }],
  maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/growthzone-chamber-directory-scraper').call(run_input={
    'startUrls': [{'url': 'https://web.grandrapids.org/directory/results.aspx?keyword=business'}],
    'maxItems': 100,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### API usage with cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~growthzone-chamber-directory-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://web.grandrapids.org/directory/results.aspx?keyword=business"}],"maxItems":100}'
```

### MCP usage

Use this actor from Apify MCP tools in Claude Desktop, Claude Code, Cursor, or VS Code. The actor-specific MCP URL is:

```text
https://mcp.apify.com/?tools=automation-lab/growthzone-chamber-directory-scraper
```

Add the Apify MCP server in Claude Code with HTTP transport:

```bash
claude mcp add apify --transport http https://mcp.apify.com/?tools=automation-lab/growthzone-chamber-directory-scraper
```

For Claude Desktop, add an MCP server entry like this and include your Apify token in the environment:

```json
{
  "mcpServers": {
    "apify-growthzone-chambers": {
      "url": "https://mcp.apify.com/?tools=automation-lab/growthzone-chamber-directory-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

For Cursor or VS Code, open the MCP settings file and add the same HTTP server configuration. Cursor commonly uses `.cursor/mcp.json`; VS Code can use `.vscode/mcp.json` or the MCP extension's user-level settings:

```json
{
  "mcpServers": {
    "apify-growthzone-chambers": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=automation-lab/growthzone-chamber-directory-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

After saving the settings, restart the editor MCP session and ask the assistant to run `automation-lab/growthzone-chamber-directory-scraper` with your GrowthZone directory URL.

Example prompts:

- "Scrape 100 members from this GrowthZone chamber directory and summarize top categories."
- "Monitor this new-member URL and tell me which companies appeared since last week."
- "Extract websites and phone numbers from this ChamberMaster search results page."

### Data quality notes

GrowthZone directories are public but not identical. Some chambers show full addresses and websites on result cards; others require profile-page enrichment. Some listings omit websites or descriptions.

The actor leaves unavailable fields as `null` rather than guessing.

### Troubleshooting

#### Why did I get zero results?

Use a results URL if possible. Landing pages can require link discovery before listings appear. If a chamber uses a custom non-GrowthZone template, the actor may not find `ListingResults` containers.

#### Why are some websites missing?

Some chamber listings do not include public website links. Try `includeDetails: true` to open profile pages.

#### Why does a category look like `Computers Technology`?

The category is inferred from the GrowthZone profile path when result cards do not expose a separate category label.

### Legality and responsible use

This actor extracts publicly available business directory data. You are responsible for using the data lawfully, respecting website terms, and complying with privacy, outreach, and anti-spam rules in your jurisdiction.

Do not use scraped contact data for unlawful spam, harassment, or discrimination.

### Related scrapers

Other Automation Lab actors that can support lead-generation workflows:

- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/business-address-scraper
- https://apify.com/automation-lab/google-maps-scraper
- https://apify.com/automation-lab/linkedIn-profile-scraper

### Changelog

#### 0.1

- Initial GrowthZone / ChamberMaster member directory extraction
- HTTP/Cheerio implementation
- Optional profile-page enrichment
- PPE start and item charge events

### FAQ

#### Can I scrape any chamber website?

No. The actor is designed for public GrowthZone / ChamberMaster directory templates. Other chamber platforms may need a different actor.

#### Can I run many chambers at once?

Yes. Add multiple start URLs and set a `maxItems` limit that matches your export size.

#### Does it require login?

No. The actor targets public member directory pages only.

#### Does it use a proxy?

No proxy is required for the default tested public pages.

#### Can I export to Excel?

Yes. Apify datasets can be downloaded as CSV, XLSX, JSON, XML, RSS, and HTML.

# Actor input Schema

## `startUrls` (type: `array`):

Public chamber directory URLs to scrape. Use /directory/results.aspx?keyword=... URLs for broad lead lists, category URLs, /search pages, or new-member results pages.

## `maxItems` (type: `integer`):

Maximum chamber member records to save across all start URLs.

## `includeDetails` (type: `boolean`):

Follow each member profile page for cleaner address/category enrichment. Keep disabled for the fastest lead-list exports.

## `requestDelayMs` (type: `integer`):

Optional polite delay used only when profile-page enrichment is enabled.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://web.grandrapids.org/directory/results.aspx?keyword=business"
    }
  ],
  "maxItems": 20,
  "includeDetails": false,
  "requestDelayMs": 0
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://web.grandrapids.org/directory/results.aspx?keyword=business"
        }
    ],
    "maxItems": 20,
    "includeDetails": false,
    "requestDelayMs": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/growthzone-chamber-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 = {
    "startUrls": [{ "url": "https://web.grandrapids.org/directory/results.aspx?keyword=business" }],
    "maxItems": 20,
    "includeDetails": False,
    "requestDelayMs": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/growthzone-chamber-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 '{
  "startUrls": [
    {
      "url": "https://web.grandrapids.org/directory/results.aspx?keyword=business"
    }
  ],
  "maxItems": 20,
  "includeDetails": false,
  "requestDelayMs": 0
}' |
apify call automation-lab/growthzone-chamber-directory-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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