# AAM Museum Directory Scraper (`parseforge/aam-museum-directory-scraper`) Actor

Scrapes museum profiles from the American Alliance of Museums directory. Returns each museum as a row with name, location, contact details, and category, filterable by state and type.

- **URL**: https://apify.com/parseforge/aam-museum-directory-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 86.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.69 / 1,000 results

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/actors/running/actors-in-store.md#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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### AAM Museum Directory Scraper

**Scrape museum listings from the American Alliance of Museums directory, filtered by state and type.** Each record includes the museum name, address, phone, website, and category. Export to CSV, JSON, Excel, or XML.

The American Alliance of Museums directory is the central public listing of accredited museums in the United States, but it offers no bulk export. This Actor reads the directory directly, letting you pull museum records by state or museum type. You get structured data ready for research, outreach, or enrichment without manual copying.

| Who uses it | What they scrape American Alliance of Museums for |
|---|---|
| Grant writers | Build a targeted list of museums by state and type for funding proposals. |
| Sales teams | Generate a prospecting list of museum contacts for products or services. |
| Researchers | Assemble a dataset of US museums for academic or market analysis. |
| Nonprofit consultants | Identify potential client museums by region and specialization. |

### What it does

This Actor collects museum profiles from the AAM directory and returns each one as a flat row with name, location, contact details, and category.

- 🗺️ **State filter:** Limit results to a single US state using its two-letter postal code.
- 🏛️ **Museum type filter:** Narrow the scrape to a specific category like Art, History, or Science.
- 📊 **Structured output:** Every museum comes back as a clean row with consistent fields.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with American Alliance of Museums data

**📋 Build a state-wide outreach list.**

A membership coordinator filters by their state to get every listed museum, then imports the CSV into their CRM for a renewal campaign.

**🎨 Find all art museums for a product launch.**

A supplier sets the type filter to 'Art' and collects contact details for every art museum in the directory to send samples.

**🗺️ Map museum density by region.**

A researcher runs the Actor for multiple states, combines the datasets, and plots museum locations to study cultural access.

**📞 Create a cold-call list for fundraising services.**

A consultant scrapes all museums without a type filter, then sorts by phone availability to prioritize calls.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API needed** | Reads the public directory pages directly, no key or registration required. |
| **Bulk export** | Collect up to a million museum records in one run and download as a spreadsheet. |
| **Targeted filtering** | Pull only the museums that match your state or category criteria. |

### How it compares

No other Store actor targets American Alliance of Museums the same way, so the honest comparison is with the alternatives teams actually weigh.

| | AAM Museum Directory Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When American Alliance of Museums changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor with an optional state code and museum type, and set a maximum number of records to collect per run. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "maxItems": 10
}
```

A larger pull:

```json
{
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.0085 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $0.85 |
| 1,000 results | $8.50 |
| 10,000 results | $85.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [AAM Museum Directory Scraper](https://apify.com/parseforge/aam-museum-directory-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to American Alliance of Museums through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/aam-museum-directory-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check your state code is a valid two-letter abbreviation and your museum type matches the directory's exact wording. Try running without filters first to confirm the Actor works.

**The run stopped before collecting all museums.**

Increase the maxItems value. If it still stops early, the directory may have fewer listings than your limit, or a temporary network issue occurred. Retry the run.

**Some fields are empty in my results.**

The AAM directory does not require every field for every listing. If a museum did not provide a phone number or website, that field will be blank in your output.

**The museum type filter is not working.**

Enter the type exactly as it appears on the AAM site, including capitalization and punctuation. 'Children's Museum' and 'childrens museum' may behave differently.

### FAQ

| Question | Answer |
|---|---|
| Does this scrape the entire AAM directory? | Yes, if you run it without a state or type filter and set a high maxItems value, it will attempt to collect every listed museum. |
| Can I filter by multiple states at once? | The state input accepts a single two-letter code per run. To get multiple states, run the Actor once per state and merge the results. |
| What museum types are available? | The directory includes types like Art, History, Science, Children's, Natural History, and others. Check the AAM website for the current list, then enter the exact name in the type filter. |
| Is the data live or cached? | The Actor reads the live AAM directory on each run, so you always get the current listings. |
| Do I need an AAM membership to scrape? | No. The Actor reads the public-facing directory pages, which are accessible without a login. |
| What format does the data export to? | You can download your results as CSV, JSON, Excel, or XML from the Apify dataset tab. |
| How many museums can I collect? | You set the maximum in the input, up to one million records per run. The full directory contains fewer than that, so a high number will get everything. |
| Does it get the museum website URL? | Yes, the website field is included in the output when the directory lists one. |
| Can I schedule this to run weekly? | Yes, Apify's scheduler lets you set a recurring run to keep your dataset fresh. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by American Alliance of Museums. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

How many museums to collect per run.

## `state` (type: `string`):

Two-letter US state code (e.g. CA, NY, TX) to filter museums by location.

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

Optional museum type filter (Art, History, Science, Children, Natural History, etc.) as listed on the AAM directory.

## Actor input object example

```json
{
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/aam-museum-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 = { "maxItems": 10 }

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

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 10
}' |
apify call parseforge/aam-museum-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/aam-museum-directory-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/3scO6pGfiCOg3gnkM/builds/vp4KpWcwHRXYZPdPO/openapi.json
