# Rijksmuseum Collection Scraper (`parseforge/rijksmuseum-collection-scraper`) Actor

Scrapes the Rijksmuseum's online collection by search term, object type, or maker name. Returns each artwork as a flat row with title, maker, date, medium, and link.

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

## Pricing

from $3.62 / 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)

### Rijksmuseum Collection Scraper

**Scrape the Rijksmuseum's public collection of 800,000+ artworks by search term, object type, or artist.** Each record includes the title, maker, date, medium, and permanent link. No API key required. Export to CSV, JSON, Excel, or XML.

The Rijksmuseum's official API requires a key and rate-limits you. This Actor reads the public collection pages directly, letting you search by keyword, filter by object type or maker, and collect up to a million records in one run. Every artwork comes back in a clean, flat row ready for analysis.

| Who uses it | What they scrape Rijksmuseum for |
|---|---|
| Art historians | Catalog every known work by a specific Dutch master for a research database. |
| Data scientists | Build a training dataset of painting metadata and descriptions for a machine learning model. |
| Cultural marketers | Gather all public-domain images and their details for a social media content calendar. |
| App developers | Populate an art discovery app with structured data from the Rijksmuseum collection. |

### What it does

This Actor collects artworks from the Rijksmuseum's online collection by search query, object type, or maker name, and returns each one as a flat row.

- 🔍 **Full-text search:** Find artworks by keyword in the title, like 'Night Watch' or 'self-portrait'.
- 🎨 **Object type filter:** Narrow results to paintings, drawings, prints, photographs, or sculptures.
- ✍️ **Maker filter:** Collect every piece attributed to a specific artist, such as Rembrandt van Rijn.
- 📦 **Bulk collection:** Set a high maximum and pull up to a million records in a single run.

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

### What you can do with Rijksmuseum data

**📚 Build a complete artist catalog.**

An art historian sets the maker to 'Rembrandt van Rijn' and collects every work to analyze his use of chiaroscuro across periods.

**🤖 Train a style classifier.**

A data scientist scrapes all paintings and drawings to create a labeled dataset for a computer vision model that identifies Dutch Golden Age techniques.

**📱 Seed a museum guide app.**

A developer collects the full collection metadata to bootstrap a mobile app that lets users browse and search the Rijksmuseum from their phone.

**📊 Analyze collection composition.**

A curator pulls all records, filters by object type, and charts the distribution of paintings versus prints to inform a new exhibition strategy.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API key** | Access the public collection without registering for an API key or managing OAuth. |
| **Fixed schema** | Every artwork returns the same fields, so your dataset is always consistent. |
| **Flexible export** | Save results as CSV, JSON, Excel, or XML for direct use in any tool. |

### How it compares

This Actor and the other Rijksmuseum Collection Scraper both target the same public collection, but they differ in the filtering options they expose.

| Feature | ParseForge | Rijksmuseum Collection Scraper |
|---|---|---|
| Full-text search by artwork title | Yes | Yes |
| Filter by object type | Yes | Yes |
| Filter by maker or artist name | Yes | Not listed |
| Filter by century or date range | Not listed | Yes |
| Filter by on-display status | Not listed | Yes |

### Configure the run

Drive the Actor with a search term, object type, and maker name, alone or in combination, and filters run as each artwork is read so only matches reach your dataset. 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.004 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $0.40 |
| 1,000 results | $4.00 |
| 10,000 results | $40.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 [Rijksmuseum Collection Scraper](https://apify.com/parseforge/rijksmuseum-collection-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 Rijksmuseum 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/rijksmuseum-collection-scraper"
```

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

### Troubleshooting

**Why am I getting no results?**

Check that your search term, object type, or maker name is spelled correctly and matches the Rijksmuseum's cataloging. Try a broader search or remove filters one by one to see which one is too restrictive.

**The scraper stopped before reaching my maximum items.**

The Actor collects all available results matching your filters. If the Rijksmuseum collection has fewer matching artworks than your maximum, the run will finish early. This is expected behavior.

**Some artworks are missing fields in my dataset.**

The Rijksmuseum's own records may not have every field populated for every object. Missing data in the source will appear as empty cells in your export.

**The run is taking a long time.**

Collecting a large number of artworks requires many requests. Reduce your maximum items or narrow your filters to speed up the run.

**I am getting an error when I try to export my data.**

Ensure your dataset is not empty. If the run completed with zero results, adjust your filters and try again. If the dataset has data, try a different export format.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Rijksmuseum API key to use this scraper? | No. This Actor reads the public-facing collection pages on rijksmuseum.nl, so no API key or registration is required. |
| Can I search for a specific artwork by title? | Yes. Use the search term input to perform a full-text search on artwork titles. For example, entering 'Night Watch' will return that painting and any other works with matching titles. |
| How do I filter results to only show paintings? | Set the object type input to 'painting'. The Actor will then only return records where the object type matches that filter. |
| Can I scrape all works by a single artist? | Yes. Enter the artist's name in the maker input, such as 'Rembrandt van Rijn', and the Actor will collect every work attributed to that maker. |
| What is the maximum number of artworks I can collect? | You can set the maximum artworks input up to 1,000,000 per run. The Rijksmuseum collection contains over 800,000 objects, so you can collect the entire catalog. |
| What data fields does the scraper return for each artwork? | Each row includes the title, maker, date, medium, object type, inventory number, and a permanent link to the artwork's page on the Rijksmuseum website. |
| Can I combine search, type, and maker filters? | Yes. All three inputs are optional and can be used together. For example, you can search for 'landscape' paintings by 'Jacob van Ruisdael'. |
| Does this scraper download the artwork images? | No. This Actor collects the metadata and a link to the artwork's page. The image files themselves are not downloaded. |
| Is the data from this scraper in the public domain? | The Rijksmuseum makes its collection data and images of public-domain works freely available. You should review their terms of use for your specific application. |
| What export formats are supported? | You can export your dataset in CSV, JSON, Excel, or XML format from the Apify platform. |

### 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 Rijksmuseum. 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`):

Maximum number of artworks to collect per run.

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

Optional. Full-text search on the artwork title (e.g. "Night Watch", "self-portrait").

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

Optional object type filter (painting, drawing, print, photograph, sculpture, etc.).

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

Optional maker/artist filter, e.g. Rembrandt van Rijn.

## 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/rijksmuseum-collection-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/rijksmuseum-collection-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/rijksmuseum-collection-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/rijksmuseum-collection-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/aQMWTOppB2NMkmC5l/builds/96yGxrWpaSinYdCiG/openapi.json
