# DeviantArt Deviations & Artist Scraper (`scrapers_lat/deviantart-scraper`) Actor

Scrape DeviantArt deviations by keyword, tag, artist or URL: title, artist, image, favourites, views, tags, category, description, mature flag and download availability, plus artist watchers and total deviation count. For art discovery, trend research and creative lead generation.

- **URL**: https://apify.com/scrapers\_lat/deviantart-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Social media, E-commerce
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.80 / 1,000 deviations

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

[![DeviantArt Deviations & Artist Scraper](https://scrapers.lat/banners/deviantart-scraper.png)](https://console.apify.com/actors/T8ktx1TbxELrfOOOR/input)

## DeviantArt Deviations & Artist Scraper

Here is one real result, with every field the actor returns (the signed `imageUrl` is trimmed here for readability; the actor returns the full URL):

```json
{
  "imageUrl": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/37b45cc0-364f-497c-9a38-fb1c5ba4cda0/dmlqoct-af73763d-3923-4282-86cb-6281e0e9e97e.png/v1/fill/w_1920,h_1075,q_80,strp/castle_fantasy_landscape_adoptable_superhd_hq_8k_by_dissunder_dmlqoct-fullview.jpg?token=...",
  "title": "Castle Fantasy Landscape Adoptable SuperHD HQ 8K",
  "url": "https://www.deviantart.com/dissunder/art/Castle-Fantasy-Landscape-Adoptable-SuperHD-HQ-8K-1366772429",
  "deviationId": "1366772429",
  "mediaType": "image",
  "artistUsername": "Dissunder",
  "artistName": "Dissunder",
  "artistUrl": "https://www.deviantart.com/Dissunder",
  "artistType": "core_max",
  "artistLevel": "Hobbyist",
  "artistSpeciality": "Digital Art",
  "artistWatchers": 17238,
  "artistDeviationsCount": null,
  "publishedDate": "2026-08-10T20:06:06.000Z",
  "favourites": 1,
  "comments": 0,
  "views": 780,
  "downloads": 0,
  "isMature": false,
  "isAiGenerated": true,
  "isDownloadable": false,
  "downloadPriceUsd": null,
  "license": "none",
  "fileType": "png",
  "shortUrl": "http://fav.me/dmlqoct",
  "isDailyDeviation": false,
  "searchInput": "fantasy landscape",
  "description": "⭐️ \n- I can help create your character as well. Commissions Open. Write me a note!\n- All rights for buyer\n- To purchase, click \"adopt\" below the submission or Write in Comments...",
  "tags": ["adoptable", "castle", "fantasy", "fantasylandscape", "landscape", "medievalfantasy", "fantasylandscapeart", "superhd"],
  "width": 7560,
  "height": 4232,
  "fileSizeBytes": 61291937,
  "hasWatermark": true,
  "aiSummary": "This digital artwork features a vibrant and enchanting castle set within a fantastical landscape, characterized by its medieval fantasy style. The mood is whimsical and inviting, perfect for those who appreciate high-quality, immersive fantasy art.",
  "aiTags": ["castle", "fantasy", "landscape", "medieval", "adoptable", "digitalart", "superhd", "hq", "8k", "fantasyart", "artcommission", "fantasylandscape"],
  "observedAt": "2026-08-14T07:21:33.926Z",
  "error": null
}
```

The most complete DeviantArt scraper available. It returns every field a deviation exposes (image, title, stats, license, file type, maturity and AI-generated flags), enriches each artwork with description, full tag list, image dimensions and download price, adds artist details (watchers, level, speciality), and gives you four input modes plus opt-in AI enrichment to target exactly the deviations you need.

**📥 [Input](https://apify.com/scrapers_lat/deviantart-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/deviantart-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/deviantart-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/deviantart-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-DeviantArt-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor collects deviations (artworks) from DeviantArt by search keyword, tag, direct deviation URL, or artist, and writes one normalized record per deviation to the run's dataset. Each record carries the image URL, title, deviation URL and ID, media type, engagement stats (favourites, comments, views, downloads), maturity and AI-generated flags, license, file type, and the artist's username, level, speciality, and watcher count.

With `withDetails` on (the default), each deviation is opened to add its full description, complete tag list, image dimensions, file size, watermark flag, and download price when it is for sale. Missing source values are returned as `null`, never invented. Optional paid add-ons can attach an AI artwork summary and AI discovery tags.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns 10 deviations matching "fantasy landscape" with full details.

```json
{
  "searchQueries": ["fantasy landscape"],
  "maxDeviations": 10,
  "withDetails": true
}
```

Provide at least one of `searchQueries`, `tags`, `deviationUrls`, or `artistUrls`. Turn off `withDetails` for a faster, lighter run.

### Input reference

| Field | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| `searchQueries` | string\[] | no | `["fantasy landscape"]` | Keywords or topics to search on DeviantArt. One run can process several searches. | `["dragon art"]` |
| `tags` | string\[] | no | (empty) | DeviantArt tags to browse (no `#`). | `["digitalart"]` |
| `deviationUrls` | string\[] | no | (empty) | Direct links to individual deviations to scrape. | `["https://www.deviantart.com/user/art/Title-123"]` |
| `artistUrls` | string\[] | no | (empty) | Artist usernames or profile URLs. Returns each artist's gallery deviations plus watchers and deviation count. | `["Dissunder"]` |
| `maxDeviations` | integer | no | `10` | Maximum number of deviations to collect across all inputs. | `50` |
| `withDetails` | boolean | no | `true` | Open each deviation to add description, full tags, dimensions, and download price. | `false` |
| `withSummary` | boolean | no | `false` | AI add-on. Summarize each artwork (subject, style, mood). Requires details and a real description. Billed per successful summary. Disabled on free plans. | `true` |
| `withTags` | boolean | no | `false` | AI add-on. Generate descriptive discovery tags for each artwork. Requires details and a real description. Billed per successful tagging. Disabled on free plans. | `true` |

### Output reference

One dataset item per deviation. Types: `string`, `integer`, `number`, `boolean`, `string[]`, or `null` when the source value is absent.

| Field | Type | Description |
|---|---|---|
| `imageUrl` | string | Direct (signed) image URL for the deviation. |
| `title` | string | Deviation title. |
| `url` | string | Canonical deviation page URL. |
| `deviationId` | string | DeviantArt deviation ID (unique per artwork). |
| `mediaType` | string | Media type, for example `image`. |
| `artistUsername` | string | Artist's username. |
| `artistName` | string | Artist's display name. |
| `artistUrl` | string | Artist's profile URL. |
| `artistType` | string | Account type, for example `core_max`. |
| `artistLevel` | string | Artist level, for example `Hobbyist`. |
| `artistSpeciality` | string | Artist's speciality, for example `Digital Art`. |
| `artistWatchers` | integer | Number of watchers on the artist. |
| `artistDeviationsCount` | integer | Artist's total deviation count when available, else `null`. |
| `publishedDate` | string | ISO 8601 publish timestamp. |
| `favourites` | integer | Number of favourites. |
| `comments` | integer | Number of comments. |
| `views` | integer | Number of views. |
| `downloads` | integer | Number of downloads. |
| `isMature` | boolean | `true` when flagged mature. |
| `isAiGenerated` | boolean | `true` when flagged AI-generated. |
| `isDownloadable` | boolean | `true` when the file can be downloaded. |
| `downloadPriceUsd` | number | Download price in USD when for sale, else `null`. |
| `license` | string | License label, for example `none`. |
| `fileType` | string | File type, for example `png`. |
| `shortUrl` | string | Short fav.me URL. |
| `isDailyDeviation` | boolean | `true` if it was a Daily Deviation. |
| `searchInput` | string | The input value (keyword/tag/artist) that produced this record. |
| `description` | string | Full deviation description (with details on). |
| `tags` | string\[] | Full tag list (with details on). |
| `width` | integer | Image width in pixels (with details on). |
| `height` | integer | Image height in pixels (with details on). |
| `fileSizeBytes` | integer | File size in bytes (with details on). |
| `hasWatermark` | boolean | `true` when the preview is watermarked. |
| `aiSummary` | string | AI artwork summary (opt-in), else `null`. |
| `aiTags` | string\[] | AI discovery tags (opt-in), else `null`. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | `null` on success. On a failed run, a single item with a populated `error` field is written instead. |

### Example output record

Real record from a live run (input `{"searchQueries": ["fantasy landscape"], "maxDeviations": 5, "withDetails": true, "withSummary": true, "withTags": true}`), with `imageUrl` and `description` trimmed for brevity:

```json
{
  "title": "Castle Fantasy Landscape Adoptable SuperHD HQ 8K",
  "url": "https://www.deviantart.com/dissunder/art/Castle-Fantasy-Landscape-Adoptable-SuperHD-HQ-8K-1366772429",
  "deviationId": "1366772429",
  "mediaType": "image",
  "artistUsername": "Dissunder",
  "artistLevel": "Hobbyist",
  "artistSpeciality": "Digital Art",
  "artistWatchers": 17238,
  "publishedDate": "2026-08-10T20:06:06.000Z",
  "favourites": 1,
  "comments": 0,
  "views": 780,
  "isMature": false,
  "isAiGenerated": true,
  "isDownloadable": false,
  "downloadPriceUsd": null,
  "license": "none",
  "fileType": "png",
  "tags": ["adoptable", "castle", "fantasy", "fantasylandscape", "landscape", "medievalfantasy", "superhd"],
  "width": 7560,
  "height": 4232,
  "fileSizeBytes": 61291937,
  "hasWatermark": true,
  "aiSummary": "This digital artwork features a vibrant and enchanting castle set within a fantastical landscape, characterized by its medieval fantasy style.",
  "aiTags": ["castle", "fantasy", "landscape", "medieval", "adoptable", "digitalart", "8k"],
  "observedAt": "2026-08-14T07:21:33.926Z",
  "error": null
}
```

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~deviantart-scraper/run-sync-get-dataset-items?token=%3CTOKEN%3E" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["fantasy landscape"],"maxDeviations":10,"withDetails":true}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~deviantart-scraper/runs?token=%3CTOKEN%3E" \
  -H "Content-Type: application/json" \
  -d '{"artistUrls":["Dissunder"],"maxDeviations":50}'
```

Apify CLI:

```bash
apify call scrapers_lat/deviantart-scraper \
  --input '{"tags":["dragon"],"maxDeviations":25}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/%3CDATASET_ID%3E/items?token=%3CTOKEN%3E&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/%3CDATASET_ID%3E/items?token=%3CTOKEN%3E&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/%3CDATASET_ID%3E/items?token=%3CTOKEN%3E&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets. `clean=true` drops empty and internal fields.

### Billing and limits

- **Pay per result.** You are charged per deviation record returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/deviantart-scraper/pricing) for the current per-result price.
- **Details and AI add-ons are billed separately.** Fetching deviation details, AI summary, and AI tags each charge only when they succeed and only when enabled.
- **No charge on failure.** If a run errors, the actor writes a single item with a populated `error` field and does not charge for it. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable results.
- **Free Apify plans** are capped at 10 deviations per run. AI add-ons are disabled on free plans. Upgrade for higher limits.

### FAQ and troubleshooting

**Which input should I use?**
Use `searchQueries` for keyword discovery, `tags` to browse a tag, `deviationUrls` for specific artworks, or `artistUrls` to pull an artist's gallery. You can combine them; results are capped by `maxDeviations`.

**Why is `description` or `tags` empty?**
Those come from the deviation detail page. Turn on `withDetails` (the default) to populate description, full tags, dimensions, and download price.

**Can I tell which artworks are AI-generated?**
Yes. `isAiGenerated` reflects DeviantArt's AI-generated flag on the deviation.

**Why is `downloadPriceUsd` null?**
The deviation is not for paid download, or no price is published. Missing source values are returned as `null`, never invented.

**Is this an official DeviantArt tool?**
No. This actor is independent and has no affiliation with DeviantArt. It reads only data that is publicly available. Use it in accordance with the source's terms and respect artists' rights.

### Related scrapers

- [Behance Scraper](https://apify.com/scrapers_lat/behance-scraper): Projects and creatives from Behance.
- [Dribbble Scraper](https://apify.com/scrapers_lat/dribbble-scraper): Shots and designers from Dribbble.
- [Pinterest Scraper](https://apify.com/scrapers_lat/pinterest-scraper): Pins and boards from Pinterest.
- [YouTube Scraper](https://apify.com/scrapers_lat/youtube-scraper): Videos, channels, and metadata.
- [Instagram Scraper](https://apify.com/scrapers_lat/instagram-scraper): Posts, profiles, and media.
- [SoundCloud Scraper](https://apify.com/scrapers_lat/soundcloud-scraper): Tracks and artists from SoundCloud.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with DeviantArt. Accesses only publicly available data. Use in accordance with the source's terms of service and respect artists' rights.

# Actor input Schema

## `maxDeviations` (type: `integer`):

Maximum number of deviations (artworks) to collect across all inputs. Optional.

## `withDetails` (type: `boolean`):

When enabled, opens each deviation to add its description, full tag list, image dimensions and download price. Slower but richer.

## `searchQueries` (type: `array`):

Keywords or topics to search on DeviantArt, for example 'fantasy landscape'. One run can process several searches.

## `tags` (type: `array`):

DeviantArt tags to browse, for example 'dragon' or 'digitalart'. Do not include the # symbol.

## `deviationUrls` (type: `array`):

Direct links to individual deviations (artworks) to scrape.

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

Artist usernames or profile URLs. The scraper returns each artist's gallery deviations plus their watchers and deviation count.

## `withSummary` (type: `boolean`):

Optional AI add-on, off by default. Summarize each artwork (subject, style, mood) from its title and description. Requires details to be on and a real description. Billed per successful summary. Disabled on free plans.

## `withTags` (type: `boolean`):

Optional AI add-on, off by default. Generate descriptive discovery tags for each artwork from its title and description. Requires details and a real description. Billed per successful tagging. Disabled on free plans.

## Actor input object example

```json
{
  "maxDeviations": 10,
  "withDetails": true,
  "searchQueries": [
    "fantasy landscape"
  ],
  "withSummary": false,
  "withTags": false
}
```

# 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 = {
    "maxDeviations": 10,
    "searchQueries": [
        "fantasy landscape"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/deviantart-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 = {
    "maxDeviations": 10,
    "searchQueries": ["fantasy landscape"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/deviantart-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 '{
  "maxDeviations": 10,
  "searchQueries": [
    "fantasy landscape"
  ]
}' |
apify call scrapers_lat/deviantart-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/deviantart-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/T8ktx1TbxELrfOOOR/builds/qhVNkFLq0gEMFvUdg/openapi.json
