# Wild Apricot Member Leads — Contact Directory Scraper (`rook-data-tools/wild-apricot-directory-scraper`) Actor

Scrape compatible public Wild Apricot directories into member leads with available names, organizations, categories, phones, emails, websites, addresses, profile URLs, and extra visible fields. Directory themes and access settings vary; some public sites may return no rows. No login used.

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

## Pricing

$5.00 / 1,000 member record extracteds

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

## Wild Apricot Member Directory Scraper

**Turn any public Wild Apricot member directory into clean, structured business leads.**
Thousands of associations, chambers, and professional groups run their member directories
on Wild Apricot. Point this Actor at a directory URL and get, per member: name,
organization, categories, phone, website, address, and a profile link — as a clean
dataset you can export to CSV/Excel or pipe into your CRM.

### Public data only

It reads only the fields members set visible to everyone. Gated or members-only
directories are skipped automatically — no logins, no workarounds, ever.

### Input

Paste one or more directory URLs:

```json
{
  "startUrls": [{ "url": "https://example-association.wildapricot.org/directory" }],
  "maxRecords": 1000
}
```

- **maxRecords / maxRecordsPerDirectory**: cost controls.
- Works whether the directory lives on `*.wildapricot.org` or the association's own domain.

### Output (per record)

```json
{
  "name": "Jane Cooper",
  "organization": "Cooper & Finch Accounting",
  "categories": ["Accounting", "Small Business"],
  "phone": "(555) 204-1188",
  "email": "jane@cooperfinch.com",
  "website": "https://cooperfinch.com",
  "address": "218 Main St, Ridgefield, CT 06877",
  "profileUrl": "https://example-association.wildapricot.org/Sys/PublicProfile/…",
  "sourceDirectory": "https://example-association.wildapricot.org/directory",
  "scrapedAt": "2026-07-23T20:41:10.000Z"
}
```

Any additional public fields a directory exposes arrive in `extraFields` — nothing a
member publishes is dropped.

### Who buys this

Sales teams selling to association members (insurance, SaaS, financial services,
marketing), event & sponsor outreach, recruiting, and anyone building a niche B2B list
from association membership.

### Notes & honest limits

- You get exactly what each member made public — visibility varies by directory and by
  member, so field coverage varies too. Fields a member hid stay hidden.
- Directories that require login simply return nothing (skipped, never bypassed).

### Also available

Scraping **chamber / association** directories on **MembershipWorks** or
**ChamberMaster / GrowthZone**? 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 a run's **dataset ID** into the next step to chain the pipeline.

# Actor input Schema

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

One or more PUBLIC Wild Apricot member-directory page URLs (e.g. https://yourorg.wildapricot.org/directory or a page that contains the member directory gadget). The Actor skips any directory that requires login.

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

Hard cap on how many member profiles to extract across all directories in this run. Controls cost.

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

Cap per individual directory URL. 0 = no per-directory cap.

## `extractEmails` (type: `boolean`):

Include email when a member has made it public. Only ever reads fields the member set visible to everyone.

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

Proxy configuration for this run.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://whatcombar.wildapricot.org/Member-directory"
    }
  ],
  "maxRecords": 1000,
  "maxRecordsPerDirectory": 0,
  "extractEmails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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://whatcombar.wildapricot.org/Member-directory"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rook-data-tools/wild-apricot-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://whatcombar.wildapricot.org/Member-directory" }] }

# Run the Actor and wait for it to finish
run = client.actor("rook-data-tools/wild-apricot-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://whatcombar.wildapricot.org/Member-directory"
    }
  ]
}' |
apify call rook-data-tools/wild-apricot-directory-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cKjma6uSSyShMM44O/builds/4YlPbSuWelMgMbZDr/openapi.json
