# Pixiv Artwork Scraper (`hgservices/pixiv-artwork-scraper`) Actor

Scrape all public artworks from Pixiv — no login required. Provide artwork URLs or artwork IDs and get titles, tags, engagement stats (views, likes, bookmarks), author info, series data, and downloadable images. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/hgservices/pixiv-artwork-scraper.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 scraped artworks

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

### What does Pixiv Profile Scraper do?

**Pixiv Profile Scraper** extracts all public artworks from [Pixiv](https://www.pixiv.net/) artist profiles — **no Pixiv account or login required**. Give it one or more profile URLs or user IDs, and get clean, structured data: titles, descriptions, tags, author details, view/like/bookmark counts, image URLs, series info, and more.

The Actor **downloads images and saves them** to the run's key-value store. You get working URLs that you can use anywhere — in spreadsheets, dashboards, or downstream pipelines — with no extra authentication.

Run it on a schedule, call it via the Apify API, pipe results into integrations (Make, Zapier, Google Sheets, webhooks), and download the dataset as **JSON, CSV, Excel, HTML, or XML**.

### Why use Pixiv Profile Scraper?

- **Artist portfolio archiving** — pull an artist's complete public works list with full metadata in one run.
- **Creator analytics** — track view, like, and bookmark counts across an artist's portfolio over time.
- **Dataset building** — collect images, dimensions, and tags for machine-learning, recommendation, or market-analysis projects (always respect Pixiv's terms and artists' rights).
- **Content pipelines** — feed artist portfolios into your own tools via the Apify API.

### How to scrape Pixiv artist profiles

1. Open the **Input** tab.
2. Add one or more **Profile URLs** (e.g. `https://www.pixiv.net/users/19897777`) or enter numeric **User IDs**.
3. Choose whether to **Download original images** (enabled by default).
4. Click **Start** and download your data from the **Dataset** tab when the run finishes.

That's it — no coding, no Pixiv account, no proxy setup required.

### Input

| Field | Description |
| --- | --- |
| **Profile URLs** | Full Pixiv profile URLs to scrape (e.g. `https://www.pixiv.net/users/19897777`). You can add multiple profiles in one run. |
| **User IDs** | Numeric Pixiv user IDs (e.g. `19897777`). Same result as providing the profile URL. |
| **Download original images** | Download full-resolution images and save them to the key-value store (default: on). When off, original image URLs still appear in the output but point to Pixiv's CDN. |

#### Example input

```json
{
    "profileUrls": [
        { "url": "https://www.pixiv.net/users/19897777" }
    ],
    "downloadOriginals": true
}
```

Or using numeric IDs:

```json
{
    "userIds": ["19897777", "12345678"]
}
```

### Output

One dataset item per artwork. Simplified example:

```json
{
    "id": "123456789",
    "url": "https://www.pixiv.net/artworks/148882180",
    "title": "山姥切国広と難聴審神者",
    "description": "※顔出し審神者います。...",
    "type": "manga",
    "authorId": "19897777",
    "authorName": "にかやま はこ",
    "authorUrl": "https://www.pixiv.net/users/19897777",
    "tags": ["漫画", "刀剣乱舞", "女審神者"],
    "width": 3496,
    "height": 4961,
    "pageCount": 3,
    "viewCount": 24058,
    "likeCount": 568,
    "bookmarkCount": 602,
    "commentCount": 38,
    "isAiGenerated": false,
    "isOriginal": false,
    "createdAt": "2024-10-18T14:24:00+00:00",
    "uploadedAt": "2024-10-18T14:24:00+00:00",
    "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/.../records/img_123456789_thumb.jpg?signature=...",
    "originalImageUrl": "https://api.apify.com/v2/key-value-stores/.../records/img_123456789_p0.png?signature=...",
    "imageUrls": [
        "https://api.apify.com/v2/key-value-stores/.../records/img_123456789_p0.png?signature=...",
        "https://api.apify.com/v2/key-value-stores/.../records/img_123456789_p1.png?signature=...",
        "https://api.apify.com/v2/key-value-stores/.../records/img_123456789_p2.png?signature=..."
    ],
    "seriesId": "222972",
    "seriesTitle": "刀剣男士と難聴審神者の日常",
    "seriesOrder": 36,
    "source": "user"
}
```

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel** from the Dataset tab, or consume it via the Apify API.

#### Data fields

| Field | Description |
| --- | --- |
| `id` | Pixiv artwork ID |
| `url` | Link to the artwork page |
| `title` | Artwork title (Japanese or original language) |
| `description` | Artist's caption as plain text |
| `type` | `illust`, `manga`, or `ugoira` (animated) |
| `authorId` / `authorName` / `authorUrl` | Artist identity and profile link |
| `tags` | All tags attached to the artwork |
| `width` / `height` | Image dimensions in pixels |
| `pageCount` | Number of pages (multi-image works) |
| `viewCount` / `likeCount` / `bookmarkCount` / `commentCount` | Engagement counters |
| `isAiGenerated` | Whether the artist flagged the work as AI-generated |
| `isOriginal` | Whether the work is marked as an original creation (not fan art) |
| `xRestrict` | Content rating flag (`0` = all ages) |
| `createdAt` / `uploadedAt` | Creation and upload timestamps (ISO 8601) |
| `thumbnailUrl` | 540 px preview — always a working download URL |
| `originalImageUrl` | Full-resolution image (first page). When "Download original images" is on, this is a direct download URL. When off, this is the raw Pixiv CDN URL (may require authentication to access). |
| `imageUrls` | Full-resolution URL for every page. Same behaviour as `originalImageUrl`. |
| `seriesId` / `seriesTitle` / `seriesOrder` | Series membership, when the work belongs to one |
| `source` | Always `user` for this Actor |

### How much does it cost to scrape Pixiv profiles?

Runs are fast and cheap.

- **With original images** (default): downloading full-resolution images takes longer and uses more storage. A run with 100 artworks may take a few minutes depending on page counts.
- **Without original images**: metadata-only runs with thumbnails are faster and cheaper. Scraping 100 artworks with thumbnails takes under a minute and fits within the Apify free plan.

Your actual cost depends on the number of artworks, image downloads, and your Apify plan's pricing. You pay only for what you run.

### Tips for best results

- **Use thumbnail-only mode for most jobs.** Turn off "Download original images" if you only need metadata and small previews. Original-resolution downloads are much slower and use more storage.
- **Scrape multiple profiles in one run.** Add several profile URLs or user IDs — the Actor handles them all and de-duplicates by artwork ID.

### FAQ, disclaimers, and support

**Is it legal to scrape Pixiv?**
This Actor accesses only publicly available data that Pixiv serves to anonymous visitors. Web scraping of public data is generally allowed, but you are responsible for complying with [Pixiv's Terms of Service](https://policies.pixiv.net/) and applicable laws. Do not republish artwork without the artist's permission — images are copyrighted works.

**Do I need a Pixiv account?**
No. The Actor works fully without login. Note that age-restricted (R-18) content is only available to logged-in Pixiv users and is therefore **not** included in the results.

**Why did some artworks return nothing?**
Deleted, private, or login-restricted artworks cannot be retrieved anonymously and are skipped with a warning in the run log.

**Do I need to configure a proxy?**
No. The Actor manages connectivity automatically. No proxy setup is required on your part.

**Found a bug or need a custom Pixiv solution?**
Please open an issue on the **Issues** tab of this Actor — feedback and feature requests are welcome, and custom solutions are available on request.

# Actor input Schema

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

Full Pixiv artwork URLs to scrape (e.g. https://www.pixiv.net/artworks/148882180). The Actor extracts metadata, stats, and images for each artwork.

## `artworkIds` (type: `array`):

Pixiv artwork (illustration) IDs to scrape directly (e.g. "148882180"). Same as visiting https://www.pixiv.net/artworks/{id}.

## `downloadOriginals` (type: `boolean`):

Download full-resolution original images and store them in the run's key-value store. Uses more storage and time than metadata alone. When disabled, original image URLs still appear in the output but point to Pixiv's CDN (requires a Referer header to access). Thumbnails are always downloaded regardless of this setting.

## Actor input object example

```json
{
  "artworkUrls": [
    {
      "url": "https://www.pixiv.net/artworks/148882180"
    }
  ],
  "downloadOriginals": true
}
```

# Actor output Schema

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

Structured artwork records with titles, tags, stats and image URLs.

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

Downloaded thumbnail and original artwork images.

# 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 = {
    "artworkUrls": [
        {
            "url": "https://www.pixiv.net/artworks/148882180"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/pixiv-artwork-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 = { "artworkUrls": [{ "url": "https://www.pixiv.net/artworks/148882180" }] }

# Run the Actor and wait for it to finish
run = client.actor("hgservices/pixiv-artwork-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 '{
  "artworkUrls": [
    {
      "url": "https://www.pixiv.net/artworks/148882180"
    }
  ]
}' |
apify call hgservices/pixiv-artwork-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hgservices/pixiv-artwork-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/xHjr9ovi7iIIXhUo4/builds/NTE3vy7LOBhS9N85y/openapi.json
