# Oricon Japan Charts — Rank, Artist and Copies Sold (`jpmarketdata/oricon-japan-chart-checker`) Actor

Pick an Oricon chart — weekly singles, albums, comics, books or streaming — and get its newest edition. Every entry comes with its position, title, artist or author, release date and estimated copies sold, plus typical and total sales that week. $0.02 per chart, no results = no charge. Unofficial.

- **URL**: https://apify.com/jpmarketdata/oricon-japan-chart-checker.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 chart analyzeds

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/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

## Oricon Japan Charts — Rank, Artist and Copies Sold

> **Unofficial** — independent tool, **not affiliated with, endorsed by, or sponsored by Oricon**. It reads only publicly visible pages. Support, reliability guarantees and the full disclaimer are at the bottom of this page.

**What it does:** Pick an Oricon chart — singles, albums, streaming, comics, books, DVD — and get its newest edition with the copies Oricon estimates each entry sold.

**You enter:** chart codes — `js` (singles / シングル), `obc` (comics / コミック) — and how far down to read.

**You get:** for the places read (10 by default, up to the chart's own end): edition date and week covered, places published, typical and total estimated copies sold, the number one with its artist and figure, how many are new/up/down/stay. Optional: one row per place.

**Price:** $0.02 per chart, and every chart in the run is charged. +$0.002 per row if you also want every place. No results = no charge.

**Example:** enter `js`, weekly, 10 places → edition 2026-09-14 covering 2026-08-31 to 2026-09-06 · 50 places published, 10 read · number one `Yes! 東京` by EBiDAN (恵比寿学園男子部) at 70,546 copies · typical 24,790 copies, range 9,432–70,546 · 278,832 copies across the ten · 4 new, 3 up, 2 down, 1 unchanged (real run, 2026-09-09)

> Unofficial — not affiliated with Oricon. Reads public pages only.

### Pricing — $0.02 per chart

| Event | Price | When |
|---|---|---|
| Chart edition summary | **$0.02** | Per chart read |
| Individual entry | **$0.002** | Only if you enable **Include every entry** |

A default run (1 chart, summary only) costs **$0.02**. Ask for three charts and you pay three times; there is no monthly fee. **A chart that returns no entries is never charged** — that covers a code Oricon does not publish, and a period a chart does not offer.

### The numbers vanish when the next edition publishes — read this first

The estimated copies sold (`推定売上枚数` / `推定売上部数`) and the best position so far (`最高順位`) appear **only on the edition that is currently the newest**. The ranking itself stays online forever, but the week after, the same address returns the same 50 places with those two figures removed. Measured 2026-09-09:

| Edition of the weekly singles chart | What came back |
|---|---|
| `2026-09-14` — the newest | 50 places, **50 with estimated copies sold, 50 with a best position** |
| `2026-09-07` — one week old | 50 places, **0 with either** (HTTP 200, complete page) |
| `2025-09-08` — one year old | 50 places, **0 with either** |
| `2020-01-06` — five years old | the page is gone: redirected away from the charts |

This is deliberate, not a fault: the withheld figures are what Oricon sells through its paid `you大樹` service (`ranking.oricon.co.jp`, ¥1,430/month including tax, login required, no file export), and both the on-page "51位～200位はこちら" link and the five-year-old edition point there. Two consequences you should plan around:

- **There is no history here.** This tool reads the edition on the shelf right now. If you want a series, you have to read it every week — nobody can go back for you afterwards.
- **When an edition carries no figures, `metricAvailable` is `false`, and then `salesStats`, `totalEstimatedSales`, `top1.estimatedSales` and every entry's `peakRank` are all empty.** The ranking, titles, artists, release dates and labels are still returned, and `hint` says in one sentence why the figures are missing. Nothing is ever filled in with a guess.

Which editions do carry them, measured 2026-09-09: **weekly** music, video, book and comic charts (all places), **monthly** music charts (all places), **daily** music charts (the top few places only — 3 of the top 10 on 2026-09-08). **Yearly** charts, the App Store charts and the series charts carry none at all.

### Input

| Field | Example | Notes |
|---|---|---|
| `charts` | `["js"]` | Chart codes. `js` singles, `ja` albums, `st` streaming, `obc` comics, `ob` books, `dg` DVD. Up to 10 per run, $0.02 each |
| `period` | `"weekly"` | `weekly` / `daily` / `monthly` / `yearly`. Weekly is the edition that carries the figures for every place |
| `maxRanks` | `10` | 1–100, rounded up to whole pages of 10 and capped at the chart's own end (50 weekly music, 30 comics and daily music, 100 yearly) |
| `includeIndividualEntries` | `false` | Enable to also get each place as its own row (+$0.002 each) |
| `listCharts` | `false` | Enable to get the list of every chart Oricon offers today instead of any summary. Nothing is charged for it |
| `convertToUsd` | `true` | Adds US$ next to the yen cover prices on book and comic charts. A failed rate lookup never fails the run |

#### Finding a chart code

Run once with `listCharts` on. On 2026-09-09 that returned **85 chart-and-period combinations over 56 chart codes**, each with its own newest edition date — the same list carried `2026-09-14` (weekly music), `2026-09-08` (daily music), `2026-09-07` (books, video), `2026-09-04` (TikTok), `2026-09-03` (YouTube), `2026-08` (monthly) and `2025` (yearly) at the same time. That is why each chart's edition is looked up separately rather than assumed.

`chartName` is Oricon's own Japanese name, read from the page. **`chartNameEn` is our English label, not the site's** — there is not one English chart name anywhere in Oricon's HTML — so a chart Oricon adds comes back with `chartNameEn: null` until we name it.

### Output example (`type: "chart_summary"`)

Measured on 2026-09-09 (real run, `{"charts": ["js"], "period": "weekly", "maxRanks": 10}`). The whole record, nothing shortened.

```json
{
  "type": "chart_summary",
  "chartCode": "js",
  "chartStatus": "ok",
  "chartName": "シングル",
  "chartNameEn": "Singles",
  "period": "weekly",
  "editionDate": "2026-09-14",
  "coversFrom": "2026-08-31",
  "coversTo": "2026-09-06",
  "entriesFound": 50,
  "entriesSampled": 10,
  "entriesWithSales": 10,
  "metricAvailable": true,
  "metricName": "estimatedCopiesSold",
  "metricUnit": "copies",
  "salesStats": { "min": 9432, "p25": 14923, "median": 24790, "p75": 31316, "max": 70546, "average": 27883 },
  "salesStatsBasis": "sample",
  "totalEstimatedSales": 278832,
  "top10ShareOfTotal": null,
  "top1": {
    "rank": 1,
    "title": "Yes! 東京",
    "artist": "EBiDAN(恵比寿学園男子部)",
    "estimatedSales": 70546,
    "releaseDate": "2026-08-11",
    "label": "SDR"
  },
  "movement": { "new": 4, "up": 3, "down": 2, "stay": 1 },
  "priceJpy": null,
  "priceUsd": null,
  "exchangeRateJpyUsd": null,
  "hint": null,
  "truncatedForTimeLimit": false,
  "sourceUrl": "https://www.oricon.co.jp/rank/js/w/2026-09-14/",
  "checkedAt": "2026-09-09T12:07:05.275034+00:00"
}
```

Reading that record:

- **`entriesFound` is exact, `entriesSampled` is what you asked for.** The published depth comes from the chart's own page links (`41位～50位` → 50 places), so it is a fact and not an estimate. Here 10 of the 50 places were read because `maxRanks` was 10.
- **`salesStatsBasis` tells you what the figures cover.** `exact` means every published place was read and every one of them carried a number; `sample` means anything less, which includes this record. It is `null` when there were no figures to describe.
- **`totalEstimatedSales` is the sum over the places read**, not over the whole chart — 278,832 copies across ten places here, not across fifty.
- **`top10ShareOfTotal` is empty unless more than ten places were read**, because with ten or fewer it would be 1.0 by construction. A run over 20 comic places on 2026-09-07 gave `0.7519`.
- **`priceJpy` is the cover price, and only book and comic charts print one.** Measured on 20 comic places, 2026-09-07: min ¥572, typical ¥808, max ¥1,375. Music charts return `null`, and then no exchange rate is looked up either.
- **`movement` counts the places read.** Yearly charts print no up/down marker at all, so all four are 0 there.

### What this Actor does not do

- **No chart history.** Only the edition that is newest right now carries the sales figures — see the table above. There is no way to read last month's numbers, from here or from anywhere free
- **No places past the chart's own end.** Oricon publishes 50 places on a weekly music chart, 30 on comics and daily music, 100 on the yearly charts. Places 51–200 are behind Oricon's paid service and are not read
- **No purchase links.** Every entry carries links to Amazon, HMV, Rakuten and others. Those addresses are disallowed by Oricon's robots.txt, so they are never requested and never returned. Only the JAN or ISBN printed in them is read; `productUrl` is always an ordinary `oricon.co.jp` page
- **No images, no article text, no editorial copy.** What comes back is rank, title, artist or author, release date, label or publisher, cover price and numbers
- **No entry rows by default.** The product is the summary; individual places are opt-in and separately priced
- **Nothing is stored.** Every run reads the site live; nothing is kept between runs

### Notes on the data

- **Every page is Shift\_JIS** and is decoded with `cp932` and replacement on error — strict Shift\_JIS fails on some editions
- **Each chart's newest edition is looked up, never assumed.** The dateless address (`/rank/js/w/`) redirects to the current edition, so a chart whose edition date differs from its neighbours' still resolves. A code Oricon does not publish redirects to the chart index and comes back as `chartStatus: "not_found"` with a `hint`; a period a chart does not offer answers 404 and does the same. Neither is charged
- **10 places per page.** The canary above is 2 requests; a full 50-place weekly chart is 6; two charts at 20 places each measured 6. Requests are spaced 2 seconds apart, and a run stops starting new charts after 240 seconds — charts it never read are never charged
- **Cloudflare will turn an address away if it reads too much.** Measured 2026-09-09: after roughly 60 requests from one address inside half an hour, every address on the site — robots.txt included — answered HTTP 429 with Cloudflare's "Just a moment…" check, and was still doing so four minutes later. A run of a few charts is far below that, but the run detects the check and fails with a message saying so, rather than reporting a short chart as a complete one
- **"Sold" here means Oricon's own estimate** of copies moved through its reporting shops in the period — `推定売上枚数` for discs, `推定売上部数` for books, both reported as `metricName: "estimatedCopiesSold"`. Streaming and YouTube charts report plays instead (`metricName: "plays"`), and the two are never mixed in one record
- **A chart page with no entries is treated as a fault, not as an empty chart.** An edition that does not exist redirects or answers 404, so a page that resolved but parsed to nothing means the layout changed — the run fails and says so instead of returning an empty result
- **`label` is the bare text line the chart prints** next to an entry. On music charts that is the record label (`SDR`); on the series charts it is the top product of the series; on book charts there is none, and the publisher is in `publisher` instead

### If something goes wrong

- **Wrong number or a failed run?** Open a ticket on the **Issues** tab. I read every one and reply within 2 business days (Japan time).
- **You never get a fake "empty" result.** If the site can't be read, the run fails and says so.
- **No results = no charge.** You only pay for results you actually get.
- **Checked every week.** An automatic test runs this tool weekly; if the site changes, I fix it.
- **Public pages only.** No login, no personal data, and it goes easy on the site.

### More tools by the same author

- [Mercari Japan Sold Prices — What Items Really Sell For](https://apify.com/jpmarketdata/mercari-japan-price-checker)
- [Yahoo! Auctions Japan Sold Prices — Median, Range, Bids](https://apify.com/jpmarketdata/yahoo-auction-sold-comps)

All tools (Japan marketplaces, real estate, jobs, racing, prediction markets): <https://apify.com/jpmarketdata>

### Disclaimer

Unofficial, independent tool — **not affiliated with, endorsed by, or sponsored by Oricon**. Product names and logos belong to their owners and only say where the data comes from. Data is read from public pages, for market research; check before you act on it.

# Actor input Schema

## `charts` (type: `array`):

Which Oricon charts to read, by their code: `js` singles, `ja` albums, `st` streaming, `obc` comics, `ob` books, `dg` DVD. Each chart returns one summary row and is charged $0.02, and a chart Oricon does not publish is not charged. Up to 10 charts per run; a run also stops after 240 seconds, and charts it never read are never charged. Turn on the chart list below to get every code.

## `period` (type: `string`):

Which edition of each chart to read. Weekly is the one to use: it is the edition that carries the estimated copies sold, it covers seven days, and almost every chart publishes it. Daily prints the figure for the top few places only, monthly prints it for all of them, and yearly prints none at all. A chart that has no edition for the period you pick comes back as `not_found` and is not charged.

## `maxRanks` (type: `integer`):

How far down each chart to read, in places. Oricon prints 10 places per page, so this is rounded up to whole pages and never goes past the end of the chart: weekly music stops at 50, comics and daily music at 30, yearly at 100. Reading further makes the run longer and the typical and total figures cover more places. It does not change the $0.02, but it does change how many entry rows you get.

## `includeIndividualEntries` (type: `boolean`):

Off by default: a run costs a flat $0.02 per chart summary. Turn it on to also get one row per place read — position, up/down/new, title, artist or author, release date, estimated copies sold, best position so far, label, publisher, cover price, JAN or ISBN and the link to the entry on Oricon — at +$0.002 per row.

## `listCharts` (type: `boolean`):

Off by default. Turn it on and the run returns the chart list instead of any summary: one row per chart and period Oricon offers right now, with its code, its Japanese name and the date of its newest edition. Nothing is charged for this. Use it once to find the codes you want, then turn it back off.

## `convertToUsd` (type: `boolean`):

Adds US$ figures next to the yen cover prices using today's exchange rate (open.er-api.com). Only the book and comic charts print a cover price, so on a music chart there is nothing to convert and no rate is looked up. A failed rate lookup never fails the run — you simply get the yen figures on their own.

## Actor input object example

```json
{
  "charts": [
    "js"
  ],
  "period": "weekly",
  "maxRanks": 10,
  "includeIndividualEntries": false,
  "listCharts": false,
  "convertToUsd": true
}
```

# Actor output Schema

## `chartSummaries` (type: `string`):

One row per chart with the edition date and the week it covers, how many entries carry a sales figure, the typical and total copies sold, and the number one.

# 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 = {
    "charts": [
        "js"
    ],
    "period": "weekly",
    "maxRanks": 10,
    "includeIndividualEntries": false,
    "listCharts": false,
    "convertToUsd": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/oricon-japan-chart-checker").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 = {
    "charts": ["js"],
    "period": "weekly",
    "maxRanks": 10,
    "includeIndividualEntries": False,
    "listCharts": False,
    "convertToUsd": True,
}

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/oricon-japan-chart-checker").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 '{
  "charts": [
    "js"
  ],
  "period": "weekly",
  "maxRanks": 10,
  "includeIndividualEntries": false,
  "listCharts": false,
  "convertToUsd": true
}' |
apify call jpmarketdata/oricon-japan-chart-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/oricon-japan-chart-checker"
        }
    }
}
```

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/LPuih6ljsonKrjTG6/builds/RMwKNjnZnUIJbj4Ic/openapi.json
