# WikiArt Scraper (`crawlerbros/wikiart-scraper`) Actor

Scrape WikiArt.org - the world's largest online art museum with 250,000+ paintings. Browse by art style (Impressionism, Baroque, etc.), search by keyword, or fetch all paintings by a specific artist.

- **URL**: https://apify.com/crawlerbros/wikiart-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Agents, Automation, Other
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## WikiArt Scraper

Scrape **WikiArt** — the visual art encyclopedia with hundreds of thousands of catalogued paintings spanning every major movement. Browse by art style across 30 movements from Early Renaissance to Pop Art, search the catalog by keyword, or pull an artist's complete body of work, and get titles, artist attribution, year, style, genre, medium, the gallery holding the piece, tags, and a full-resolution image URL. HTTP-only via WikiArt's public JSON endpoints. No auth, no proxy.

### What this actor does

- **Three modes:** `byStyle`, `search`, `byArtist`
- **30 art styles** exposed as a dropdown — Impressionism, Surrealism, Cubism, Baroque, Bauhaus-era movements and more
- **Full artist catalogs:** point `byArtist` at a WikiArt slug or URL to page through every catalogued work
- **Image-ready:** every painting carries a directly usable image URL, plus pixel dimensions when published
- **Empty fields are omitted**

### Output per painting

- `paintingId` — WikiArt painting identifier
- `title` — painting title
- `artistName` — attributed artist
- `year` — year or date range as catalogued
- `style` — art movement, e.g. `Impressionism`
- `genre` — e.g. `landscape`, `portrait`, `still life`
- `medium` — technique / materials, e.g. `oil on canvas`
- `period` — artist's period the work belongs to
- `location` — museum or gallery holding the work
- `tags` — subject keywords
- `widthPx`, `heightPx` — image dimensions, when published
- `imageUrl` — painting image
- `artistUrl` — artist page on WikiArt
- `sourceUrl` — painting page on WikiArt
- `wikiartId` — WikiArt content ID, when no canonical page URL is available
- `recordType: "painting"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `byStyle` | `byStyle` / `search` / `byArtist` |
| `style` | string | `Impressionism` | Art movement to browse (mode=byStyle) |
| `searchQuery` | string | `Monet water lily` | Keyword to search for (mode=search) |
| `artistUrl` | string | `claude-monet` | WikiArt artist slug or full URL (mode=byArtist) |
| `maxItems` | int | `50` | Hard cap (1–500) |

#### Example: browse a movement

```json
{
  "mode": "byStyle",
  "style": "Impressionism",
  "maxItems": 200
}
```

#### Example: an artist's complete works

```json
{
  "mode": "byArtist",
  "artistUrl": "claude-monet",
  "maxItems": 500
}
```

#### Example: keyword search

```json
{
  "mode": "search",
  "searchQuery": "water lily",
  "maxItems": 100
}
```

#### Example: a narrower movement

```json
{
  "mode": "byStyle",
  "style": "Hudson River School",
  "maxItems": 150
}
```

### Use cases

- **Art education** — build illustrated movement-by-movement teaching collections
- **Museum and gallery apps** — enrich collection entries with style, genre, and medium metadata
- **Print-on-demand and licensing research** — survey an artist's catalog and where works are held
- **Machine learning** — assemble style-labelled painting datasets for classification or generation research
- **Design and moodboarding** — pull large themed image sets by movement or subject tag
- **Data journalism** — analyse how genres and media shift across art movements

### FAQ

**What is WikiArt?**  A user-built online encyclopedia of visual art, cataloguing paintings by artist, movement, genre, and period. See [wikiart.org](https://www.wikiart.org).

**Is this affiliated with WikiArt?**  No. This is a third-party actor using WikiArt's public JSON endpoints.

**Do I need an account or API key?**  No. The endpoints used are open.

**Can I reuse the images?**  Not automatically. WikiArt catalogs both public-domain works and works still in copyright, and its own terms govern reuse of the reproductions. Check the rights of each specific work before publishing it.

**Where do I find an artist slug?**  It's the last path segment of a WikiArt artist URL — `wikiart.org/en/claude-monet` gives `claude-monet`. You can pass either the full URL or just the slug.

**Why is `year` a string rather than a number?**  Art catalogs record dates as ranges and approximations (`c. 1890`, `1888-1889`). Keeping the field as published avoids inventing precision that isn't there.

**Why do search results carry less metadata than style browsing?**  WikiArt's search response is a lighter payload than its style and artist listings. Titles, artists, and images are always present; genre, medium, and gallery are more consistently populated in `byStyle` and `byArtist`.

**Why did a style return fewer paintings than `maxItems`?**  Narrow movements like Precisionism or Luminism have far smaller catalogs than Impressionism. The run stops when WikiArt reports no more pages.

**Are the style names case- and punctuation-sensitive?**  Use the dropdown values as written — parenthetical forms like `Art Nouveau (Modern)` are converted to the right URL slug automatically.

**How fresh is the data?**  Live at query time. WikiArt's catalog is community-maintained and grows continuously.

# Actor input Schema

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

What to fetch from WikiArt.

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

Art style to browse (mode=byStyle).

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

Keyword to search for paintings (mode=search).

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

WikiArt artist URL or slug (mode=byArtist). E.g. https://www.wikiart.org/en/claude-monet or just 'claude-monet'.

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

Maximum number of paintings to emit.

## Actor input object example

```json
{
  "mode": "byStyle",
  "style": "Impressionism",
  "searchQuery": "Monet water lily",
  "artistUrl": "claude-monet",
  "maxItems": 50
}
```

# Actor output Schema

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

Dataset containing all scraped records.

# 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 = {
    "mode": "byStyle",
    "style": "Impressionism",
    "searchQuery": "Monet water lily",
    "artistUrl": "claude-monet",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/wikiart-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 = {
    "mode": "byStyle",
    "style": "Impressionism",
    "searchQuery": "Monet water lily",
    "artistUrl": "claude-monet",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/wikiart-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 '{
  "mode": "byStyle",
  "style": "Impressionism",
  "searchQuery": "Monet water lily",
  "artistUrl": "claude-monet",
  "maxItems": 50
}' |
apify call crawlerbros/wikiart-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/wikiart-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/0zKoj6EnOpzjN6Su8/builds/duZkCVwRpVclDstHM/openapi.json
