# Diskunion Scraper – Japanese Vinyl, CDs & City Pop (`datalab-jp/diskunion-scraper`) Actor

Scrape Japanese vinyl and CDs from Diskunion, Japan's largest specialist record store. Get JPY prices, vinyl condition grades (盤質 S/A/B+/B), formats, catalog numbers and stock for city pop, Japanese jazz and rare pressings. Search by artist in English or Japanese.

- **URL**: https://apify.com/datalab-jp/diskunion-scraper.md
- **Developed by:** [Task Data](https://apify.com/datalab-jp) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Diskunion Scraper – Japanese Vinyl, CDs & City Pop Records

Extract **release titles, prices in JPY, vinyl condition grades, formats, catalog numbers, labels and stock status** from [Diskunion](https://diskunion.net/) — Japan's largest specialist record store chain, and the main domestic source for city pop, Japanese jazz, and rare Japanese pressings. Built for **international vinyl collectors, record dealers, Discogs sellers, price researchers, and AI agents** that need structured Japanese record-market data without writing a scraper or logging in. No coding required: enter an artist name, run, and get clean JSON.

A key feature is the **used catalogue with Diskunion's 盤質 condition grade** (S / A / B+ / B). You get per-copy second-hand pricing graded by the shop's own standards — the number that actually decides whether a Japanese pressing is worth importing.

Two modes are supported: look up **one artist's catalogue** by name, or walk a **whole genre's newest used arrivals** — the second is built for scheduled monitoring, so an agent can poll for fresh city pop or Japanese jazz stock as it lands.

### What data can you extract?

| Field | Description |
|-------|-------------|
| `releaseId` | Diskunion's catalogue ID for the release. Shared between the new and used catalogues, so the two can be joined |
| `stockId` | ID of the individual second-hand copy (used catalogue only) |
| `catalog` | `used` or `new` — which catalogue the row came from |
| `title` | Release title |
| `artist` | Artist as registered on Diskunion, usually carrying both spellings (`MARIYA TAKEUCHI 竹内まりや`) |
| `price` | Price in Japanese yen (JPY), tax included |
| `stockStatus` | Raw Japanese stock label, e.g. `新品在庫あり`, `売切`, `廃盤` |
| `conditionGrade` | Diskunion's 盤質 vinyl grade: `S`, `A`, `B+`, `B` … (used catalogue only) |
| `label` | Record label / distributor |
| `format` | `LP(レコード)`, `7"(レコード)`, `CD`, `CASSETTE TAPE`, `DVD`, combinations like `CD+DVD` |
| `catalogNumber` | Label catalog number, for matching the exact pressing on Discogs |
| `country` | Pressing country code, e.g. `JPN` |
| `releaseDate` | Release date (ISO 8601) |
| `category` | Diskunion shop category, e.g. `日本のロック` |
| `imageUrl` | Jacket artwork URL |
| `url` | Direct link to the Diskunion product page |

### Why scrape Diskunion?

- **Import arbitrage on Japanese pressings** — city pop and Japanese jazz originals sell on export-facing storefronts at a large markup over Japanese domestic listings. Diskunion is where the domestic price is set.
- **Condition-aware price research** — `conditionGrade` plus `price` gives you a graded price curve per release, instead of a single undifferentiated "used" number.
- **Discogs cross-referencing** — `catalogNumber` and `country` identify the exact pressing, so rows can be matched to a Discogs release and compared against its marketplace price.
- **Back-catalogue and reissue tracking** — monitor which titles are in stock, sold out (`売切`) or out of print (`廃盤`) across an artist's discography.
- **New-arrival monitoring** — `genre-new-arrivals` mode returns a genre's newest used listings first, so a scheduled run can surface fresh stock (with grade and price) before it sells. Combine it with `inStockOnly` to see only what is still buyable.
- **AI agents / RAG** — feed structured Japanese record-market data into an LLM workflow. This Actor is discoverable and callable through the [Apify MCP server](https://mcp.apify.com/), so a Claude, Cursor or ChatGPT agent can request Japanese vinyl pricing on demand.

### How to use it (no coding)

1. Click **Try for free / Start**.
2. Pick a **Mode**:
   - **Artist catalogue** — enter an **Artist name**. Romanized English works as well as Japanese (`Mariya Takeuchi` and `竹内まりや` both resolve to the same artist).
   - **Genre new arrivals** — pick a **Genre** instead; the newest used listings come back first.
3. Choose a **Catalogue** (artist mode only): `Used only` for resale research, `New only`, or `Both`.
4. Tick **In-stock only** to drop sold-out, out-of-print and out-of-stock rows.
5. Optionally set **Max items** to cap your spend.
6. Click **Start** and download the results as JSON, CSV, or Excel — or pull them via the API (below).

### Input example

One artist's second-hand catalogue:

```json
{
  "mode": "artist",
  "searchKeyword": "Tatsuro Yamashita",
  "catalog": "used",
  "maxItems": 100
}
```

Newest used arrivals across a genre, buyable stock only — the shape to run on a schedule:

```json
{
  "mode": "genre-new-arrivals",
  "genre": "showakayou",
  "inStockOnly": true,
  "maxItems": 100
}
```

All fields are optional — running with no input uses sensible defaults (artist `Mariya Takeuchi`, both catalogues, 100 items).

### Output example

A used-catalogue row, with the vinyl grade:

```json
{
  "releaseId": "1008607313",
  "stockId": "22U0887313077",
  "catalog": "used",
  "title": "SPACY(LP)",
  "artist": "TATSURO YAMASHITA 山下達郎",
  "price": 3850,
  "currency": "JPY",
  "stockStatus": "新品在庫なし",
  "conditionGrade": "B+",
  "label": "ソニー・ミュージック・エンターテイメント",
  "country": "JPN",
  "format": "LP(レコード)",
  "catalogNumber": "BVJL94",
  "releaseDate": "2023-08-02",
  "category": "日本のロック",
  "imageUrl": "https://st.diskunion.net/images/jacket/1008607313.webp",
  "url": "https://diskunion.net/used/ct/jp/udetail/1008607313",
  "query": "Tatsuro Yamashita",
  "scrapedAt": "2026-08-09T02:32:40.901Z"
}
```

Field notes:

- `conditionGrade` — Diskunion's own 盤質 scale, from `S` (best) down through `A`, `B+`, `B`. Present only when `catalog` is `used`; `null` on new-catalogue rows.
- `stockStatus` — the shop's live label. `新品在庫あり` (new, in stock), `新品在庫なし` (new, out of stock), `新品在庫取寄せ` (backorder), `取引先新品在庫あり` (supplier stock), `売切` (sold out), `廃盤` (out of print).
- `releaseId` vs `stockId` — `releaseId` identifies the release and is shared across both catalogues; `stockId` identifies one physical second-hand copy, so several used rows can share a `releaseId` at different grades and prices.
- `label`, `format`, `catalogNumber`, `country` and `releaseDate` come from one metadata line and are `null` together on the minority of listings where Diskunion omits it.
- `stockStatus` values `売切`, `廃盤` and `新品在庫なし` mean the copy can no longer be ordered. They are kept by default because they still carry price signal; set `inStockOnly` to true to drop them.

### How much does it cost?

This Actor uses **pay-per-event** pricing: a small charge when a run starts, plus a per-result charge for each release returned. You only pay for the data you actually receive, so a 100-item run costs about the price of 100 results. Use `maxItems` to cap your spend.

Rows filtered out by `inStockOnly` are never returned and never billed. Note that most second-hand stock on Diskunion is already sold, so an in-stock run reads more pages per returned row — the crawl takes longer, but you are not charged for the rows that were dropped.

### Integrations: API, MCP, and AI agents

This Actor is **read-only**: it only reads publicly available catalogue pages and performs no login, purchase, or write actions — safe for autonomous agents to call.

#### API (curl)

```bash
curl -X POST "https://api.apify.com/v2/acts/datalab-jp~diskunion-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "genre-new-arrivals", "genre": "jp", "inStockOnly": true, "maxItems": 50}'
```

> Synchronous runs time out after 300 seconds. For large scrapes, use the standard [run endpoint](https://docs.apify.com/api/v2/act-runs-post) and fetch the dataset afterwards.

#### Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datalab-jp/diskunion-scraper").call(run_input={
    "searchKeyword": "Mariya Takeuchi",
    "catalog": "used",
    "maxItems": 50,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

#### JavaScript (apify-client)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('datalab-jp/diskunion-scraper').call({
    searchKeyword: 'Mariya Takeuchi',
    catalog: 'used',
    maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### MCP / AI agents

This Actor is available through the [Apify MCP server](https://mcp.apify.com/). AI agents (Claude, and any MCP-compatible client) can discover it with `search-actors`, inspect its inputs with `fetch-actor-details`, and run it with `call-actor` — no manual setup on your side. It is read-only, so it is safe for autonomous agents and RAG pipelines to call directly.

### Related Actors

Part of a family of **Japanese second-hand & collectibles market** scrapers with consistent output shapes, so you can combine them for cross-marketplace research:

- **Yahoo! Auctions Sold Scraper** — sold-price history from Japan's largest auction site
- **Mercari Japan Scraper** — listings and sold comps from Japan's largest C2C marketplace
- **Japan Flea Market Scraper** — Rakuma & Yahoo! Flea Market listings
- **Suruga-ya Scraper** — used hobby goods, figures, and collectibles
- **CardRush TCG Price Scraper** — trading card prices across 9 card games
- **Melonbooks Scraper** — doujin goods and otaku merchandise

### FAQ

**How do I monitor new arrivals instead of searching?**
Set `mode` to `genre-new-arrivals` and pick a `genre` — the feed returns that genre's newest second-hand listings first, so a scheduled run sees fresh stock as it lands. Add `inStockOnly: true` to ignore copies that are already gone. This mode reads the used storefront only, so `catalog`, `searchKeyword` and `maxArtists` do not apply.

**Which genres can I monitor?**
Twenty feeds are available, including `jp` (Japanese music — city pop, J-pop, Japanese rock), `showakayou` (Showa kayokyoku), `heiseijpop`, `jazz`, `rock`, `metal`, `progre`, `punk`, `indiealt`, `clubh`, `clubt`, `black`, `reggae`, `latin`, `classic`, `avant`, `anisong`, `gamemusic`, `movie` and `bestalbum`. For city pop, `jp` and `showakayou` are the two worth watching.

**Can I search by album title instead of artist?**
No. Diskunion's search matches artist records, so pass a performer or band name in `searchKeyword`. An album title on its own usually returns nothing. Once an artist is matched, every release in their catalogue is returned, so you can filter by `title` on your side.

**Do English artist names work?**
Yes. Diskunion stores the romanized and Japanese spelling in one artist record, so `Mariya Takeuchi` and `竹内まりや` both resolve to `MARIYA TAKEUCHI 竹内まりや`. This is what makes the store usable for buyers who do not read Japanese.

**What is the 盤質 condition grade?**
It is Diskunion's in-house grading of the physical record, running from `S` (best) down through `A`, `B+`, `B`. Japanese shops grade conservatively, which is one reason overseas buyers trust Japanese used stock. It appears in `conditionGrade` on used-catalogue rows.

**Why does the Actor use a Japan residential proxy by default?**
Diskunion is a Japan-only storefront and rate-limits repeated requests from a single IP — bursts start timing out and recover after about a minute. Japanese residential addresses give the most reliable results. You can override `proxyConfiguration` with datacenter proxies to cut cost, but expect timeouts on longer runs.

**Why do runs take a while?**
The Actor deliberately crawls with a single concurrent request because of the rate limiting described above, and Diskunion's own listing pages can take over 20 seconds to render. Use `maxItems` to keep runs short.

**Is scraping Diskunion legal?**
This Actor collects only **publicly available** catalogue data — the same product-list pages any visitor can browse. It does not log in, bypass paywalls, or collect private personal data. You are responsible for using the data in accordance with applicable laws and Diskunion's terms of service.

**Can I call this Actor from my own app or API?**
Yes. Use the Apify API or the `apify-client` libraries shown above. Every run returns a dataset you can fetch as JSON, CSV, or Excel.

**Can AI agents use this Actor?**
Yes. It is exposed through the Apify MCP server, so agents can find and run it automatically. It is read-only and safe to call.

### Disclaimer

This Actor collects **publicly available** catalogue data only. It does not collect personal data and uses no login credentials. Use responsibly and in accordance with applicable laws and Diskunion's terms.

# Actor input Schema

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

What to crawl: 'artist' looks up one performer's catalogue by name, e.g. 'Mariya Takeuchi'; 'genre-new-arrivals' walks the newest second-hand arrivals in a whole genre, e.g. every new used listing in Japanese music. Must be exactly one of the two enum values below. If omitted, defaults to 'artist'. 'genre-new-arrivals' reads `genre` and ignores `searchKeyword`, `maxArtists` and `catalog` (that feed exists only on the used storefront); 'artist' reads `searchKeyword` and ignores \`genre'.

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

Artist name to look up on Diskunion, e.g. 'Mariya Takeuchi' or '山下達郎'. Romanized English names work as well as Japanese ones because Diskunion stores both spellings in one artist record ('MARIYA TAKEUCHI 竹内まりや'), so international buyers can search without typing Japanese. Diskunion's search matches artists rather than album titles, so pass a performer or band name here — an album title alone usually returns nothing. If omitted, defaults to 'Mariya Takeuchi'; every release found for the matched artists is returned as one row and one billable result, capped by `maxItems`.

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

Which Diskunion genre feed to walk when `mode` is 'genre-new-arrivals', e.g. 'jp' for Japanese music (city pop, J-pop, Japanese rock) or 'showakayou' for Showa-era kayokyoku. Must be one of the enum values below; anything else fails the run with the list of valid genres. If omitted, defaults to 'jp'. Ignored entirely when `mode` is 'artist'.

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

Which Diskunion catalogue to crawl: 'used' returns second-hand copies with a vinyl condition grade (盤質 A / B+ / B), 'new' returns the factory-new release catalogue, and 'both' crawls each in turn. Must be exactly one of the three enum values below. If omitted, defaults to 'both'. Choose 'used' for resale and arbitrage research — only used rows carry `conditionGrade` and per-copy pricing, and the same release often appears in both catalogues at very different prices.

## `inStockOnly` (type: `boolean`):

Set true to drop rows the shop can no longer sell — 売切 (sold out), 廃盤 (out of print) and 新品在庫なし (new, out of stock) — leaving only listings a buyer can actually order. Set false to keep everything, which is what price-history research wants since completed listings still carry price signal. If omitted, defaults to false. Filtering runs after each page is fetched, so a page still costs the same crawl time but yields fewer billable results.

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

Maximum number of releases to return, e.g. 50 for a quick check or 500 for a deep sweep. Diskunion serves 50 rows per page and this Actor crawls one page at a time to respect the site's rate limiting, so expect roughly 10-25 seconds per 50 rows — a 1000-item run can take several minutes. Each returned row is one billable result. If omitted, defaults to 100.

## `maxArtists` (type: `integer`):

How many matching artist records to crawl when the keyword is ambiguous, e.g. searching 'Tatsuro Yamashita' matches the solo artist plus collaboration credits. Artists are crawled in the order Diskunion returns them, so the most relevant match is first. If omitted, defaults to 1, which keeps runs fast and focused on the primary artist. Raise it to 3-5 to also capture compilations and split releases that credit the artist.

## `proxyConfiguration` (type: `object`):

Proxy used for every request to diskunion.net. Defaults to Apify Proxy with Japan-based residential IPs, e.g. {"useApifyProxy": true, "apifyProxyGroups": \["RESIDENTIAL"], "apifyProxyCountry": "JP"}. Diskunion is a Japan-only storefront and rate-limits repeated requests from one IP, so residential Japanese addresses give the most reliable results. You can override this with datacenter proxies to cut cost, but expect timeouts on longer runs.

## Actor input object example

```json
{
  "mode": "artist",
  "searchKeyword": "Mariya Takeuchi",
  "genre": "jp",
  "catalog": "both",
  "inStockOnly": false,
  "maxItems": 100,
  "maxArtists": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}
```

# 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": "artist",
    "searchKeyword": "Mariya Takeuchi",
    "genre": "jp",
    "catalog": "both",
    "inStockOnly": false,
    "maxItems": 100,
    "maxArtists": 1,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "JP"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datalab-jp/diskunion-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": "artist",
    "searchKeyword": "Mariya Takeuchi",
    "genre": "jp",
    "catalog": "both",
    "inStockOnly": False,
    "maxItems": 100,
    "maxArtists": 1,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "JP",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("datalab-jp/diskunion-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": "artist",
  "searchKeyword": "Mariya Takeuchi",
  "genre": "jp",
  "catalog": "both",
  "inStockOnly": false,
  "maxItems": 100,
  "maxArtists": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}' |
apify call datalab-jp/diskunion-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datalab-jp/diskunion-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/y0DpB5lLM33fSzrZA/builds/VI6e9HT7n0wML0dhz/openapi.json
