# Artfinder Scraper (`maximedupre/artfinder`) Actor

Collect public Artfinder artwork listings and artist profiles from search terms, categories, or submitted public URLs. Export titles, artists, prices, availability, dimensions, images, profile stats, and source links.

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

## Pricing

from $2.70 / 1,000 artwork listings

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🖼️ Artfinder artwork and artist data

Art researchers, galleries, marketplace analysts, and developers can collect public Artfinder artwork listings and artist profiles in structured dataset rows. Use the data to compare works, study artists, and build a source-linked catalog from one selected source per run.

- Browse [**Art Prints Online**](https://apify.com/maximedupre/artfinder/examples/art-prints-online) by a search term, category, collection, or public artwork URL.
- Find [**Original Art For Sale Online**](https://apify.com/maximedupre/artfinder/examples/original-art-for-sale-online) with public Artfinder artwork listings, prices, availability, and source links.
- Review [**Original Art For Sale Affordable**](https://apify.com/maximedupre/artfinder/examples/original-art-for-sale-affordable) by setting a medium or minimum sold-artwork filter.
- Use [**Where To Buy Art Online**](https://apify.com/maximedupre/artfinder/examples/where-to-buy-art-online) to inspect public Artfinder artwork pages with prices and availability.
- Compare [**Online Art Sites**](https://apify.com/maximedupre/artfinder/examples/online-art-sites) by collecting public Artfinder artwork or artist profile data for research.

#### 📦 Artfinder artwork and artist rows

**Returned data**

Each saved row is either an artwork listing or an artist profile. Artwork rows can include identity, descriptions, categories, mediums, materials, prices, availability, dimensions, images, framing, and artist links. Artist rows can include identity, country, followers, catalog size, sales count, mediums, and average artwork and sold-artwork prices. When the same public source item appears more than once during discovery, the first eligible occurrence is saved and later matches for that item are ignored.

#### ▶️ Run a focused Artfinder collection

**Run setup**

Choose `Artwork listings` or `Artist profiles`, then choose one public Artfinder source for that run. Search one term, browse one category or collection, or submit public artwork or artist URLs for the selected result type.

**Run notes**

The Actor reads public Artfinder pages. Private, login-only, and otherwise non-public content is outside this Actor's scope. Fields that the source does not publish can be absent from a row.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | Choice string | Choose whether the run returns artwork listings or artist profiles. |
| `discoveryMethod` | Choice string | Choose a search term, category or collection, artwork URLs, or artist URLs as the public source. |
| `searchTerm` | String | Enter one Artfinder search term. Use it with the Search term source. |
| `categoryOrCollection` | String | Enter one Artfinder category or collection. Use it with the Category or collection source. |
| `artworkUrls` | Array of objects | Enter one or more public Artfinder artwork URLs. Use them with the Artwork URLs source. |
| `artworkUrls[].url` | String | A public Artfinder artwork URL. |
| `artistUrls` | Array of objects | Enter one or more public Artfinder artist URLs. Use them with the Artist URLs source. |
| `artistUrls[].url` | String | A public Artfinder artist URL. |
| `mediums` | Array of strings | Enter one or more medium names to filter artwork listings. This is ignored for artist profiles. |
| `sortBy` | Choice string | Choose the order for artwork listings. This is ignored for artist profiles and direct URL sources. |
| `minimumSoldArtworks` | Integer | Set the minimum sold-artwork count for artists. For Artist profiles, artists below this number are excluded. For Artwork listings, listings from those artists are excluded. Leave it empty to include all artists. |

The URL array fields contain objects with a required `url` string. Use only the field that matches the selected `discoveryMethod`; values for other sources are ignored.

**Successful default input**

This is the public input from a successful default-input run:

```json
{
  "resultType": "artworkListings",
  "sortBy": "relevance",
  "discoveryMethod": "categoryOrCollection",
  "searchTerm": "landscape",
  "categoryOrCollection": "https://www.artfinder.com/art/subject-landscapes-sea-sky/style-graphic-illustrative-and-typographic-graphic/product_category-painting/"
}
```

#### 🧾 Output

**Output link**

The `results` output opens the collected rows in the default dataset overview. Each dataset row has one of the two shapes below.

| Field | Type | What it does |
| --- | --- | --- |
| `results` | String | Link to the collected rows in the default dataset overview. |

**Artwork result**

An artwork row has these fields. Optional fields may be absent when the public page does not provide them.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | String | The constant value `artwork` for an artwork row. |
| `artwork` | Object | The public artwork listing and its marketplace details. |
| `artwork.title` | String | The artwork title. |
| `artwork.artworkUrl` | String | The public Artfinder page for the artwork. |
| `artwork.description` | String, optional | The artwork description published by the artist or marketplace. |
| `artwork.category` | String, optional | The public category used to describe the artwork. |
| `artwork.mediums` | Array of strings | The artistic mediums listed for the artwork. |
| `artwork.materials` | Array of strings, optional | The materials listed for the artwork. |
| `artwork.price` | Object, optional | The listed price of the artwork. |
| `artwork.price.amount` | Number | The numeric price amount. |
| `artwork.price.currency` | String | The currency used for the price. |
| `artwork.availability` | String, optional | The availability status shown for the artwork. |
| `artwork.dimensions` | Object, optional | The artwork dimensions and their unit. |
| `artwork.dimensions.width` | Number | The artwork width. |
| `artwork.dimensions.height` | Number | The artwork height. |
| `artwork.dimensions.depth` | Number, optional | The artwork depth, when published. |
| `artwork.dimensions.unit` | String | The unit used for the artwork dimensions. |
| `artwork.images` | Array of strings | The public image URLs for the artwork. |
| `artwork.framing` | Object, optional | The framing information published for the artwork. |
| `artwork.framing.status` | String, optional | The framing status shown by the source. |
| `artwork.framing.details` | String, optional | Additional framing details shown by the source. |
| `artist` | Object | The artist credited for the artwork. |
| `artist.name` | String | The public name of the artist. |
| `artist.profileUrl` | String, optional | The public Artfinder profile page for the artist. |

**Genuine artwork row**

This complete row came from a successful current-beta run for the `Istanbul` search term. It is not shortened.

```json
{
  "resultType": "artwork",
  "artwork": {
    "title": "Night Falls on İstanbul",
    "artworkUrl": "https://www.artfinder.com/product/night-falls-on-istanbul/",
    "description": "This original oil painting captures the vibrant energy of Istanbul after sunset. Inspired by the city’s unique atmosphere, the artwork presents a panoramic view of the Bosphorus illuminated by countless city lights reflected across the water. Created with expressive palette knife and brushwork, the painting combines deep blues with luminous accents of yellow, pink, turquoise, and white, creating a dynamic contrast between the calm water and the bustling urban landscape. The semi-abstract style invites the viewer to explore the city through emotion and memory rather than precise detail. This piece is designed to bring depth, movement, and sophistication to contemporary interiors. It is a celebration of Istanbul’s timeless beauty and the magical connection between the city and the sea.",
    "category": "Oil painting",
    "mediums": [
      "Oil painting"
    ],
    "materials": [
      "Medium: Oil on canvas. Support: Stretched on wooden stretcher bars. Frame:Presented in frame",
      "ready to hang."
    ],
    "price": {
      "currency": "GBP",
      "amount": 2434.75
    },
    "availability": "In stock",
    "dimensions": {
      "width": 100,
      "height": 50,
      "depth": 3,
      "unit": "cm"
    },
    "images": [
      "https://d3rf6j5nx5r04a.cloudfront.net/PaGoCdnASAoYswDnTlMw0QzrkCo=/product/9/8/77b9e4268d6f44b1adb27c44788979cf_opt.jpg",
      "https://d3rf6j5nx5r04a.cloudfront.net/qeGQpOWuJhKVPh4ogaqGJXYO6NI=/product/9/a/a0a455a5361e4e668d7e8da79447b2b7_opt.jpg",
      "https://d3rf6j5nx5r04a.cloudfront.net/_ow_Dkprs2yrRUoOfpMowY6aHb4=/product/6/0/502a121e549e4fcea463018fbe0e7580_opt.jpg",
      "https://d3rf6j5nx5r04a.cloudfront.net/OtW6vw86bHWbF6JB39EOwrYKrTs=/product/b/e/71923280885e4d0a8f2395d929906cec_opt.jpg",
      "https://d3rf6j5nx5r04a.cloudfront.net/eu6DTIlZq06Svu6Xqzk3tdJ_2sU=/product/9/a/f77f72ed539a4daf8c4a48e03b0c33e0_opt.jpg",
      "https://d3rf6j5nx5r04a.cloudfront.net/c3Y9Df54Zbw6PMSyaFwP3K6Wliw=/product/9/9/d72a5351fa1c4c5c9ef63a797d8b0146_opt.jpg"
    ],
    "framing": {
      "status": "Framed",
      "details": "Framed and ready to hang"
    }
  },
  "artist": {
    "name": "Oksana Esin Golgeli",
    "profileUrl": "https://www.artfinder.com/artist/esingallery/"
  }
}
```

**Artist result**

An artist row has these fields. Optional fields may be absent when the public profile does not provide them.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | String | The constant value `artist` for an artist row. |
| `artist` | Object | The public artist profile and its catalog details. |
| `artist.name` | String | The public name of the artist. |
| `artist.profileUrl` | String | The public Artfinder profile page for the artist. |
| `artist.country` | String, optional | The country listed on the artist profile. |
| `artist.followers` | Integer, optional | The number of followers shown on the artist profile. |
| `artist.catalogSize` | Integer, optional | The number of artworks listed in the artist catalog. |
| `artist.salesCount` | Integer, optional | The number of sales shown on the artist profile. |
| `artist.mediums` | Array of strings, optional | The artistic mediums listed on the artist profile. |
| `artist.priceSummary` | Object, optional | Average price summaries shown for the artist's artwork. |
| `artist.priceSummary.averageArtworkPrice` | Object, optional | The average listed artwork price for the artist. |
| `artist.priceSummary.averageArtworkPrice.amount` | Number | The numeric average price amount. |
| `artist.priceSummary.averageArtworkPrice.currency` | String | The currency used for the average price. |
| `artist.priceSummary.averageSoldArtworkPrice` | Object, optional | The average price of the artist's sold artworks. |
| `artist.priceSummary.averageSoldArtworkPrice.amount` | Number | The numeric average sold price amount. |
| `artist.priceSummary.averageSoldArtworkPrice.currency` | String | The currency used for the average sold price. |

**Genuine artist row**

This complete row came from a successful current-beta run for the public artist URL `https://www.artfinder.com/artist/alyse-radenovic/`. It is not shortened.

```json
{
  "resultType": "artist",
  "artist": {
    "name": "Alyse Radenovic",
    "profileUrl": "https://www.artfinder.com/artist/alyse-radenovic/",
    "country": "United States",
    "followers": 19,
    "catalogSize": 173,
    "salesCount": 8,
    "mediums": [
      "painting-acrylic"
    ],
    "priceSummary": {
      "averageArtworkPrice": {
        "amount": 600.5733939393934,
        "currency": "GBP"
      },
      "averageSoldArtworkPrice": {
        "amount": 637.3812499999999,
        "currency": "GBP"
      }
    }
  }
}
```

#### 💳 Pricing

Each successfully returned artwork listing uses one `artwork-listing` event. Each successfully returned artist profile uses one `artist-profile` event. The current tier rates and any account-specific pricing are shown on the Actor Pricing tab.

#### 🔌 Integrations

**Dataset and API**

The `results` output link opens the default Apify dataset overview. Inspect the rows there, export them, or use the dataset API for your workflow.

**Video guide**

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

#### ❓ FAQ

##### Can one run combine several search terms?

No. Choose one source for each run and enter one search term when you use the Search term source.

##### Can I collect artwork listings and artist profiles together?

No. Choose one Result type for a run. Run the Actor again with the other type when you need both shapes.

##### Can I submit a public Artfinder page?

Yes. Choose Artwork URLs or Artist URLs and submit the matching public Artfinder page for the selected result type.

##### Why is a field empty?

The public page may not publish that attribute. The Actor keeps source data as available and does not invent missing descriptions, prices, dimensions, or profile details.

##### How are duplicate source items handled?

The first eligible occurrence of a source item is saved. Later matches for the same item are ignored, so one row does not combine evidence from later matches.

##### Does the Actor read private Artfinder pages?

No. It reads public Artfinder pages only. Private, login-only, and otherwise non-public content is outside its scope.

##### How does pricing apply?

Pricing uses one event for each successfully returned artwork listing and one event for each successfully returned artist profile. See the Pricing tab for current rates.

### 📝 Changelog

**v0.0** (22-09-2026)

- Initial release.

### 🆘 Support

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

### 🔗 Related Actors

- [DeviantArt Email Scraper](https://apify.com/maximedupre/deviantart-scraper) - Collect public DeviantArt artwork and visible creator contact data alongside Artfinder records.
- [Artmajeur.com Artist & Artwork Scraper](https://apify.com/artsiom_k/artmajeur-scraper) - Compare artist profiles and artwork from Artmajeur.com.
- [SaatchiArt.com Artist & Artwork Scraper](https://apify.com/artsiom_k/saatchiart-scraper) - Compare public artist and artwork data from SaatchiArt.com.
- [Artsper.com Artist & Artwork Scraper](https://apify.com/artsiom_k/artsper-scraper) - Add public Artsper artist and artwork records to an art-market research workflow.
- [Artsy.net Artist, Artwork & Gallery Scraper](https://apify.com/artsiom_k/artsy-scraper) - Add Artsy artist, artwork, and gallery or dealer records for broader market research.

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

# Actor input Schema

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

Choose whether the run returns artwork listings or artist profiles.

## `minimumSoldArtworks` (type: `integer`):

Filter by the artist's sold-artwork count. For Artist profiles, exclude artists below this number. For Artwork listings, exclude listings from those artists. Leave empty to include all artists.

## `mediums` (type: `array`):

Enter one or more medium names to filter artwork listings. This is ignored for artist profiles.

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

Choose the order for artwork listings. This is ignored for artist profiles and direct URL sources.

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

Choose one public source for the selected result type. Search and browse sources return that row type. URL sources read the public Artfinder pages you submit.

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

Enter one Artfinder search term. Use it with the Search term source.

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

Enter one Artfinder category or collection. Use it with the Category or collection source.

## `artworkUrls` (type: `array`):

Enter one or more public Artfinder artwork URLs. Use them with the Artwork URLs source.

## `artistUrls` (type: `array`):

Enter one or more public Artfinder artist URLs. Use them with the Artist URLs source.

## Actor input object example

```json
{
  "resultType": "artworkListings",
  "sortBy": "relevance",
  "discoveryMethod": "categoryOrCollection",
  "searchTerm": "landscape",
  "categoryOrCollection": "https://www.artfinder.com/art/subject-landscapes-sea-sky/style-graphic-illustrative-and-typographic-graphic/product_category-painting/"
}
```

# Actor output Schema

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

Open the collected Artfinder results in the default dataset.

# 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 = {
    "searchTerm": "landscape",
    "categoryOrCollection": "https://www.artfinder.com/art/subject-landscapes-sea-sky/style-graphic-illustrative-and-typographic-graphic/product_category-painting/"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/artfinder").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 = {
    "searchTerm": "landscape",
    "categoryOrCollection": "https://www.artfinder.com/art/subject-landscapes-sea-sky/style-graphic-illustrative-and-typographic-graphic/product_category-painting/",
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/artfinder").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 '{
  "searchTerm": "landscape",
  "categoryOrCollection": "https://www.artfinder.com/art/subject-landscapes-sea-sky/style-graphic-illustrative-and-typographic-graphic/product_category-painting/"
}' |
apify call maximedupre/artfinder --silent --output-dataset

```

## MCP server setup

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

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/Xzzj651ApAQvXeksD/builds/xTTbVQR4NdT5UVamR/openapi.json
