How to Scrape Rakuten Japan Listings and Compare Shop Offers
On Rakuten Ichiba, two shops can sell the same model with different shipping terms and points offers. A useful comparison keeps the cash price, shipping, and loyalty points separate before deciding which offer suits a buyer.
The Rakuten Japan Listings Scraper collects product listings from Japanese keyword searches, genres, shop catalogs, or direct product pages. I maintain this Apify Actor. It returns JPY prices, shop identity, reviews, shipping information, and available product attributes; detail collection adds information at an additional event cost.

Choose HTML search or the API path
Without appKey, the Actor uses HTML scraping. The current deployed schema defaults to residential proxies because Rakuten can block datacenter IPs. This differs from older README wording that says proxies are unnecessary, so the example follows the deployed configuration.
If you have a Rakuten Webservice application ID, entering it in the secret appKey field switches to the official API path. The documented API ceiling is thirty items per page over 100 pages, or 3,000 items per query. That path should be tested separately before replacing an HTML-based workflow because the source and available fields can differ.
For the first comparison, use one precise keyword and the HTML defaults. Search objects go in searchQueries; each contains keyword and can include genreId, sort, and pages. This is not an array of bare keyword strings.
Collect twenty search results
Open the Actor on Apify, select Input, choose JSON, and enter:
{
"searchQueries": [
{"keyword": "iphone", "genreId": "560202", "pages": 1}
],
"includeDetails": false,
"maxItems": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
The documented genre ID 560202 narrows this example to smartphones, but you still need to separate generations, storage capacities, and conditions. Replace the keyword with the precise model you need after checking how it appears in Japanese listings.
Click Start and inspect the completed dataset. maxItems caps products across all queries, genres, shops, and direct product URLs in the run. Its default is 1,000 and minimum is one. pages applies to a search object; the HTML page limit is capped at 150. A one-page query can return fewer than the global item cap.
For keyword-free genre browsing, use genreIds. To inspect a particular shop, use its slug in shopUrlCodes. For known products, use pdpUrls with URLs shaped like https://item.rakuten.co.jp/{shop}/{item}/. Supply real copied URLs, not IDs inferred from a title.
Read an offer with its shop attached
The output includes itemCode, shopUrlCode, itemUniqueKey, url, name, brand, price, currency, rakutenPoints, isSoldOut, reviewScore, and reviewCount. The shop object, shipping object, tag array, and source fields carry important context.
Use itemUniqueKey to distinguish an item within its shop. A product sold by two shops is two offers, even if its title is identical. Conversely, two different titles may refer to the same model, so titles alone are a weak cross-shop matching key.
shipping.price and shipping.estimateDeliveryDay describe available shipping information. A missing shipping amount should remain unknown, not become zero. rakutenPoints belongs in a separate column from price because its value to a buyer depends on eligibility and redemption conditions.

The retained screenshot and README sample illustrate the field layout. They are not fresh prices or availability checks. Review the source page for the chosen variant before treating a listing price as a quote.
Add details only where needed
Set includeDetails to true to follow search results to product pages. The documented additions include description, breadcrumbs, and microdata-derived availability values such as InStock, OutOfStock, or PreOrder where present.
A broad name or a low headline price may hide a different variant. Use descriptions and the original product page to confirm model, capacity, condition, and included accessories. Do not overwrite missing variant facts with an assumption from the search keyword.
For a fixed shortlist, copy its product URLs into pdpUrls and remove the broad search input. The README documents detail-only billing for direct pages. This can be useful when you have already collected the offers and need to review only selected products.
Build a shop-offer comparison
Export JSON to preserve tags and shipping objects, then flatten the fields you need for a spreadsheet. Retain item key, product URL, shop code, name, price, currency, shipping price, points, availability, and scrapedAt.
First remove duplicate item keys. Next add reviewed columns for model, variant, condition, and bundle contents. Group only matching offers. Compare cash price plus confirmed shipping, leaving totals blank when shipping is unknown. Display points separately rather than silently subtracting them.
Add stock status and delivery text beside the total. A preorder and an immediately available item answer different purchasing needs. Keep review counts beside review scores, and do not treat product reviews as a direct audit of the shop's service.
For refreshes, join by itemUniqueKey and retain the previous observation. Confirm large changes on the source page, especially where the selected variant may have changed. A missing result in a capped query does not establish that the shop removed the product.
Calculate the two event charges correctly
Pricing as of September 6, 2026 is $0.0015 per listing and $0.004 per product detail. Unlike scrapers with alternative modes, Rakuten enrichment is additive: twenty successful listings plus twenty details produce $0.03 + $0.08 = $0.11 in product events. Twenty direct product pages correspond to $0.08 in detail events alone.
The start event is $0.00005 per GB of allocated memory, minimum one event. Check live pricing, proxy usage, and other separately billed account resources before expanding the run.
For 403 responses, inspect the proxy configuration and run log before assuming the query is empty. For API-mode work, consult Rakuten Webservice for the application's current requirements. The Rakuten Node.js example supports repeat exports. If you also research Mercari Japan, keep resale condition and marketplace differences explicit when comparing its offers with Rakuten.
Frequently asked questions
Are detail fees added to listing fees?
Yes. Search results enriched with includeDetails incur both product-listing and item-detail events. Direct pdpUrls incur detail events without a search-listing event.
Do I need a Rakuten API key?
No key is required for HTML mode. Supplying appKey switches to the Rakuten Webservice API path, which has a documented limit of 30 items across 100 pages, or 3,000 items per query.
Can I subtract rakutenPoints directly from the displayed price?
Keep points separate from the cash price. Eligibility and redemption conditions need checking before treating them as an effective discount for a particular buyer.
