# Art Institute of Chicago Scraper (`parseforge/art-institute-of-chicago-scraper`) Actor

Export 131,000+ artworks from the Art Institute of Chicago catalog. Pull titles, artists, dates, mediums, dimensions, places of origin, classifications, departments, credit lines, and high-resolution IIIF image links by browse, search, classification, or department.

- **URL**: https://apify.com/parseforge/art-institute-of-chicago-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Business, Other, Education
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.75 / 1,000 result items

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🖼️ Art Institute of Chicago Scraper

> 🚀 **Export the AIC catalog in seconds.** Pull **131,000+ artworks** across paintings, sculptures, photographs, prints, textiles, and decorative arts. No login, no API key, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-05-21 · **📊 38 fields** per record · **🖼️ 131,945 artworks** · **🏛️ 16 curatorial departments** · **🎨 30+ classifications**

The **Art Institute of Chicago Scraper** exports the museum's public catalog and returns **38 fields per artwork**, including title, artist, date, medium, dimensions, place of origin, classification, department, credit line, provenance text, and a direct IIIF high-resolution image link. The underlying dataset is one of the largest open museum catalogs in the world, maintained by AIC curators and continuously refreshed.

Coverage spans **131,945 records** across **16 curatorial departments** and **30+ classifications**, from European old masters and Impressionist paintings to Japanese prints, African sculpture, and contemporary textiles. Records include public-domain flags and on-view status, so you can build galleries, study collections, or training sets without rights ambiguity.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Art historians, museum tech teams, EdTech builders, ML researchers, gallery apps, digital archivists, OSM contributors | High-resolution image datasets, provenance research, classroom slide decks, ML training (vision), gallery autocomplete, public-domain image discovery |

---

### 📋 What the Art Institute of Chicago Scraper does

Two collection workflows in a single run:

- 🖼️ **Browse the full catalog.** Walk all 131,945 records in catalog order with optional filters.
- 🔍 **Keyword search.** Free-text query across titles, artists, mediums, and credit lines.
- 🏛️ **Department filter.** Restrict to one of 16 curatorial departments such as Modern and Contemporary Art or Photography and Media.
- 🎨 **Classification filter.** Narrow to one technique (painting, sculpture, etching, lithograph, woodblock print, photograph, and more).
- ✅ **Public-domain only.** Surface artworks released into the public domain for free reuse.
- 🪟 **On-view only.** Surface artworks currently on display in a museum gallery.

Each record includes the artist credit, dating, medium and dimensions, classification, department, provenance, credit line, and a direct IIIF image URL sized for web use.

> 💡 **Why it matters:** access to a structured, well-maintained museum catalog powers research projects, classroom slide decks, training data for vision models, and inspiration libraries for designers. The catalog mixes public-domain works that anyone can reuse with copyrighted contemporary holdings, and this scraper exposes that distinction in a single field.

---

### 🎬 Full Demo

_🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded dataset._

---

### ⚙️ Input

<table>
<thead>
<tr><th>Input</th><th>Type</th><th>Default</th><th>Behavior</th></tr>
</thead>
<tbody>
<tr><td><code>maxItems</code></td><td>integer</td><td><code>10</code></td><td>Records to return. Free plan caps at 10, paid plan at 1,000,000.</td></tr>
<tr><td><code>mode</code></td><td>string</td><td><code>"list"</code></td><td><code>list</code> walks the full catalog, <code>search</code> runs a keyword query.</td></tr>
<tr><td><code>query</code></td><td>string</td><td><code>""</code></td><td>Free-text search string when <code>mode</code> is <code>search</code>.</td></tr>
<tr><td><code>departmentId</code></td><td>string</td><td><code>""</code></td><td>One of 16 department IDs (e.g. <code>PC-11</code> Modern Art). Empty = any.</td></tr>
<tr><td><code>classification</code></td><td>string</td><td><code>""</code></td><td>One classification (e.g. <code>painting</code>, <code>etching</code>, <code>textile</code>). Empty = any.</td></tr>
<tr><td><code>publicDomainOnly</code></td><td>boolean</td><td><code>false</code></td><td>When <code>true</code>, returns only public-domain artworks.</td></tr>
<tr><td><code>isOnView</code></td><td>boolean</td><td><code>false</code></td><td>When <code>true</code>, returns only artworks currently on view.</td></tr>
</tbody>
</table>

**Example: 50 public-domain paintings from Painting and Sculpture of Europe.**

```json
{
    "maxItems": 50,
    "mode": "list",
    "departmentId": "PC-10",
    "classification": "painting",
    "publicDomainOnly": true
}
````

**Example: 25 search results for "monet water lilies".**

```json
{
    "maxItems": 25,
    "mode": "search",
    "query": "monet water lilies"
}
```

> ⚠️ **Good to Know:** the AIC catalog includes both public-domain and copyrighted works. The <code>isPublicDomain</code> field tells you which is which. The IIIF image URL is the standard 843-pixel-wide web rendition; for higher resolution use the IIIF service directly with the <code>image\_id</code> path component.

***

### 📊 Output

Each artwork record contains **39 fields**. Download the dataset as CSV, Excel, JSON, or XML.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🖼️ `imageUrl` | string | null | IIIF web rendition (843 px wide) |
| 🆔 `artworkId` | integer | `65133` |
| 🏷️ `title` | string | `"Panel (Upholstery Fabric)"` |
| 👤 `artistDisplay` | string | null | `"Yvonne Palmer Pacanovsky Bobrowicz (American, 1928-2022)"` |
| 👤 `artistTitle` | string | null | Short artist label |
| 📅 `dateDisplay` | string | null | `"1951"` |
| 📅 `dateStart` / `dateEnd` | number | null | Decimal year bounds |
| 🌍 `placeOfOrigin` | string | null | `"Pennsylvania"` |
| 🎨 `mediumDisplay` | string | null | `"Cotton, rayon, and polyolefin, float weave"` |
| 📏 `dimensions` | string | null | `"210.8 x 103.8 cm"` |
| 🗂️ `classificationTitle` | string | null | `"textile"` |
| 🏛️ `departmentTitle` | string | null | `"Textiles"` |
| 💳 `creditLine` | string | null | `"Gift of Mr. and Mrs. Joseph R. Bobrowicz"` |
| 🔖 `mainReferenceNumber` | string | null | Accession number |
| ✅ `isPublicDomain` | boolean | null | `false` |
| 🪟 `isOnView` | boolean | null | `false` |
| 🎨 `colorfulness` | number | null | Numeric color metric |
| 🎨 `colorHsl` | object | null | `{h, s, l, percentage, population}` |
| 📚 `subjectTitles` / `styleTitles` / `themeTitles` | string\[] | null | Curated tags |
| 📜 `provenanceText` | string | null | Ownership history |
| 📖 `publicationHistory` | string | null | Publications referencing the work |
| 🎟️ `exhibitionHistory` | string | null | Exhibition history text |
| 🔗 `artworkUrl` | string | `"https://www.artic.edu/artworks/65133"` |
| 🕒 `scrapedAt` | ISO 8601 | `"2026-05-20T23:14:00.000Z"` |

#### 📦 Sample records

<details>
<summary><strong>🪡 Mid-century textile: Panel (Upholstery Fabric)</strong></summary>

```json
{
    "imageUrl": "https://www.artic.edu/iiif/2/a6ef2bf7-24ac-f911-210c-e5d77b1dac72/full/843,/0/default.jpg",
    "artworkId": 65133,
    "title": "Panel (Upholstery Fabric)",
    "artistDisplay": "Yvonne Palmer Pacanovsky Bobrowicz (American, 1928-2022)",
    "dateDisplay": "1951",
    "placeOfOrigin": "Pennsylvania",
    "mediumDisplay": "Cotton, rayon, and polyolefin, float weave",
    "dimensions": "210.8 x 103.8 cm (83 x 40 7/8 in.)",
    "classificationTitle": "textile",
    "departmentTitle": "Textiles",
    "creditLine": "Gift of Mr. and Mrs. Joseph R. Bobrowicz",
    "isPublicDomain": false,
    "artworkUrl": "https://www.artic.edu/artworks/65133"
}
```

</details>

<details>
<summary><strong>🪵 18th-century French decorative bracket</strong></summary>

```json
{
    "imageUrl": "https://www.artic.edu/iiif/2/1fe13c52-3d6a-dc6d-9312-84207eb3affe/full/843,/0/default.jpg",
    "artworkId": 87741,
    "title": "Bracket (one of two)",
    "artistDisplay": "France",
    "dateDisplay": "c. 1735",
    "placeOfOrigin": "France",
    "mediumDisplay": "Wood, possibly oak, carved and gilded",
    "dimensions": "52.4 x 46.4 x 17.3 cm (20 5/8 x 18 1/4 x 6 13/16 in.)",
    "classificationTitle": "rack",
    "departmentTitle": "Applied Arts of Europe",
    "creditLine": "Gift of Mrs. Charles H. Boissevain in memory of Henry C. Dangler",
    "isPublicDomain": true,
    "artworkUrl": "https://www.artic.edu/artworks/87741"
}
```

</details>

<details>
<summary><strong>🎨 Belle Epoque etching: Place de la Trinite, Paris</strong></summary>

```json
{
    "imageUrl": "https://www.artic.edu/iiif/2/db32e527-13fd-4d0d-94f7-8bc43a276608/full/843,/0/default.jpg",
    "artworkId": 48299,
    "title": "Place de la Trinite, Paris, small plate",
    "artistDisplay": "Jean Francois Raffaelli, French, 1850-1924",
    "dateDisplay": "c. 1898",
    "placeOfOrigin": "France",
    "mediumDisplay": "Etching with drypoint and roulette from two plates",
    "classificationTitle": "etching",
    "departmentTitle": "Prints and Drawings",
    "creditLine": "The Charles Deering Collection",
    "isPublicDomain": false,
    "artworkUrl": "https://www.artic.edu/artworks/48299"
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🖼️ | **Massive catalog.** 131,945 artworks across paintings, sculpture, photography, prints, textiles, and decorative arts. |
| 🎯 | **Multi-dimensional filtering.** Department, classification, search query, public-domain flag, and on-view flag combine freely. |
| 🖼️ | **Direct IIIF image links.** One field returns a ready-to-render high-resolution image URL per record. |
| ⚡ | **Fast.** 10 records in under 10 seconds, 10,000 in a few minutes. |
| 📚 | **Rich metadata.** Provenance, publication history, exhibition history, credit line, and dating bounds included. |
| 🔁 | **Always fresh.** Every run pulls the latest catalog so new accessions and corrections appear automatically. |
| 🚫 | **No authentication.** Public catalog data. No login or token required. |

> 📊 The AIC catalog is one of the most-cited open museum datasets in the cultural-heritage community. The combination of metadata depth and high-resolution imagery is unusual at this scale.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ Art Institute of Chicago Scraper** *(this Actor)* | $5 free credit, then pay-per-use | **131,945 artworks** | **Live per run** | mode, department, classification, public-domain, on-view | ⚡ 2 min |
| Manual catalog browsing | Free | Per artwork | Manual | None | 🐢 Tedious |
| Aggregator museum portals | Free / mixed | Smaller subsets | Variable | Limited | ⏳ Hours |
| Build your own crawler | Engineering time | Full | Custom | Custom | 🛠️ Days |

Pick this Actor when you want a clean, filtered slice of the AIC catalog without writing parsers, handling pagination, or maintaining schemas.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the Art Institute of Chicago Scraper page on the Apify Store.
3. 🎯 **Set input.** Pick a department, classification, search query, or leave defaults for a catalog browse.
4. 🚀 **Run it.** Click **Start** and let the Actor collect your data.
5. 📥 **Download.** Grab your results in the **Dataset** tab as CSV, Excel, JSON, or XML.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### 🏫 EdTech and digital classrooms

- Build slide decks with high-resolution public-domain artwork
- Power art-history flashcard apps with structured metadata
- Generate quiz datasets keyed to artist, period, or technique
- Localize museum content for language-learning platforms

</td>
<td width="50%" valign="top">

#### 🤖 ML and computer vision

- Train fine-art classifiers on labeled, well-curated images
- Build style-transfer or generative models on public-domain works
- Seed multimodal models with rich text-image pairs
- Benchmark image embedding models on art-domain queries

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 🖼️ Galleries, apps, and visualization

- Sync gallery autocomplete with the canonical AIC titles
- Build interactive timelines or geographic origin maps
- Render virtual exhibitions sorted by department or theme
- Power discovery feeds with on-view filters

</td>
<td width="50%" valign="top">

#### 📚 Research and journalism

- Provenance investigations with structured ownership history
- Stylistic comparisons across artist, place, and period
- Open-data exercises around museum metadata quality
- Citation-ready datasets for arts journalism stories

</td>
</tr>
</table>

***

### 🔌 Automating Art Institute of Chicago Scraper

Control the scraper programmatically for scheduled runs and pipeline integrations:

- 🟢 **Node.js.** Install the `apify-client` NPM package.
- 🐍 **Python.** Use the `apify-client` PyPI package.
- 📚 See the [Apify documentation](https://docs.apify.com/) for full details.

The [Apify Schedules feature](https://docs.apify.com/platform/schedules) lets you trigger this Actor on any cron interval. Daily or weekly refreshes keep downstream catalogs in sync with new accessions and metadata corrections.

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Art-history theses with reproducible, versioned dataset pulls
- Quantitative studies on collection composition by period or region
- Reproducible open-access research with cited records
- Provenance and looted-art research with structured ownership text

</td>
<td width="50%">

#### 🎨 Personal and creative

- Inspiration libraries for designers, illustrators, and animators
- Mood boards keyed to medium, palette, or period
- Side projects: art-of-the-day bots, gallery wallpapers
- Hobbyist databases for collectors and museum-goers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Cultural-heritage transparency around public-domain works
- Accessible companion apps for museum tours and field trips
- Investigative journalism on collection history
- Wikimedia Commons and Wikipedia cultural-heritage uploads

</td>
<td width="50%">

#### 🧪 Experimentation

- Vision-model benchmarks on a single curated catalog
- Prompt engineering for AI image-description tasks
- Agent pipelines that resolve titles, artists, and provenance
- Hackathon projects around digital art and discovery

</td>
</tr>
</table>

***

### 🤖 Ask an AI assistant about this scraper

Open a ready-to-send prompt about this ParseForge actor in the AI of your choice:

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20Art%20Institute%20of%20Chicago%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20Art%20Institute%20of%20Chicago%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20Art%20Institute%20of%20Chicago%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🅒 [**Copilot**](https://copilot.microsoft.com/?q=How%20do%20I%20use%20the%20Art%20Institute%20of%20Chicago%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)

***

### ❓ Frequently Asked Questions

#### 🧩 How does it work?

Configure your department, classification, search query, or public-domain filter, click Start, and the Actor pulls the AIC catalog page by page, returning one clean structured record per artwork. No browser automation, no captchas, no setup.

#### 📏 How accurate is the data?

The records mirror the museum's own catalog. Cataloging accuracy depends on AIC curatorial staff. Older records may have less complete provenance or dimensions; modern accessions tend to be fully populated.

#### 🔁 How often is the dataset refreshed?

The catalog is updated continuously as the museum revises records and accessions new artworks. Every run of this Actor pulls the latest data, so your dataset reflects current entries at run time.

#### 🖼️ Are the images free to reuse?

Only artworks with `isPublicDomain` set to `true` are explicitly cleared for free reuse. Other records remain under copyright; consult the museum's terms before redistribution.

#### ⏰ Can I schedule regular runs?

Yes. Use Apify Schedules to run this Actor on any cron interval (hourly, daily, weekly) and keep a downstream database in sync.

#### ⚖️ Is this data legal to use?

The structured metadata is published openly. Image rights vary by artwork; the `isPublicDomain` field flags works released for free reuse. Review the museum's terms for your specific use case.

#### 💼 Can I use this data commercially?

Yes for the metadata and for any artwork flagged as public domain. Other images may carry copyright restrictions. You are responsible for compliance.

#### 💳 Do I need a paid Apify plan to use this Actor?

No. The free Apify plan is enough for testing and small runs (10 records per run). A paid plan lifts the limit and gives you access to scheduling, higher concurrency, and larger datasets.

#### 🔁 What happens if a run fails or gets interrupted?

Apify automatically retries transient errors. If a run still fails, inspect the log in the Runs tab, adjust the input, and re-run. Partial datasets from failed runs are preserved.

#### 🏛️ Can I filter to a specific gallery or exhibition?

The schema returns `galleryTitle` and `galleryId` per record, so you can post-filter after a run. Add a search query like the exhibition title for tighter matching at collection time.

#### 🆘 What if I need help?

Our support team is here to help. Contact us through the Apify platform or use the Tally form linked below.

***

### 🔌 Integrate with any app

Art Institute of Chicago Scraper connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get run notifications in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe catalog data into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a run finishes. Push fresh catalog data into your product backend, or alert your team in Slack.

***

### 🔗 Recommended Actors

- [**📐 arXiv Preprint Scraper**](https://apify.com/parseforge/arxiv-scraper) - Open-access research papers across every academic field
- [**📚 OurAirports Global Airport Database Scraper**](https://apify.com/parseforge/ourairports-scraper) - Worldwide airport reference data
- [**🗺️ Nominatim OSM Scraper**](https://apify.com/parseforge/nominatim-osm-scraper) - Geocode addresses via OpenStreetMap
- [**📈 Indexmundi Scraper**](https://apify.com/parseforge/indexmundi-scraper) - Global demographic and economic indicators

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom data project, or report an issue.

***

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

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

Browse the full collection or run a keyword search.

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

Free-text keyword for the search mode. Examples: 'monet water lilies', 'van gogh bedroom', 'sunset'.

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

Restrict to one curatorial department.

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

Restrict to one classification.

## `publicDomainOnly` (type: `boolean`):

When enabled, returns only artworks marked as public domain.

## `isOnView` (type: `boolean`):

When enabled, returns only artworks currently on view in a gallery.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "list",
  "publicDomainOnly": false,
  "isOnView": false
}
```

# 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 = {
    "maxItems": 10,
    "mode": "list",
    "departmentId": "",
    "classification": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/art-institute-of-chicago-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,
    "mode": "list",
    "departmentId": "",
    "classification": "",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/art-institute-of-chicago-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 '{
  "maxItems": 10,
  "mode": "list",
  "departmentId": "",
  "classification": ""
}' |
apify call parseforge/art-institute-of-chicago-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/art-institute-of-chicago-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Art Institute of Chicago Scraper",
        "description": "Export 131,000+ artworks from the Art Institute of Chicago catalog. Pull titles, artists, dates, mediums, dimensions, places of origin, classifications, departments, credit lines, and high-resolution IIIF image links by browse, search, classification, or department.",
        "version": "1.0",
        "x-build-id": "Q0frllw9yN3wa77Lh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~art-institute-of-chicago-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-art-institute-of-chicago-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/parseforge~art-institute-of-chicago-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-art-institute-of-chicago-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/parseforge~art-institute-of-chicago-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-art-institute-of-chicago-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": {
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "list",
                            "search"
                        ],
                        "type": "string",
                        "description": "Browse the full collection or run a keyword search."
                    },
                    "query": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Free-text keyword for the search mode. Examples: 'monet water lilies', 'van gogh bedroom', 'sunset'."
                    },
                    "departmentId": {
                        "title": "Department",
                        "enum": [
                            "",
                            "PC-1",
                            "PC-3",
                            "PC-4",
                            "PC-5",
                            "PC-7",
                            "PC-8",
                            "PC-9",
                            "PC-10",
                            "PC-11",
                            "PC-12",
                            "PC-13",
                            "PC-14",
                            "PC-135",
                            "PC-824",
                            "PC-826",
                            "PC-838"
                        ],
                        "type": "string",
                        "description": "Restrict to one curatorial department."
                    },
                    "classification": {
                        "title": "Classification",
                        "enum": [
                            "",
                            "painting",
                            "sculpture",
                            "print",
                            "drawing",
                            "photograph",
                            "textile",
                            "etching",
                            "lithograph",
                            "woodblock print",
                            "engraving",
                            "watercolor",
                            "drypoint",
                            "screenprint",
                            "ceramics",
                            "book",
                            "coin",
                            "architectural drawing"
                        ],
                        "type": "string",
                        "description": "Restrict to one classification."
                    },
                    "publicDomainOnly": {
                        "title": "Public domain only",
                        "type": "boolean",
                        "description": "When enabled, returns only artworks marked as public domain.",
                        "default": false
                    },
                    "isOnView": {
                        "title": "On view only",
                        "type": "boolean",
                        "description": "When enabled, returns only artworks currently on view in a gallery.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
