Rakuten Ichiba API & Scraper
The Rakuten Ichiba API returns product data from Japan's largest e-commerce marketplace as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary search endpoint returns items with name, price (JPY), shop, points, shipping price, review URL and images, and you can pull an item, reviews, variants, a shop, a ranking and the genre tree. It is built for price intelligence, catalog enrichment and Japanese e-commerce analytics that need Rakuten data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.
Rakuten Ichiba identifiers: which id is which, and where the prices come from
This is Rakuten Ichiba, the Japanese marketplace at rakuten.co.jp, not Rakuten's US, French or German storefronts. One field name, item_code, means two different things depending on the action, which is the single most likely thing to break a pipeline here. All values below were measured on 2026-08-27 against items seedcoms/10003515-198 and meisei/246.
| Identifier or field | What it holds | Measured example |
|---|---|---|
| item_code in search rows | The numeric item id | Search returned item_code "10000150" for the meisei cable; calling item on that URL returned item_id 10000150 |
| item_code in item detail | The shop's own SKU string, which is not the same thing | The same meisei cable returned item_code "246"; the seedcoms supplement returned item_code "P6-1" |
| manage_number | The path segment in item.rakuten.co.jp/<shop_code>/<manage_number>/ | "10003515-198" for seedcoms, "246" for meisei |
| shop_code | The shop's urlCode, always a string | "seedcoms", "meisei", "rakuten24" |
| shop_id | Numeric shop id, typed inconsistently across actions | Integer 390372 in search rows, string "390372" in the item response for the same shop |
| review_url | review.rakuten.co.jp/item/1/<shop_id>_<item_id>/1.1/ | 270693_10006243 for the seedcoms item, 390372_10000150 for the meisei one |
| item_price | Integer JPY, no decimals, and no separate tax field anywhere in the response | 198, 258, 328, 1980 |
| points | Campaign reward points, not a flat percentage of price | 20 points on a 258 yen item, 10 on 328, 270 on 1980; one shop page ranged from 6 to 1,882 |
| review_average | Star average, but not always present | null on the seedcoms item despite review_count 684; 4.429999828338623 on the meisei item, which search reported as 4.43 |
| Rows per response | search pages report page_size 45 but return a few more | 49 and 50 rows measured on two different keywords; ranking returns 80, reviews 30 |
| genre_id | Numeric category id, with genre_path giving the ancestry | genre_id "564278" with genre_path "/0/564500/564278" |
There is no tax field and no tax-inclusive flag anywhere in the response. item_price is the single integer figure the listing displays, so carry it as-is rather than deriving a pre-tax number from it.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/rakuten/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"keyword": "ヘッドホン"
}
}{
"ok": true,
"meta": {
"api": "rakuten",
"endpoint": "search",
"mode": "live",
"latency_ms": 1050.9,
"record_count": 50,
"bytes": 1000180,
"cache_hit": false,
"method": "embedded_ssr_state",
"url": "https://search.rakuten.co.jp/search/mall/%E3%83%98%E3%83%83%E3%83%89%E3%83%9B%E3%83%B3/",
"page": 1,
"page_size": 45,
"has_more": true,
"total": 588939,
"next_page": 2
},
"data": {
"results": [
{
"item_code": "10002315",
"item_name": "Anker Soundcore Q30i (Bluetooth5.3 ワイヤレス ヘッドホン)【ウルトラノイズキャンセリング/外音取り込みモード/Bluetooth対応/ハイレゾ対応(AUX接続時) / 最大80時間音楽再生 / マイク内蔵/専用アプリ対応】",
"item_price": 9990,
"currency": "JPY",
"item_url": "https://item.rakuten.co.jp/anker/a3028n/",
"shop_name": "アンカー・ダイレクト楽天市場店",
"shop_code": "anker",
"shop_id": 294713,
"review_average": 4.76,
"review_count": 41,
"review_url": "https://review.rakuten.co.jp/item/1/294713_10002315/1.1/",
"image_urls": [
"https://thumbnail.image.rakuten.co.jp/@0_mall/anker/cabinet/listing/tmb/a3028n/a3028n_normal_v2.jpg"
],
"availability": "in_stock",
"genre_id": "502835",
"genre_path": "/0/211742/100155/502835",
"subtitle": "最大24ヶ月保証",
"shipping_price": 0,
"points": 90,
"is_sold_out": false,
"product_url": null
},
{
"item_code": "10000135",
"item_name": "★7/17AM10:00〜クーポン割!【公式限定】 JBL ワイヤレスヘッドホン TUNE770NC | ジェービーエル 高音質 ノイズキャンセリング ヘッドホン ヘッドフォン オーバーイヤー Bluetooth 5.3 アプリ対応 ブルートゥース 折り畳み マルチポイント接続",
"item_price": 12980,
"currency": "JPY",
"item_url": "https://item.rakuten.co.jp/jblstore/tune-770nc/",
"shop_name": "JBL・AKG公式ストア",
"shop_code": "jblstore",
"shop_id": 398768,
"review_average": 4.7,
"review_count": 393,
"review_url": "https://review.rakuten.co.jp/item/1/398768_10000135/1.1/",
"image_urls": [
"https://thumbnail.image.rakuten.co.jp/@0_mall/jblstore/cabinet/event/2607m2_thumb/th_tune770_2607m2.jpg"
],
"availability": "in_stock",
"genre_id": "502835",
"genre_path": "/0/211742/100155/502835",
"subtitle": "「 詩羽 ヘッドホン 」JBL PURE BASSサウンドを再現する40mmドライバー搭載 JBL ヘッドホン ヘッドフォン ワイヤレス bluetooth 有線 ワイヤレス",
"shipping_price": 0,
"points": 118,
"is_sold_out": false,
"product_url": null
},
{
"item_code": "10000021",
"item_name": "EDIFIER W820NB PLUS Gen2 ワイヤレスヘッドホン Bluetooth 6.1 ノイズキャンセリング Hi-Res LDAC対応 最大88時間再生 マルチポイント接続 折りたたみ式 マイク付き 無線 軽量 オーバーイヤー ヘッドフォン PC スマホ iPhone Android テレビ かわいい",
"item_price": 8980,
"currency": "JPY",
"item_url": "https://item.rakuten.co.jp/edifier-2022/w820nbplus/",
"shop_name": "EDIFIER楽天市場店",
"shop_code": "edifier-2022",
"shop_id": 415727,
"review_average": 4.59,
"review_count": 997,
"review_url": "https://review.rakuten.co.jp/item/1/415727_10000021/1.1/",
"image_urls": [
"https://thumbnail.image.rakuten.co.jp/@0_mall/edifier-2022/cabinet/09887945/12271860/imgrc[redacted-phone].jpg"
],
"availability": "in_stock",
"genre_id": "502835",
"genre_path": "/0/211742/100155/502835",
"subtitle": "ノイズキャンセリング・マルチポイント接続・ハイレゾ・LDAC対応・外音取り込み・風切り音低減・折り畳み可能・通話ノイキャン・USB-C急速充電・低遅延ゲームモード・専用アプリ",
"shipping_price": 0,
"points": 81,
"is_sold_out": false,
"product_url": null
}
],
"keyword": "ヘッドホン",
"genre_id": null,
"page": 1,
"page_size": 45,
"has_more": true,
"total": 588939,
"next_page": 2
}
}What the Rakuten Ichiba API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Rakuten Ichiba by keyword or genre with sort and price filters — returns items with name, price (JPY), shop, points, shipping, rating and images. Paginated. | Pricing teams call search to search Rakuten Ichiba by keyword or genre with sort and price filters. | keyword, q, genre_id, page, sort, ... |
| item | Get a Rakuten Ichiba product's detail — title, price (JPY), brand, shop, rating, images, category breadcrumbs, spec attributes, shipping and points. | Marketplace operators call item to get a Rakuten Ichiba product's detail. | url, item_url, shop_code, item_path, manage_number |
| reviews | Get ALL buyer reviews for a Rakuten Ichiba item, paginated (30/page) — rating, body, reviewer nickname, post date and helpful count, plus the total review count. | Catalog enrichment teams call reviews to get ALL buyer reviews for a Rakuten Ichiba item, paginated (30/page). | url, item_url, shop_code, item_path, manage_number, ... |
| variants | Get a Rakuten Ichiba item's SKU variant matrix — every color/size/option combination with its price and images. | Retail analysts call variants to get a Rakuten Ichiba item's SKU variant matrix. | url, item_url, shop_code, item_path, manage_number |
| shop | List a Rakuten Ichiba shop's catalog by shop_code — every item the shop sells, paginated. | Pricing teams call shop to list a Rakuten Ichiba shop's catalog by shop_code. | shop_code, sid, page |
| ranking | Get the Rakuten Ichiba best-seller ranking — overall or for a genre, by day/week/realtime/month. | Marketplace operators call ranking to get the Rakuten Ichiba best-seller ranking. | genre_id, period, page |
| genres | Browse the Rakuten Ichiba category (genre) tree — top-level categories, or pass genre_id for a subtree. | Catalog enrichment teams call genres to get browse the Rakuten Ichiba category (genre) tree. | genre_id |
Call search from your stack
curl -X POST https://api.reefapi.com/rakuten/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"keyword":"ヘッドホン"}'import requests
r = requests.post(
"https://api.reefapi.com/rakuten/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"keyword": "ヘッドホン"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/rakuten/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"keyword": "ヘッドホン"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.rakuten.search with {"keyword":"ヘッドホン"}.Who uses this API and why
- Pricing teams call search and ranking to track Rakuten prices and best-sellers by genre.
- Catalog-enrichment tools use item and variants to fill listings with images and options.
- Market analysts use genres and shop to map supply and top sellers in the Japanese market.
Questions developers ask before integrating
Which Rakuten does this cover?
Rakuten Ichiba, the Japanese marketplace on rakuten.co.jp. Prices come back as integer JPY, item names and review bodies are in Japanese, shop names are Japanese, and images are served from thumbnail.image.rakuten.co.jp and tshop.r10s.jp. Keyword search accepts either Japanese or Latin text: "iphone" reported 8,254,515 matches and "ヘッドホン" reported 601,555.
Why does item_code mean something different in search than in item?
Because the two surfaces label their identifiers differently and the engine passes each through as found. A search row for the meisei cable returned item_code "10000150", which is the numeric item id; calling item on that same URL returned item_id 10000150 and item_code "246", which is the shop's SKU. The safe join key across actions is the pair shop_code plus manage_number, or the item_url itself, not item_code.
Do the prices include tax?
There is no way to tell from the response, because there is no tax field, no tax-inclusive flag and no pre-tax figure in search, item, variants or ranking. item_price is a single integer in JPY, exactly the number the listing shows, and currency is always "JPY". If your accounting needs a split, you have to apply Japanese consumption tax rules yourself against the displayed figure.
What are the points values?
Campaign reward points the buyer earns, and they are not a fixed percentage of the price. Measured examples: 20 points on a 258 yen cable, 10 on a 328 yen case, 270 on a 1,980 yen lotion, and one catalogue page spanning 6 to 1,882 points. points appears on search rows but not on the item detail response, so pull it from a listing row when you need it.
Why is review_average null when review_count is not zero?
The item detail surface does not always carry the aggregate. The seedcoms item returned review_average null alongside review_count 684, and the reviews action returned the same null in its summary while still paging 684 real reviews. Where it is present it can arrive with float artifacts: the meisei item returned 4.429999828338623 for an average that search reported as 4.43. Take the average from a search row and round it.
How do I page through every review on an item?
The reviews action returns 30 per page, with meta.total giving the real count and meta.next_page pointing forward, so 684 reviews is 23 pages. Each row carries rating as an integer 1 to 5, body, reviewer (a Japanese handle ending in さん), helpful_count, posted_at and, usefully, ordered_at, which is the purchase date rather than the review date, so you can measure the gap between buying and reviewing.
Why do search pages return more rows than page_size?
page_size reports 45 but the actual page carries a handful more: two different keyword searches returned 49 and 50 rows. Because the next_page cursor advances by the reported page size, consecutive pages can overlap. Deduplicate on item_url when you concatenate pages rather than assuming every row is new.
What does the variants action give me?
One row per selectable combination, each with variant_id, selector_values, item_price, currency and merchant_sku_id. A phone case returned 31 variant rows across two selectors, タイプ for model and カラー for color, all at the same 328 yen. Two things to expect: variant_id has no consistent format, mixing plain numbers like "24737" with strings like "r-sku00000009", and image_urls came back empty on every variant, so per-variant photos are not available.
What is the Rakuten Ichiba API?
Rakuten Ichiba API is a ReefAPI endpoint group for rakuten ichiba It returns live JSON through POST requests under /rakuten/v1.
Is the Rakuten Ichiba API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Rakuten Ichiba calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Rakuten Ichiba login or account?
No login to Rakuten Ichiba is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Rakuten Ichiba data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Rakuten Ichiba API use?
Rakuten Ichiba actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Rakuten Ichiba from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call rakuten actions with the same key, credit pool and JSON envelope used by normal REST requests.