# ChamberMaster / GrowthZone Directory Scraper (`rook-data-tools/chambermaster-directory-scraper`) Actor

Extract public business records from any ChamberMaster / GrowthZone chamber directory — name, phone, website, full address, category, socials. Public data only, no browser.

- **URL**: https://apify.com/rook-data-tools/chambermaster-directory-scraper.md
- **Developed by:** [Rook DataTools](https://apify.com/rook-data-tools) (community)
- **Categories:** Lead generation, Business
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## 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.

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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## ChamberMaster / GrowthZone Directory Scraper

**Turn any chamber of commerce member directory into clean, structured business leads.**
ChamberMaster / GrowthZone powers roughly **80% of US local chambers** — so one tool
scrapes the vast majority of chamber directories. Point it at a chamber's directory URL and
get, per business: name, category, phone, website, full address, social profiles, and a
description.

![Real run: a public chamber directory turned into a ranked call list — 15 businesses → 12 emails added → AI-scored leads with written openers](https://raw.githubusercontent.com/willowridge1234/rook-data-tools-assets/main/pipeline-proof.png)



### Why it's reliable & cheap
Built specifically for how ChamberMaster / GrowthZone directories are structured — the
same engine works across thousands of chamber sites, so runs are fast, cost pennies,
need no proxies, and the output stays consistent site-to-site.

### Input
Paste one or more chamber directory URLs — usually `business.<chamber>.com` or
`web.<chamber>.com`. The Actor finds the `/list` directory and walks every category
automatically.
```json
{
  "startUrls": [{ "url": "https://business.brainerdlakeschamber.com/list" }],
  "fetchDetails": true,
  "maxRecords": 1000
}
````

- **fetchDetails** (default on): open each business's page for full address, website, and
  socials. Turn off for a faster, cheaper listing-only pull.
- **onlyNewSinceLastRun**: schedule it and get only businesses you haven't seen before.
- **maxRecords / maxRecordsPerDirectory**: cost controls.

### Output example

```json
{
  "name": "Studio Wraps",
  "category": "Advertising Media",
  "phone": "(218) 270-2189",
  "website": "http://www.studiowraps.com/",
  "address": "5558 Pine Beach Rd STE 3",
  "city": "Brainerd",
  "state": "MN",
  "zip": "56401",
  "socials": ["https://www.facebook.com/…", "https://www.linkedin.com/…"],
  "profileUrl": "https://business.brainerdlakeschamber.com/list/Details/studio-wraps-1734…",
  "sourceDirectory": "https://business.brainerdlakeschamber.com/list",
  "scrapedAt": "2026-07-23T20:55:00.000Z"
}
```

### Who buys this

Sales teams selling to local businesses (POS, insurance, marketing, SaaS, banking),
event & sponsor outreach, franchise site selection, and anyone building a regional B2B
list from chamber membership.

### Notes & honest limits

- **Emails are not published by ChamberMaster** (they sit behind a "Send Email" form), so
  there is no email column — pair this with our **Business Website Contact Extractor** to
  add emails from each business's own site. You still get phone, website, full address,
  and social profiles here.
- Businesses appearing in multiple categories are **de-duplicated** to one record.
- Works on any ChamberMaster/GrowthZone directory. Non-ChamberMaster chamber sites won't
  match and simply return nothing.

### Also available

Scraping **association** directories on **Wild Apricot** or **MembershipWorks**? Use our
companion Actors — same clean lead output, different platforms.
---------------------------------------------------------------

### 🔗 Part of a lead-generation suite (scrape → enrich → qualify)

This Actor works best chained with its companions on the same account:

1. **Directory scrapers** — get businesses/members (name + website) from
   Wild Apricot, MembershipWorks, or ChamberMaster / GrowthZone directories.
2. **Business Website Contact Extractor** — add the emails/phones the directories hide.
3. **AI Lead Qualifier** — score each lead against your ICP and write a personalized opener.

Pass any Actor's **dataset ID** into the next step to run the whole pipeline.

# Actor input Schema

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

One or more ChamberMaster/GrowthZone directory URLs. Usually https://business.<chamber>.com or https://web.<chamber>.com — the Actor finds the /list directory automatically. Works on any ChamberMaster-powered chamber of commerce site.

## `fetchDetails` (type: `boolean`):

ON (default): open each business's detail page for full address, website, socials. OFF: faster/cheaper listing-only mode (name, phone, description, category).

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

Hard cap across all directories in this run. Controls cost.

## `maxRecordsPerDirectory` (type: `integer`):

Cap per chamber directory. 0 = no per-directory cap.

## `onlyNewSinceLastRun` (type: `boolean`):

When on, businesses already returned by previous runs (per directory + member id) are skipped — ideal for scheduled CRM feeds. First run returns everything.

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

Politeness delay between page/detail requests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://business.brainerdlakeschamber.com/list"
    }
  ],
  "fetchDetails": true,
  "maxRecords": 1000,
  "maxRecordsPerDirectory": 0,
  "onlyNewSinceLastRun": false,
  "requestDelayMs": 200
}
```

# 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://business.brainerdlakeschamber.com/list"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rook-data-tools/chambermaster-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://business.brainerdlakeschamber.com/list" }] }

# Run the Actor and wait for it to finish
run = client.actor("rook-data-tools/chambermaster-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://business.brainerdlakeschamber.com/list"
    }
  ]
}' |
apify call rook-data-tools/chambermaster-directory-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ChamberMaster / GrowthZone Directory Scraper",
        "description": "Extract public business records from any ChamberMaster / GrowthZone chamber directory — name, phone, website, full address, category, socials. Public data only, no browser.",
        "version": "0.1",
        "x-build-id": "WMg1L1ge91uZzKcUf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/rook-data-tools~chambermaster-directory-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-rook-data-tools-chambermaster-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/rook-data-tools~chambermaster-directory-scraper/runs": {
            "post": {
                "operationId": "runs-sync-rook-data-tools-chambermaster-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/rook-data-tools~chambermaster-directory-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-rook-data-tools-chambermaster-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Chamber directory URLs",
                        "type": "array",
                        "description": "One or more ChamberMaster/GrowthZone directory URLs. Usually https://business.<chamber>.com or https://web.<chamber>.com — the Actor finds the /list directory automatically. Works on any ChamberMaster-powered chamber of commerce site.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "fetchDetails": {
                        "title": "Fetch full detail pages",
                        "type": "boolean",
                        "description": "ON (default): open each business's detail page for full address, website, socials. OFF: faster/cheaper listing-only mode (name, phone, description, category).",
                        "default": true
                    },
                    "maxRecords": {
                        "title": "Max records per run",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap across all directories in this run. Controls cost.",
                        "default": 1000
                    },
                    "maxRecordsPerDirectory": {
                        "title": "Max records per directory",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap per chamber directory. 0 = no per-directory cap.",
                        "default": 0
                    },
                    "onlyNewSinceLastRun": {
                        "title": "Only new since last run (delta mode)",
                        "type": "boolean",
                        "description": "When on, businesses already returned by previous runs (per directory + member id) are skipped — ideal for scheduled CRM feeds. First run returns everything.",
                        "default": false
                    },
                    "requestDelayMs": {
                        "title": "Delay between requests (ms)",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Politeness delay between page/detail requests.",
                        "default": 200
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
