# Japan Scrap Metal Prices – Steel & Non-Ferrous (`datalab-jp/japan-scrap-metal-prices`) Actor

Daily Japanese scrap metal buying prices in one normalised table: Tokyo Steel ferrous scrap price sheets plus copper, wire, brass, aluminium and stainless prices from Japanese scrap dealers, with change tracking.

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

## Pricing

from $2.00 / 1,000 price rows

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

## Japan Scrap Metal Prices – Copper, Steel, Aluminium

Get **Japanese scrap metal buying prices** in one normalised table: **Tokyo Steel's ferrous scrap purchase prices** (per plant, JPY/tonne, from its official price sheets) plus **copper, insulated wire, brass, bronze, aluminium, stainless, lead and zinc** prices published by six Japanese scrap dealers (JPY/kg). Every row carries a **normalised item code**, the original Japanese item name, **price with unit**, the **date the price applies to**, and the **change since your previous run**. Built for scrap exporters, brokers and traders who watch the Japanese domestic price level (Japan is a major exporter of copper scrap). No coding needed.

### What data can you extract?

| Field | Description | Example |
|---|---|---|
| `dealer` / `dealerName` / `dealerNameEn` | Source ID and company name | `ohata` / 大畑商事 / Ohata Shoji |
| `location` | Plant or yard the price applies to (Tokyo Steel: one row per plant/satellite) | 田原工場 |
| `deliveryMode` | Tokyo Steel only: `sea+land` or `land` | `sea+land` |
| `itemCode` / `itemNameEn` / `metalGroup` | Normalised item shared across dealers (null if not mapped yet) | `copper_bare_bright_wire` |
| `itemNameJa` / `gradeJa` | Item name and sub-grade exactly as the dealer writes it | ピカ線(特一号銅線・ピカ銅・1号銅) |
| `price` / `priceLow` / `priceHigh` / `priceQualifier` | Price, or a range, or a "from" price | 2380 |
| `unit` / `pricePerKg` | `JPY/kg`, `JPY/t` or `JPY/unit`; kg-normalised price for comparisons | `JPY/kg` / 2380 |
| `taxIncluded` | `true` when the page says prices include consumption tax, `null` when it does not say | true |
| `priceDate` / `priceDateSource` | Date the price applies to and where that date came from | 2026-10-10 / `page` |
| `previousPrice` / `change` / `changePct` / `changeType` | Change vs your previous run (or vs the previous Tokyo Steel sheet) | 2330 / 50 / 2.15 / `up` |
| `publisherChange` | Tokyo Steel only: the change printed on the sheet itself (価格改定幅) | 1000 |
| `dealerChangeFlag` | `up` / `down` when the dealer marks the item on its page | `up` |
| `sourceUrl` / `sourceType` | Page or PDF the row was read from | https://www.ohata.org/kakaku.html |

The default input returns the first 100 rows (`maxItems: 100`); set `maxItems` to 3000 for the full table. A full run of all seven sources returns about **480 rows** (measured 2026-10-10: Tokyo Steel 84, Ohata 149 unique items, Hiranoya 139, Kimura 12, Yagi 33, Kouchi 32, Kousyo 31). Items a dealer lists without a price ("お問合せ下さい", "相談", "ASK") are not returned; their count is in `RUN_REPORT`.

#### Data sources (measured 2026-10-10)

| `dealer` | Page(s) | Update pattern seen | Price unit / tax |
|---|---|---|---|
| `tokyo-steel` | tokyosteel.co.jp/scrapprice/ → dated PDF price sheets (about 75 listed, back to Jan 2025) | Revised irregularly, about 40 sheets in 2026 so far | JPY/t (not printed on the sheet; Tokyo Steel quotes per tonne); tax not stated |
| `ohata` | ohata.org/kakaku.html | Dated daily ("2026年10月10日 午前8時"), same price at all yards | JPY/kg, tax included |
| `hiranoya` | hiranoyasan.com/all-items/ | Dated daily ("2026年10月10日午前9:00 更新") | JPY/kg (some per piece), tax included |
| `kimura` | kimura-metal.co.jp/price.html | No date on the page; HTTP Last-Modified used (2026-10-07). Most items are shown as "please call" | JPY/kg, tax included |
| `yagi` | yagimetal.com/works/service/ | Dated ("2026年10月6日時点") | JPY/kg, tax included |
| `kouchi` | kouchi-metal.jp nonferrous / ferrous / misc | Per-page "最終更新日" (2026/9/16 – 2026/10/3) | JPY/kg, tax included |
| `kousyo` | kousyo-boueki.jp nonferrous / misc | Per-page "最終更新日" (2026/9/22 – 2026/10/6) | JPY/kg, tax included |

Dealers update on their own schedules, so always read `priceDate`. Prices are the dealers' published reference prices for material delivered to their yards; the final price depends on quality and quantity.

### Why scrape Japanese scrap metal prices?

1. **Export sourcing** — see what Japanese yards are paying for No.1 bare bright copper wire, mixed copper or insulated wire today, and compare with LME / Shanghai to judge whether buying from Japan pays.
2. **Ferrous market tracking** — Tokyo Steel's purchase price per plant is a widely watched signal for the Japanese steel scrap market; `tokyoSteelSheets` returns its revision history in one run.
3. **Dealer comparison** — one `itemCode` (e.g. `copper_komido`) lines up the same grade across dealers, in the same unit.
4. **Price alerts** — schedule the Actor daily with `mode: "changes"` and get only the prices that moved, ready for Slack, email or a spreadsheet.
5. **AI agents / RAG** — give an LLM agent current Japanese scrap prices through the Apify MCP server, with English item names and explicit units and dates it can reason over.

### How to use it (no coding)

1. Click **Try for free**.
2. Keep all dealers selected, or pick only the ones you need (e.g. `tokyo-steel` for steel scrap).
3. Optional: choose **Metal groups** (e.g. copper + wire) or **Item codes**.
4. Choose **Output mode**: `all` for the full table, `changes` for only new or moved prices.
5. Click **Start**, then export the results as JSON, CSV or Excel.
6. To monitor, create a **Schedule** (e.g. every weekday 10:00 JST) with `mode: "changes"`.

### Input example

```json
{
  "dealers": ["tokyo-steel", "ohata", "hiranoya", "kimura", "yagi", "kouchi", "kousyo"],
  "metalGroups": [],
  "itemCodes": [],
  "includeUnmapped": true,
  "mode": "all",
  "stateStoreName": "japan-scrap-metal-prices-state",
  "tokyoSteelSheets": 1,
  "maxItems": 3000
}
```

Copper-only daily watch: `{"metalGroups": ["copper", "wire"], "includeUnmapped": false, "mode": "changes", "stateStoreName": "copper-watch"}`.
Tokyo Steel history: `{"dealers": ["tokyo-steel"], "tokyoSteelSheets": 20}` (about 84 rows per sheet).

### Output example

```json
{
  "dealer": "ohata",
  "dealerName": "大畑商事",
  "dealerNameEn": "Ohata Shoji",
  "dealerRegion": "Osaka / Chiba / Gunma",
  "location": "All yards (same price)",
  "deliveryMode": null,
  "itemCode": "copper_bare_bright_wire",
  "itemNameEn": "No.1 bare bright copper wire (Pika-sen, No.1 copper wire, ≥1.3 mm, insulation fully removed)",
  "metalGroup": "copper",
  "itemNameJa": "ピカ線(特一号銅線・ピカ銅・1号銅)",
  "gradeJa": null,
  "dealerCategoryJa": "銅・雑電線",
  "price": 2380,
  "priceLow": null,
  "priceHigh": null,
  "priceQualifier": null,
  "priceText": "2380",
  "currency": "JPY",
  "unit": "JPY/kg",
  "pricePerKg": 2380,
  "taxIncluded": true,
  "priceDate": "2026-10-10",
  "priceDateText": "2026年10月10日 午前8時",
  "priceDateSource": "page",
  "publisherChange": null,
  "dealerChangeFlag": "up",
  "sheetNo": null,
  "sourceUrl": "https://www.ohata.org/kakaku.html",
  "sourceType": "html",
  "scrapedAt": "2026-10-10T11:51:21.749Z",
  "previousPrice": 2330,
  "previousPriceDate": "2026-10-09",
  "change": 50,
  "changePct": 2.15,
  "changeType": "up",
  "changeBasis": "previous-run"
}
```

A Tokyo Steel row looks the same with `dealer: "tokyo-steel"`, `location: "田原工場"`, `deliveryMode: "sea+land"`, `itemCode: "ferrous_electric_special_a"`, `itemNameJa: "電特A"`, `price: 55000`, `unit: "JPY/t"`, `pricePerKg: 55`, `taxIncluded: null`, `priceDateSource: "pdf-effective-date"`, `publisherChange: 1000` and `sheetNo: "No. 26-035"`.

**Field notes**

- `changeType` is `new` for every row on the first run with a given `stateStoreName` (`changeBasis: "first-run-baseline"`); later runs compare with the previous run (`previous-run`). Older Tokyo Steel sheets fetched with `tokyoSteelSheets` > 1 are compared with the sheet before them (`previous-sheet-in-this-run`). Computed Tokyo Steel changes matched the sheet's own 価格改定幅 table on all 11 consecutive sheets checked.
- `itemCode` is filled only when that exact Japanese item name has been verified on that dealer's page; nothing is guessed. Dealer-specific items (e.g. `ギロチン材A`, circuit boards, catalysts) keep `itemCode: null` and are still returned unless `includeUnmapped` is `false`.
- `unit: "JPY/t"` for Tokyo Steel is not printed on the PDF; Tokyo Steel quotes its scrap purchase prices per tonne.
- Kimura's page has no date, so its `priceDate` is the HTTP Last-Modified date of the page (`priceDateSource: "http-last-modified"`).

#### Normalised item codes

| `itemCode` | Group | English name | Dealers mapped |
|---|---|---|---|
| `copper_bare_bright_wire` | copper | No.1 bare bright copper wire (Pika-sen, No.1 copper wire, ≥1.3 mm, insulation fully removed) | ohata, hiranoya, kimura, yagi, kouchi, kousyo |
| `copper_jodo_clean` | copper | Upper-grade clean copper pipe/sheet (Jo-do) | kimura, yagi |
| `copper_namido` | copper | Clean copper scrap without attachments (Nami-do) | ohata, hiranoya, yagi, kimura |
| `copper_komido` | copper | Mixed copper with attachments/oxidation (Komi-do, "No.2 copper") | ohata, hiranoya, yagi, kouchi, kimura, kousyo |
| `copper_ac_pipe_insulated` | copper | Copper A/C pipe with insulation still attached | ohata, hiranoya, yagi, kouchi, kousyo |
| `copper_burnt` | copper | Burnt copper (Yaki-do) | kouchi |
| `copper_heat_exchanger_red` | copper | Copper water-heater heat exchanger, red (Aka-gama) | ohata, hiranoya |
| `copper_heat_exchanger_white` | copper | Zinc-plated copper water-heater heat exchanger, white (Shiro-gama) | ohata, hiranoya |
| `cupronickel` | copper | Cupronickel (white copper) | kouchi |
| `phosphor_bronze` | brass_bronze | Phosphor bronze | ohata |
| `wire_cu80` | wire | Insulated copper wire, ~80% copper recovery | ohata, hiranoya, yagi, kousyo |
| `wire_cu70` | wire | Insulated copper wire, ~70% copper recovery | hiranoya, yagi |
| `wire_cu65` | wire | Insulated copper wire, ~65% copper recovery | ohata |
| `wire_cu60` | wire | Insulated copper wire, ~60% copper recovery | hiranoya, yagi, kousyo |
| `wire_cu50` | wire | Insulated copper wire, ~50% copper recovery | hiranoya, yagi |
| `wire_va_vvf` | wire | VA / VVF (F-cable) building wire | ohata, hiranoya, yagi, kouchi, kimura, kousyo |
| `wire_appliance_cord` | wire | Appliance power cords | ohata, hiranoya, yagi, kousyo |
| `wire_auto_harness` | wire | Automotive wire harness | ohata, hiranoya, kousyo |
| `wire_coax` | wire | Coaxial / TV antenna cable | hiranoya, yagi |
| `brass_mixed` | brass_bronze | Mixed yellow brass (Komi-shinchu) | ohata, hiranoya, kimura, yagi, kouchi |
| `brass_clean` | brass_bronze | Clean brass without attachments | kousyo |
| `brass_rod_ends` | brass_bronze | Brass rod ends (Bo-koro) | yagi |
| `brass_coins` | brass_bronze | Brass coins / medals | ohata, hiranoya |
| `gunmetal_clean` | brass_bronze | Gunmetal / bronze castings, clean (Hogane) | ohata, hiranoya, kimura, yagi |
| `gunmetal_valves` | brass_bronze | Mixed gunmetal / valve bronze (Komi-hogane) | ohata, hiranoya, kimura |
| `gunmetal_water_meters` | brass_bronze | Bronze water meters, not dismantled | ohata, hiranoya |
| `nickel_silver` | brass_bronze | Nickel silver (Yohaku) | ohata, hiranoya |
| `aluminium_sash` | aluminium | Aluminium window sash (dealer standard grade) | hiranoya, yagi, kouchi, kousyo |
| `aluminium_sash_clean` | aluminium | Aluminium window sash, no attachments | ohata |
| `aluminium_sash_with_attachments` | aluminium | Aluminium window sash with attachments/screws | ohata, yagi |
| `aluminium_cast` | aluminium | Cast aluminium (Aluminium gara: machine/auto parts) | ohata, hiranoya, kousyo |
| `aluminium_ubc` | aluminium | Aluminium beverage cans (UBC) | ohata, hiranoya, kouchi, kousyo |
| `aluminium_wheels` | aluminium | Aluminium car wheels (no tyres) | ohata, hiranoya, kouchi, kousyo |
| `aluminium_litho_sheet` | aluminium | Aluminium litho / printing plates | ohata, hiranoya, yagi |
| `aluminium_heat_sink` | aluminium | Aluminium heat sinks | ohata, hiranoya |
| `aluminium_new_scrap` | aluminium | New aluminium production scrap (Shin-kuzu) | yagi |
| `stainless_304` | stainless | Stainless steel SUS304 (18-8) | ohata, hiranoya, yagi, kousyo |
| `stainless_304_turnings` | stainless | Stainless SUS304 turnings | yagi |
| `stainless_301` | stainless | Stainless steel SUS301 | ohata |
| `stainless_309` | stainless | Stainless steel SUS309 | ohata |
| `stainless_310` | stainless | Stainless steel SUS310 | ohata, hiranoya, yagi |
| `stainless_316` | stainless | Stainless steel SUS316 | ohata, hiranoya, yagi |
| `stainless_400_series` | stainless | Stainless steel 400 series (magnetic) | ohata, hiranoya, yagi |
| `lead_pipe_sheet` | lead_zinc | Lead pipe / sheet, clean | ohata, hiranoya, yagi |
| `lead_wheel_weights` | lead_zinc | Lead wheel balance weights, clean | ohata, hiranoya |
| `lead_type_metal` | lead_zinc | Lead type metal | ohata, hiranoya |
| `lead_battery_auto` | lead_zinc | Automotive lead-acid batteries | ohata, hiranoya |
| `lead_battery_sealed` | lead_zinc | Sealed lead-acid batteries | ohata, hiranoya |
| `lead_battery_forklift` | lead_zinc | Forklift lead-acid batteries | ohata, hiranoya |
| `lead_battery_industrial` | lead_zinc | Industrial lead-acid batteries | ohata, hiranoya |
| `zinc_clean` | lead_zinc | Zinc, clean | ohata, hiranoya, yagi |
| `zinc_boiler` | lead_zinc | Boiler zinc anodes | ohata, hiranoya |
| `tin_pure` | lead_zinc | Pure tin | ohata, hiranoya |
| `nickel_pure` | other_metals | Pure nickel | ohata, hiranoya, yagi |
| `tungsten_carbide` | other_metals | Tungsten carbide (Cho-ko) | ohata, hiranoya, yagi |
| `high_speed_steel` | other_metals | High-speed steel (HSS) | ohata, hiranoya |
| `titanium_pure` | other_metals | Pure titanium | ohata, hiranoya |
| `molybdenum` | other_metals | Molybdenum | ohata, hiranoya |
| `tantalum` | other_metals | Tantalum | ohata, hiranoya |
| `radiator_ac` | mixed | A/C (copper-aluminium) radiators | ohata, hiranoya, kousyo, kouchi |
| `radiator_brass` | mixed | Brass / semi-copper automotive radiators | ohata, hiranoya, kouchi |
| `radiator_aluminium` | mixed | Aluminium automotive radiators | ohata, hiranoya, kouchi |
| `water_heater` | mixed | Gas water heaters (whole units) | ohata, hiranoya, yagi, kouchi, kousyo |
| `gas_meter_aluminium` | mixed | Gas meters with aluminium housing | ohata, kousyo |
| `alternators` | mixed | Alternators (dynamos) | ohata, hiranoya |
| `starter_motors` | mixed | Starter motors | ohata, hiranoya |
| `industrial_mixed_scrap` | mixed | Industrial mixed scrap (Kogyo zappin) | ohata, hiranoya, yagi, kouchi, kousyo |
| `ferrous_general_yard` | ferrous | General iron & steel scrap (yard buying grade) | ohata, hiranoya |
| `ferrous_used_steel_plates` | ferrous | Used steel road plates (reusable) | ohata, hiranoya |
| `ferrous_electric_special_a` | ferrous | Den-toku A: heavy melting, ≥6 mm, ≤500×1500 mm (billets, sections, rails) | tokyo-steel |
| `ferrous_special_a` | ferrous | Toku A: heavy melting, ≥6 mm (heavy vehicle / ship breaking) | tokyo-steel |
| `ferrous_heavy_special` | ferrous | Tokkyu: heavy melting, ≥3 mm | tokyo-steel |
| `ferrous_heavy_1` | ferrous | Ikkyu (grade 1): heavy melting, ≥1.6 mm | tokyo-steel |
| `ferrous_heavy_2` | ferrous | Nikyu (grade 2): heavy melting, ≥1.0 mm | tokyo-steel |
| `ferrous_light` | ferrous | Kyugai (below grade): light scrap, <1.0 mm | tokyo-steel |
| `ferrous_new_cuttings` | ferrous | Shindachi: new press-shop cuttings (loose or pressed) | tokyo-steel |
| `ferrous_new_cuttings_loose` | ferrous | Shindachi bara: new cuttings, loose | tokyo-steel |
| `ferrous_new_cuttings_press_a` | ferrous | Shindachi press A: new cuttings, pressed | tokyo-steel |
| `ferrous_new_cuttings_press_b` | ferrous | Shindachi press B: new cuttings, pressed | tokyo-steel |
| `ferrous_c_press` | ferrous | C press: machine-pressed bales such as beverage cans | tokyo-steel |
| `ferrous_turnings_pressed` | ferrous | Pressed steel turnings | tokyo-steel |
| `ferrous_steel_turnings` | ferrous | Steel turnings (Ko-darai-ko) | tokyo-steel |
| `ferrous_cast_iron_turnings` | ferrous | Cast-iron turnings (Sen-darai-ko) | tokyo-steel |
| `ferrous_motor_blocks` | ferrous | Motor / engine blocks | tokyo-steel |
| `ferrous_shredded_a` | ferrous | Shredded scrap A (autos, appliances) | tokyo-steel |
| `ferrous_shredded_c` | ferrous | Shredded scrap C (cans and similar) | tokyo-steel |

### How much does it cost?

Pay-per-event: a tiny start charge of $0.00005 (Apify's default Actor Start event, charged once per GB of memory; this Actor runs on 1 GB) plus a per-row price:

| Event | What it is | Price |
|---|---|---|
| Actor Start (`apify-actor-start`) | Once per run (per GB of memory) | $0.00005 |
| Result (`apify-default-dataset-item`) | Each price row returned | $0.003 (FREE and BRONZE plans) · $0.002 (SILVER and above) |

A full run of all dealers (about 480 rows) costs about $1.44 on the FREE plan and $0.96 on SILVER. A copper + wire watch (`includeUnmapped: false`) returns about 60 rows on its first run; in `mode: "changes"` later runs return only the rows that moved, often a few dozen or none, and you pay only for rows returned. Use `maxItems` to cap spend.

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

This Actor is **read-only**: it only reads public price pages and PDFs, never logs in, submits forms or changes anything on any website. It is safe for AI agents to call autonomously.

#### API (curl)

```bash
curl -X POST "https://api.apify.com/v2/acts/datalab-jp~japan-scrap-metal-prices/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{"dealers": ["tokyo-steel", "ohata", "hiranoya", "kimura", "yagi", "kouchi", "kousyo"], "maxItems": 3000}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datalab-jp/japan-scrap-metal-prices").call(run_input={"dealers": ["tokyo-steel", "ohata", "hiranoya", "kimura", "yagi", "kouchi", "kousyo"], "maxItems": 3000})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('datalab-jp/japan-scrap-metal-prices').call({ dealers: ['tokyo-steel', 'ohata', 'hiranoya', 'kimura', 'yagi', 'kouchi', 'kousyo'], maxItems: 3000 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

The synchronous `run-sync-get-dataset-items` endpoint waits up to 300 seconds; a full run normally finishes in well under a minute.

#### Use with AI agents (MCP)

Through the [Apify MCP server](https://mcp.apify.com), an agent (Claude, ChatGPT, Cursor, LangChain…) can discover and call this Actor with natural-language intent such as "What are Japanese yards paying for bare bright copper wire today?". Useful arguments for agents: `itemCodes` (e.g. `["copper_bare_bright_wire"]`), `includeUnmapped: false` for a clean comparison table, and `dealers: ["tokyo-steel"]` for steel scrap. Every row states its unit (`JPY/kg` or `JPY/t`), tax treatment and `priceDate`, so the agent does not have to guess.

### Related Actors

Other Japan data Actors by the same developer:

- [**Japan Gold & Silver Prices – Dealer Buy & Retail**](https://apify.com/datalab-jp/japan-precious-metal-prices) — gold, silver, platinum and palladium dealer prices in one table
- [**Japan Trade Show Exhibitor List – JIMTOF, CEATEC**](https://apify.com/datalab-jp/japan-trade-show-exhibitors) — exhibitor lists of Japanese trade shows (company-level data)
- [**Japan Tax Auction Real Estate – NTA Public Auction**](https://apify.com/datalab-jp/japan-nta-public-auction) — real estate from National Tax Agency public auctions
- [**Mercari Japan Scraper – Listings & Item Details**](https://apify.com/datalab-jp/mercari-japan-listings-scraper) — Mercari listings and sold prices

### FAQ

**Is scraping these price pages legal?**
The Actor reads only prices that the companies publish openly on their websites for anyone to see, without logging in or bypassing any access control, at a low request rate (at most 2 parallel requests). Before adding a source we checked its robots.txt and site notices (2026-10-10); one dealer whose site prohibits unauthorised reproduction of its content was left out. Only factual price data is returned — no photos, descriptions or personal data. You are responsible for using the data in line with applicable law.

**Can I use it through the API?**
Yes — see the curl, Python and JavaScript examples above. Results can also be exported as JSON, CSV, Excel or sent to webhooks, Google Sheets, Slack and more via Apify integrations.

**Can AI agents use this Actor?**
Yes. It is read-only and returns explicit units and dates; see *Use with AI agents (MCP)* above.

**Why is a price different between dealers for the "same" item?**
Each dealer grades material slightly differently and updates on its own schedule. Compare `priceDate` first; `itemNameJa` and `gradeJa` show the dealer's exact wording behind each `itemCode`.

**How does change tracking work?**
The Actor stores the last prices in a named key-value store in your Apify account (`stateStoreName`). Each run compares with it and updates it. Use a different name per scheduled task if the tasks use different filters. If a run's output is cut by `maxItems` or a spending limit, the store is not updated, so you will not miss a change.

**Why did I get 0 rows?**
Check `RUN_REPORT` in the run's key-value store: it gives each dealer's status and a plain-language hint. Common causes: filters that match nothing (e.g. `dealers: ["tokyo-steel"]` with `metalGroups: ["copper"]`), or `mode: "changes"` on a day when no published price moved.

**Is the Tokyo Steel price per tonne and tax-inclusive?**
Per tonne: yes (`unit: "JPY/t"`), although the sheet itself does not print the unit. Tax: the sheet does not say, so `taxIncluded` is `null`.

**Do I need a proxy?**
No. The Actor connects directly by default. On 2026-10-10 the Tokyo Steel, Ohata and Kimura pages answered from the Apify platform both directly and through the datacenter proxy; the other dealers were checked from a Japanese connection. If a site ever blocks direct access, enable Apify Proxy; with no group chosen the Actor uses Japan-based residential IPs.

### Disclaimer

Prices are copied from public reference price lists published by the companies named above and are provided as-is for information. They are not offers to buy or sell; actual buying prices depend on quality, quantity, delivery and the dealer's assessment, and may change at any time. This Actor is not affiliated with or endorsed by Tokyo Steel or any of the dealers.

***

**中文摘要（简体）**
本 Actor 每次运行汇总日本废金属收购价格：东京制铁（Tokyo Steel）各工厂的废钢收购价（日元/吨，来自官方 PDF 价格表）以及日本六家废料回收商公布的废铜、电线、黄铜、青铜、铝、不锈钢、铅锌收购价（日元/公斤）。
每条数据包含统一的品目代码与英文名、日文原名、单位、价格适用日期，以及与上次运行相比的涨跌（可只输出变动的价格，适合每日监控）。
适合废铜进口商、贸易商和经纪人掌握日本国内回收价格水平；只读、无需编程，可通过 API 或 MCP 供 AI 代理调用。

# Actor input Schema

## `dealers` (type: `array`):

Which Japanese price boards to read, e.g. \['tokyo-steel'] for ferrous scrap only or \['ohata', 'hiranoya'] for copper and non-ferrous. Pick any of: tokyo-steel (Tokyo Steel ferrous price sheets, JPY/t per plant), ohata, hiranoya, kimura, yagi, kouchi, kousyo (scrap dealers, mostly JPY/kg). Defaults to all seven when omitted. Each dealer publishes on its own schedule (daily to monthly); the priceDate field shows the date each price applies to.

## `metalGroups` (type: `array`):

Keep only rows in these normalised groups, e.g. \['copper', 'wire'] for copper scrap and insulated copper wire, or \['ferrous'] for steel scrap. Groups: copper, wire, brass_bronze, aluminium, stainless, lead_zinc, other_metals, mixed (radiators, water heaters, motors), ferrous. Leave empty (default) to keep every group. Filtering by group drops rows whose item name has no normalised itemCode yet, because only mapped items have a group.

## `itemCodes` (type: `array`):

Keep only these normalised items, e.g. \['copper_bare_bright_wire'] (No.1 bare bright copper wire, Pika-sen) or \['copper_komido', 'brass_mixed', 'ferrous_heavy_1']. Codes are listed in the README table 'Normalised item codes'; unknown codes are rejected. Leave empty (default) to keep all items. Combined with metalGroups, a row must match both filters.

## `includeUnmapped` (type: `boolean`):

Whether to return rows whose Japanese item name is not yet in the normalisation table, e.g. dealer-specific items like 'ギロチン材A' or circuit boards; those rows keep the Japanese name and have itemCode null. Set to false for a clean cross-dealer comparison table (only items mapped to an itemCode such as copper_namido). Defaults to true. Has no effect on rows already removed by metalGroups or itemCodes.

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

What to return: 'all' (full price table every run, each row annotated with previousPrice and change vs the previous run) or 'changes' (only rows that are new or whose price moved since the previous run, for daily monitoring and alerts). Defaults to 'all'. In 'changes' mode the very first run returns everything as a baseline. History is stored in the named key-value store given in stateStoreName.

## `stateStoreName` (type: `string`):

Name of the key-value store in your Apify account that remembers the previous prices, e.g. 'japan-scrap-metal-prices-state' or 'copper-watch-osaka'. Use letters, digits and '-' only (max 63). Defaults to 'japan-scrap-metal-prices-state'. Use a separate name per scheduled task with different filters, otherwise items entering or leaving the filter show up as new.

## `tokyoSteelSheets` (type: `integer`):

How many of Tokyo Steel's published price sheets to read, newest first, e.g. 1 for the current prices or 20 for about six months of revisions (the page lists roughly 75 sheets back to early 2025). Each sheet gives about 84 rows (grade × plant). Defaults to 1. Ignored in mode='changes', which always compares against the previous run.

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

Maximum number of rows returned in this run, e.g. 500 for a quick look or 3000 for every dealer and item (a full run is about 480 rows). Each row is one billable result, so this is your cost cap. Defaults to 3000 (one full run of all dealers is about 480 rows). If the cap cuts the output, change tracking is not advanced, so the next run still reports the changes.

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

Apify Proxy settings. By default the Actor connects directly (no proxy). On 2026-10-10 the Tokyo Steel, Ohata and Kimura pages answered HTTP 200 from the Apify platform both directly and via the datacenter proxy; the other dealers answered 200 from a Japanese connection. If a site ever blocks direct access, enable Apify Proxy here; with no group chosen the Actor uses Japan-based residential IPs (RESIDENTIAL, JP). Residential traffic is billed per GB.

## Actor input object example

```json
{
  "dealers": [
    "tokyo-steel",
    "ohata",
    "hiranoya",
    "kimura",
    "yagi",
    "kouchi",
    "kousyo"
  ],
  "metalGroups": [],
  "itemCodes": [],
  "includeUnmapped": true,
  "mode": "all",
  "stateStoreName": "japan-scrap-metal-prices-state",
  "tokyoSteelSheets": 1,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `prices` (type: `string`):

All price rows as dataset items: dealer, location, normalised item code and English name, original Japanese item name, price with unit (JPY/kg, JPY/t, JPY/unit), price date, previous price and change (see dataset schema).

## `runReport` (type: `string`):

Per-dealer status (ok, partial, empty, failed), pages fetched, rows parsed, items without a published price, price date per dealer, Tokyo Steel sheets parsed, change-tracking counts (new/up/down/unchanged) and plain-language hints when nothing was returned.

# 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 = {
    "dealers": [
        "tokyo-steel",
        "ohata",
        "hiranoya",
        "kimura",
        "yagi",
        "kouchi",
        "kousyo"
    ],
    "metalGroups": [],
    "itemCodes": [],
    "includeUnmapped": true,
    "mode": "all",
    "stateStoreName": "japan-scrap-metal-prices-state",
    "tokyoSteelSheets": 1,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datalab-jp/japan-scrap-metal-prices").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 = {
    "dealers": [
        "tokyo-steel",
        "ohata",
        "hiranoya",
        "kimura",
        "yagi",
        "kouchi",
        "kousyo",
    ],
    "metalGroups": [],
    "itemCodes": [],
    "includeUnmapped": True,
    "mode": "all",
    "stateStoreName": "japan-scrap-metal-prices-state",
    "tokyoSteelSheets": 1,
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("datalab-jp/japan-scrap-metal-prices").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 '{
  "dealers": [
    "tokyo-steel",
    "ohata",
    "hiranoya",
    "kimura",
    "yagi",
    "kouchi",
    "kousyo"
  ],
  "metalGroups": [],
  "itemCodes": [],
  "includeUnmapped": true,
  "mode": "all",
  "stateStoreName": "japan-scrap-metal-prices-state",
  "tokyoSteelSheets": 1,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call datalab-jp/japan-scrap-metal-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datalab-jp/japan-scrap-metal-prices"
        }
    }
}
```

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/FmyzHGy1XoqjdRFiX/builds/t3pYEgBpHaZH9FzPi/openapi.json
