# Rakuten Japan Scraper - Rakuten Ichiba Products & Prices (`scrapewise/rakuten-japan-scraper`) Actor

Get Rakuten Ichiba (楽天市場) product prices, shops and reviews by keyword, search link or product link: price, shop, shipping, points, review count, genre, tags, plus similar products from a product link. Filters for price, free shipping, used, sold out and sort. No login or API key.

- **URL**: https://apify.com/scrapewise/rakuten-japan-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** E-commerce
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 product delivereds

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

## Rakuten Japan Scraper: Rakuten Ichiba products, prices, shops and reviews

Scrape [Rakuten Ichiba](https://www.rakuten.co.jp/) (楽天市場), Japan's largest online mall, **without an account,
an API key or a browser**. Search by keyword (Japanese or English) or paste any Rakuten search link, and get one row
per product: **price and price range across variants, shop, shipping fee and delivery estimate, Rakuten points,
review score and number of reviews, genre path, product tags, brand, images**, plus sold-out, used, pre-order and
hometown-tax (ふるさと納税) flags. Sort and filter like the Rakuten search page: price range, free shipping, used,
most reviews, newest, lowest or highest price. **New: find similar products from a Rakuten product link**, the
visually similar items Rakuten itself suggests (似た商品), about 40 to 45 per product.

Built for Japan e-commerce price tracking, cross-border resellers and proxy shoppers, brands watching their resellers
on Rakuten, category and market research, and product datasets for Japanese goods.

**US$ 1.00 per 1,000 products, proxy included. No start fee, no monthly fee. Error rows,
duplicates and products outside your filters are free.**

### Rakuten scraper at a glance

- **Price per 1,000 products, Free plan:** US$ 1.00 (down to US$ 0.85 on Gold and above)
- **Fee per run start:** None
- **Search by keyword or search link:** Yes
- **Find similar products from a Rakuten product link:** Yes, about 40 to 45 per product
- **Sort and Rakuten filters (price, free shipping, used):** Yes, all six sort orders
- **Shop, shipping, points, review score and count, genre path, tags:** Yes
- **Resumes after a platform restart without charging twice:** Yes

### What you can do with Rakuten Ichiba data

- **Track prices on Rakuten.** Schedule the same keywords or search links daily and compare `priceJpy`,
  `priceMinJpy`/`priceMaxJpy`, `points` and `isSoldOut`.
- **Find the best sellers of a niche.** Sort by `mostReviews` and read `reviewCount`, `reviewAverage`, shop and genre.
- **Map who sells a brand.** Search the brand and group by `shopName`/`shopUrl` to see every Rakuten shop and its
  price.
- **Find alternatives and competing listings.** Paste a product link in `similarToItems` and get the products
  Rakuten shows as visually similar: cheaper versions, the same item in other shops, lookalikes in the same genre.
- **Build a Japanese product dataset.** Up to 6,750 products per search (Rakuten's own limit), with genre path and
  tags for categorisation.

### Rakuten scraper input

| Field | What it does |
|---|---|
| `searchTerms` | Keywords, one per line (ワイヤレスイヤホン, プロテイン, wireless earphones). |
| `startUrls` | Rakuten search links (`https://search.rakuten.co.jp/search/mall/...`), including genre searches. |
| `similarToItems` | Rakuten product links (`https://item.rakuten.co.jp/<shop>/<item>/`) or `shopId/itemId`: similar products for each. |
| `maxResultsPerItem` | Similar products per product link. Default: all (about 40 to 45). |
| `maxResultsPerSearch` | Products per search, 45 per page. Default 45, up to 6,750. |
| `maxItems` | Hard cap on charged products for the whole run. |
| `sortBy` | `standard`, `priceLow`, `priceHigh`, `newest`, `mostReviews`, `bestRated`. |
| `minPrice`, `maxPrice` | Price range in yen (Rakuten's own filter). |
| `freeShippingOnly`, `usedOnly` | Rakuten's free-shipping and used-goods filters. |
| `excludeKeywords` | Skip products whose name has any of these words (free). |
| `excludeSoldOut`, `minReviews` | Skip sold-out products or products with fewer reviews (free). |

Example: the 200 most-reviewed protein products between 2,000 and 6,000 yen with free shipping.

```json
{
  "searchTerms": ["プロテイン"],
  "sortBy": "mostReviews",
  "minPrice": 2000,
  "maxPrice": 6000,
  "freeShippingOnly": true,
  "maxResultsPerSearch": 200
}
```

### Find similar products from a Rakuten product link

Rakuten shows a "似た商品を探す" (find similar items) button on product cards: products that look like the one you
picked, matched by Rakuten from the product photos. Put product links in `similarToItems` and the Actor returns that
list for each one, in the same row format as a search plus `sourceItem` (the link or id you gave) and
`sourceItemId` (`shopId/itemId`). `position` is Rakuten's order in the similar list. The product itself is left out.

```json
{
  "similarToItems": [
    "https://item.rakuten.co.jp/babycresco/ambique_17/",
    "312968/10028411"
  ],
  "sortBy": "priceLow",
  "maxPrice": 8000
}
```

- Input: a product link from item.rakuten.co.jp, or the two numbers `shopId/itemId` (the `shopId` column and the number
  after `:` in `itemCode` of any row this Actor returns). Product links pasted in `startUrls` work too.
- Rakuten returns one list of about 40 to 45 products per item; it has no second page.
- Price range and sort order are Rakuten's own filters; free shipping, used, excluded words, sold-out and minimum
  reviews are applied by the Actor, and skipped products are free.
- This is not a search by your own photo: Rakuten's website only offers it from one of its products.

An empty input runs a small example (20 products for "wireless earphones"), so the Actor never fails on a blank form.

### What data the Rakuten scraper returns

One real row from a local test run on 2026-09-29 (search "プロテイン"):

```json
{
  "type": "product",
  "itemCode": "babycresco:10000975",
  "url": "https://item.rakuten.co.jp/babycresco/ambique_17/",
  "name": "美容成分オールインワン【アンビーク / AMBIQUE】オールインワン ソイプロテイン 1kg 置き換え ダイエット ...",
  "catchCopy": "これ一つでOK！ビタミン11種×乳酸菌100億個配合のオールインワンソイプロテイン ...",
  "priceJpy": 3280,
  "hasPriceRange": true,
  "priceMinJpy": 3280,
  "priceMaxJpy": 6280,
  "subscriptionPriceJpy": 2952,
  "isSoldOut": false,
  "isUsed": false,
  "usedCondition": null,
  "isPreOrder": false,
  "isHometownTax": false,
  "freeShippingLine": true,
  "shippingFeeJpy": 0,
  "isFreeShipping": true,
  "deliveryEstimate": "15:00までの注文で最短10/1(翌日)お届け",
  "points": 30,
  "pointMultiplier": 1.0,
  "reviewAverage": 4.51,
  "reviewCount": 1717,
  "reviewsUrl": "https://review.rakuten.co.jp/item/1/303383_10000975/1.1/",
  "shopName": "SOLIA SHOP",
  "shopCode": "babycresco",
  "shopId": 303383,
  "shopUrl": "https://www.rakuten.co.jp/babycresco/",
  "shopIsExcellent": false,
  "genreId": 567616,
  "genrePath": ["ダイエット・健康", "サプリメント", "プロテイン", "ソイプロテイン"],
  "genreIdPath": [100938, 563727, 567603, 567616],
  "brand": null,
  "tags": ["原産国/製造国: 日本", "39(サンキュー)ショップ: 送料無料ライン対象商品", "シリーズ: アンビーク（ソリア）"],
  "imageUrls": ["https://thumbnail.image.rakuten.co.jp/@0_mall/babycresco/cabinet/ambique/ptotein/12319009/ambique_17_2609.jpg"],
  "couponCount": 0,
  "hasVariants": true,
  "searchTerm": "プロテイン",
  "position": 1,
  "page": 1,
  "source": "search:プロテイン",
  "scrapedAt": "2026-09-29T22:02:27Z",
  "errorCode": null
}
```

`itemCode` is `shop:item` in the same format as Rakuten's official API. `priceJpy` is the price Rakuten shows in
search (the lowest variant when `hasPriceRange` is true). The run also saves `SEARCH_SUMMARY` in its key-value
store: how many products Rakuten found for each search and how many it lets you page through.

#### Error rows (never charged)

| errorCode | When |
|---|---|
| `NO_RESULTS` | The search found nothing, or Rakuten has no similar products for that item. |
| `INVALID_URL` | The link is not a Rakuten Ichiba search link or product link. |
| `ITEM_NOT_FOUND` | The product link in `similarToItems` leads to a deleted or wrong product page. |
| `BLOCKED` | Rakuten refused every attempt for that page (the pages before it are delivered). |
| `NOT_REACHED` | The run timeout arrived before this search. |
| `INVALID_INPUT` | A field has a value the Actor cannot use (the message says which). |
| `UNEXPECTED` | Anything else; the rest of the run continues. |

### Rakuten scraper pricing

Pay per event, no start fee: **US$ 1.00 per 1,000 products** on the Free plan (down to US$ 0.85 on Gold and above). The
proxy is included, Japanese IPs too when Rakuten needs them.

Examples: 1,000 products cost US$ 1.00; a daily 90-product check of one keyword costs about US$ 2.70 a month. Error
rows, duplicates and filtered-out products are free, and `maxItems` is a hard stop.

Video guides from Apify: [how to schedule an Actor](https://www.youtube.com/watch?v=1jI7WcVQmwM) and [how to connect it to other apps](https://www.youtube.com/watch?v=bNACk1_S_6w).

### How the Rakuten scraper works and its limits

- It reads the same search pages the Rakuten website serves, over plain HTTP with a browser-like connection, through
  Apify datacenter IPs with a fresh IP for every page. No login, no API key, no browser. When Rakuten refuses a page
  or returns a suspiciously empty one, the Actor retries it from Japanese residential IPs by itself. Each page takes 3
  to 10 seconds and the Actor fetches 4 pages at a time.
- Similar products are fetched from Japanese IPs only, because Rakuten answers that lookup only inside Japan; a
  product link costs one extra page to read its ids.
- Rakuten shows **45 products per page** and **150 pages (6,750 products) per search**. For more, split the search by
  price range or genre (paste genre search links).
- Search results only: the product page itself (full description, every variant, individual reviews) is not opened.
- Individual reviews and reviewer names are not returned; only the product's average score and review count.

### Second-hand prices in Japan

Rakuten Ichiba is mostly new goods from stores. For the used market, [Mercari Japan Scraper](https://apify.com/scrapewise/mercari-scraper)
returns on-sale and sold Mercari listings and [Yahoo Auctions Japan Scraper](https://apify.com/scrapewise/yahoo-auctions-japan-scraper)
returns final auction prices, for the same keyword.

### Rakuten scraper FAQ

**Do I need a Rakuten account or a Rakuten API application ID?** No.

**Why not the official Rakuten API?** Rakuten's own Ichiba Item Search API needs a registered application ID and has request rate limits. This Actor needs no ID and returns what the search page shows, including the delivery estimate and the similar-products list that the website offers.

**Can I search in English?** Yes, Rakuten matches many English words, but Japanese keywords find far more products.

**What if the run is restarted by the platform?** Products already in the dataset are not charged again: the Actor
reads its own dataset when it starts and skips what was delivered.

**What does a similar-products lookup cost?** The same as a search: US$ 0.001 per product delivered, so a product
with 44 similar items costs about US$ 0.044. Nothing is charged when Rakuten returns no similar products.

**How fast is it?** In our tests: 45 products in 4 to 8 s, 100 products (3 pages) in 18 s, about 44 similar
products for one product link in 4 to 9 s.

### Related scrapers

- [Mercari Japan Scraper](https://apify.com/scrapewise/mercari-scraper): Mercari Japan listings, sold prices and image search.
- [Yahoo Auctions Japan Scraper](https://apify.com/scrapewise/yahoo-auctions-japan-scraper): sold prices and live listings from Yahoo Auctions Japan.
- [Tabelog Scraper](https://apify.com/scrapewise/tabelog-scraper): Japan restaurants, ratings and reviews from Tabelog.
- [Google Shopping Scraper](https://apify.com/scrapewise/google-shopping): Google Shopping prices, offers and EAN lookup.

### Changelog

- **0.1.14 (2026-10-18):** find similar products from a Rakuten product link (`similarToItems`,
  `maxResultsPerItem`, `sourceItem`, `sourceItemId`, error `ITEM_NOT_FOUND`); search pages now load from datacenter
  IPs with a browser-like connection and fall back to Japanese residential IPs on refusal, so pages are faster.
- **0.1 (2026-09-29):** first version: keyword and link search, six sort orders, Rakuten filters, free local filters,
  resume after restart.

Independent tool, not affiliated with Rakuten Group.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on Rakuten Ichiba, one per line. Japanese gives the most results (ワイヤレスイヤホン, プロテイン, 水) and English works too (wireless earphones, protein). Each term runs one Rakuten search with its own limit, and every row keeps its term and its position in the results. Leave empty and use the links below, or leave both empty to run the example 'wireless earphones'. Also accepts 'keywords', 'queries' or 'query'.

## `startUrls` (type: `array`):

Search result links from search.rakuten.co.jp, one per line, for example https://search.rakuten.co.jp/search/mall/wireless+earphones/ or a genre search. The link keeps its own filters (genre, sort, price) and the filters below are added on top. Product links (item.rakuten.co.jp) pasted here are treated as 'find similar products'. Other links return a free error row. Also accepts 'urls' or 'searchUrls'.

## `similarToItems` (type: `array`):

Rakuten Ichiba product links, one per line (https://item.rakuten.co.jp/<shop>/<item>/), or 'shopId/itemId' numbers (the shopId column and the number after ':' in itemCode, e.g. 303383/10000975). For each one the Actor returns the products Rakuten shows as visually similar (似た商品, about 40 to 45 per product, one page), in the same row format plus sourceItem. The product itself is left out. Price range, sort order, free shipping, used and the skip filters below apply. Charged per product like a search. Also accepts 'similarItems'.

## `maxResultsPerItem` (type: `integer`):

How many similar products to take for each product link (Rakuten returns about 40 to 45). Empty or 0 means all of them.

## `maxResultsPerSearch` (type: `integer`):

How many products to take from each search, in the chosen order (1 to 6,750). Rakuten serves 45 products per page and at most 6,750 per search (150 pages). Empty means 45, one page. You pay per product delivered, so raise it step by step. Also accepts 'maxItemsPerSearch'.

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

Hard cap on charged products for the whole run, across all searches and links together (for example 500). Empty or 0 means no run cap besides the per-search limit. Also accepts 'maxResults' or 'limit'.

## `sortBy` (type: `string`):

Order of the results, the same options as the Rakuten search page: Standard (Rakuten's default ranking, used when empty), Price low to high, Price high to low, Newest, Most reviews or Best rated. With a per-search limit it also decides which products you get. A link keeps its own order unless you pick one here.

## `minPrice` (type: `integer`):

Only products priced at or above this amount in Japanese yen (for example 3000), with Rakuten's own price filter. Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Only products priced at or below this amount in Japanese yen (for example 20000), with Rakuten's own price filter. Must be higher than the minimum price. Leave empty for no maximum.

## `freeShippingOnly` (type: `boolean`):

Uses Rakuten's free-shipping filter (送料無料), so every product has shipping included in the price. Off by default.

## `usedOnly` (type: `boolean`):

Uses Rakuten's used-goods filter (中古), so only second-hand products are returned. Off by default, which returns new and used products together.

## `excludeKeywords` (type: `array`):

Words, one per line (for example 中古, ケース, anker). Products with any of them in the name are skipped and not charged. Case does not matter. Useful to drop accessories, cases or a brand from a broad search.

## `excludeSoldOut` (type: `boolean`):

Skips products Rakuten marks as sold out (売り切れ), so every row can still be bought. Skipped products are not charged. Off by default.

## `minReviews` (type: `integer`):

Skips products with fewer reviews than this number (for example 50); skipped products are not charged. Works best with the 'Most reviews' order, because the Actor reads at most 10 extra pages to fill the limit after skipping. Leave empty for no minimum.

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

Keep the default (Apify Proxy on). Search pages are fetched from Apify datacenter IPs with a fresh IP for every page; when Rakuten refuses one or returns a suspiciously empty page, the Actor retries it from Japanese IPs by itself, and similar-product lookups always go through Japan because Rakuten answers them only there. Proxy cost is included in the per-product price. Your own proxy URLs are used as they are, with no fallback.

## Actor input object example

```json
{
  "searchTerms": [
    "wireless earphones"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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 = {
    "searchTerms": [
        "wireless earphones"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/rakuten-japan-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 = {
    "searchTerms": ["wireless earphones"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/rakuten-japan-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 '{
  "searchTerms": [
    "wireless earphones"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/rakuten-japan-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/rakuten-japan-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/3xvgJGFhvgIthSgcZ/builds/3epFGBzZGycyFrGjp/openapi.json
