# AAALAC Accredited Research Institution Directory Scraper (`maximedupre/aaalac`) Actor

Collect the current public AAALAC International directory of accredited institutions and research units. Get names, parent organizations, locations, and collection times in an Apify dataset.

- **URL**: https://apify.com/maximedupre/aaalac.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Education, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.45 / 1,000 directory entries

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

### 🧭 AAALAC Accreditation Directory for Research Teams

Research teams, animal-care program staff, and due-diligence analysts can use this Actor to collect the current public AAALAC International directory. It returns accredited institution and research-unit names, parent organizations when listed, location details, and collection times in an Apify dataset, giving you a consistent list to review or use in your own data work.

**Use cases**

- Use **[Aaalac Accreditation](https://apify.com/maximedupre/aaalac/examples/aaalac-accreditation)** to collect public accreditation directory rows for research.
- Find **[Aaalac Accredited Organizations](https://apify.com/maximedupre/aaalac/examples/aaalac-accredited-organizations)** with names, parent organizations, and available locations.
- Browse the **[Aaalac Directory](https://apify.com/maximedupre/aaalac/examples/aaalac-directory)** as a structured Apify dataset.
- Check the **[Aaalac Accreditation List](https://apify.com/maximedupre/aaalac/examples/aaalac-accreditation-list)** before reviewing institutions or research units.
- Use **[Aaalac Accredited](https://apify.com/maximedupre/aaalac/examples/aaalac-accredited)** to build a current list of accredited organizations.

#### 📋 AAALAC Directory Rows

Each dataset row represents one institution or research unit listed by the public directory. The row includes the name, parent organization when available, location details when listed, and collection time. The dataset keeps useful address or location text when normalized city, state or province, or country values are sparse.

#### ▶️ Collect the AAALAC Directory

Run the Actor without a source credential. Leave **Maximum entries** empty to return all available results until the source is exhausted. Enter a positive number to stop after that many entries. The output contains a link to the run's Apify dataset, and `collectedAt` shows when each row was collected.

#### ⚙️ Input

The public input has one optional work limit. Leave it empty to return all available directory entries until the source is exhausted, or enter a positive number for a smaller run.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `maxItems` | integer | Optional cap on returned entries. Leave it empty to return all available directory entries until the source is exhausted. Enter a positive number to stop after that many entries. |

Example input from a successful run:

```json
{
}
```

An empty object runs the complete collection.

#### 🧾 Output

The Actor returns an object with a link to the run's default Apify dataset. Each dataset row uses the same public shape. A row can omit the parent organization, the location object, or individual location fields when the directory does not provide them; `name` and `collectedAt` are required.

**Output link and dataset row fields**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | string | Link to the Apify dataset for this run. |
| `name` | string | Name of the accredited institution or research unit. |
| `parentOrganization` | string | Parent organization listed for the institution or unit, when available. |
| `location` | object | Location details listed for the institution or unit, when available. |
| `location.address` | string | Complete address or location text listed in the directory, when available. |
| `location.city` | string | City listed for the directory entry, when available. |
| `location.stateOrProvince` | string | State or province listed for the directory entry, when available. |
| `location.country` | string | Country listed for the directory entry, when available. |
| `collectedAt` | string (date-time) | Time when the directory entry was collected. |

Representative row from a successful run with an empty input:

```json
{
  "parentOrganization": "59th Medical Wing (Wilford Hall Ambulatory & Surgical Center)",
  "name": "Clinical Investigations and Research Support",
  "location": {
    "address": "JBSA LACKLAND, TX, UNITED STATES",
    "city": "JBSA LACKLAND",
    "stateOrProvince": "TX",
    "country": "UNITED STATES"
  },
  "collectedAt": "2026-08-11T23:37:29.424Z"
}
```

#### 💳 Pricing

Pricing is pay per event. The primary event is one **Directory entry** for each accredited institution or research unit saved to your dataset. Check the Apify Console for the current price.

| Buyer-facing event | Description |
| --- | --- |
| Directory entry | One accredited institution or research unit saved to your dataset. |

#### 🔌 Integrations

Use the Apify dataset link in the output to review and export the rows with Apify's normal dataset tools.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Do I need an AAALAC account or source credential?

No. The Actor reads the publicly available directory without a buyer-supplied source credential.

##### How do I get the full current directory?

Leave **Maximum entries** empty. The Actor returns all available results until the source is exhausted. Enter a positive number when you want a smaller run.

##### Can I filter the directory by country or organization?

No. This Actor retrieves the public directory and does not offer keyword, organization, country, or location filters. Filter the dataset after the run if you need a smaller view.

##### What happens when a location is incomplete?

The row keeps the location parts and address or location text that the public directory provides. City, state or province, and country can be missing for some entries.

##### Does the dataset include accreditation dates or inspection details?

No. Member-portal-only accreditation status, initial accreditation date, last site visit date, and other login-gated metadata are outside this Actor. It returns public directory names, available parent organizations and locations, and collection times.

##### Is this a historical AAALAC list?

No. Each run reads the current public directory at run time and records `collectedAt`. The Actor does not create historical snapshots, change detection, or alerts across runs.

##### What does AAALAC stand for?

AAALAC International is the Association for Assessment and Accreditation of Laboratory Animal Care International. This Actor collects its public accreditation directory; it does not provide accreditation requirements, guidelines, or certification decisions.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~aaalac/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [ORCID Researcher Profile Search](https://apify.com/maximedupre/orcid-researcher-profile-search) — Map researchers and affiliations when you need more context around listed institutions.
- [Map Your Show Exhibitor Scraper](https://apify.com/maximedupre/map-your-show-exhibitor-scraper) — Collect another public directory of organizations, locations, and profile links.
- [LinkedIn Company Scraper](https://apify.com/maximedupre/linkedin-company-scraper) — Enrich known parent organizations with public company locations and profile data.
- [AAALAC Accredited Research Institution Directory Scraper](https://apify.com/jungle_synthesizer/aaalac-accredited-research-institution-directory-scraper) — Compare another public collection of the AAALAC directory.
- [ROR (Research Organization Registry) Scraper](https://apify.com/parseforge/ror-scraper) — Add research-organization names, locations, identifiers, and relationships.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Optional. Leave this empty to return all available directory entries until the source is exhausted. Enter a positive number to stop after that many entries.

## Actor input object example

```json
{
  "maxItems": 25
}
```

# Actor output Schema

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

Accredited institutions and research units collected from the public directory.

# 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": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/aaalac").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": 25 }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/aaalac").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": 25
}' |
apify call maximedupre/aaalac --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/aaalac"
        }
    }
}

```

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/3HKuuywr1rxu3Wqo0/builds/BH4fDjMzPmgNYvSjV/openapi.json
