Rakuten - Products, Variants & Reviews avatar

Rakuten - Products, Variants & Reviews

Pricing

from $1.50 / 1,000 product results

Go to Apify Store
Rakuten - Products, Variants & Reviews

Rakuten - Products, Variants & Reviews

Scrape Rakuten Ichiba (rakuten.co.jp): name, JPY price, reference price and discount, Rakuten points, shipping, stock, shop, genre, tags, images, size/colour variants with per-variant price, specs, and customer reviews with star breakdown and shop replies. Search or paste URLs; incremental mode.

Pricing

from $1.50 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Rakuten Japan Scraper: Products, Variants & Reviews

Scrape Rakuten Ichiba (楽天市場, rakuten.co.jp), Japan's largest online marketplace, into clean structured rows. Search by keyword, genre, tag or shop with Rakuten's own filters, or paste any Rakuten URL you already have. Every product comes back with price, the reference ("was") price and discount, Rakuten points, shipping and delivery, stock, shop, category, tags, images, size and colour variants, full specifications, and individual customer reviews.

Built for price monitoring, catalogue tracking, assortment research and review mining. Fast, with a low cost per record.


What you get

Around 95 fields per product. Highlights:

GroupFields
Identityid (shop-scoped, stable), itemCode, manageNumber, url, name, subtitle, catchCopy, brand
Priceprice, currency (JPY), originalPrice, originalPriceLabel, discountPercent, priceMin, priceMax, hasPriceRange, unitPriceDisplay, subscriptionPrice, subscriptionDiscountPercent, taxIncluded, taxRate
Rakuten pointspointCount, pointBaseMultiplier, pointItemMultiplier, pointShopMultiplier, pointDealMultiplier, isSuperDeal
AvailabilityisSoldOut, availability, inventoryType, isPreOrder
ShippingshippingFee, isFreeShipping, deliveryEstimate, deliveryDays, isRakutenLogistics, isAsuraku, shippingCarriers
ShopshopId, shopName, shopUrlCode, shopUrl, shopRating, shopReviewCount, shopIsExcellent, shopIs39
Mediathumbnail, images, imageCount, videos
TaxonomygenreId, genreIdPath, genrePath, genres, breadcrumbs, tags (id, name, group), tagIds
Variantsvariants (per variant: id, options, price, originalPrice, points, shipping, images), variantAxes, hasMultipleVariants, customizationOptions
Specsdescription, salesDescription, attributes (name/value spec table)
Reviewsrating, reviewCount, ratingBreakdown (1 to 5 star histogram), reviews[], reviewsReturned, aiReviewSummary, aiReviewTopics, reviewUrl
FlagsisUsed, usedCondition, isRental, isSubscription, isHometownTax, isSocialGift, isSponsored
RankinggenreRank, genreRankGenre, genreRankUrl
Change trackingchangeType, changedFields, firstSeenAt, lastSeenAt
ProvenancesearchQuery, sourceUrl, resultPage, resultPosition, scrapedAt, detailFetched, reviewsFetched

Each review row inside reviews[] carries: reviewId, rating, title, body, author (public display nickname), postedAt, orderedAt, verifiedPurchase, helpfulCount, informativeScore, authorAgeRange, authorGender, variantInfo (which variant was bought), surveyAnswers, purchaseUse, purchaseFrequency, purchasePurpose, shopReply, shopRepliedAt, images, imageThumbnails.


Modes

Search mode

Give it keywords, genres, shop codes, or any combination.

{
"mode": "search",
"queries": ["コーヒー豆"],
"genreIds": ["100316"],
"minPrice": 1000,
"maxPrice": 5000,
"minRating": "4",
"condition": "new",
"sortBy": "price-asc",
"maxItems": 200
}

Native filters, all applied by Rakuten itself so you only pay for rows you wanted:

InputWhat it does
queriesOne paginated search per keyword. Japanese and English both work.
genreIdsRakuten genre (category) IDs. Browse a whole genre with no keyword, or narrow a keyword to it.
tagIdsBrand and specification facets. Several tags in the same group behave as "any of".
shopUrlCodesWalk a shop's entire catalogue by its code, for example sawaicoffee-tea.
shopIdRestrict a keyword or genre search to one numeric shop ID.
minPrice / maxPricePrice band in yen.
minRating3.5, 4 or 4.5 and up. These are the three steps Rakuten supports.
conditionNew only, used only, or any.
sortByStandard (relevance), price low/high, price plus shipping low/high, newest, most reviewed, highest rated.

One quirk worth knowing: Rakuten's own search URLs cannot apply a genre and tag filters at the same time. If you set both, the genre is used and the tags are ignored, and the run log says so. Tag filters also need a keyword or a genre alongside them; on their own Rakuten returns nothing, so the actor refuses that combination up front instead of charging you for an empty run.

URL mode

Paste links you already have. Five kinds are recognised:

{
"mode": "url",
"urls": [
"https://search.rakuten.co.jp/search/mall/coffee/?s=2",
"https://www.rakuten.co.jp/category/100316/",
"https://search.rakuten.co.jp/search/inshop/sawaicoffee-tea/",
"https://item.rakuten.co.jp/sawaicoffee-tea/ac-sale-1960/",
"https://review.rakuten.co.jp/item/1/198667_10001136/1.1/"
],
"maxItems": 100
}

Search, category and shop URLs are walked forward page by page. Product and review URLs return that one product directly, with no wasted search. Reading the page you actually pasted is never charged the enrichment surcharge, because that page is the request.


Discounts and the "was" price

Rakuten does not put a strike-through price on search result cards. It publishes the reference price only on the product page, per variant. So originalPrice, originalPriceLabel and discountPercent are filled in when fetchDetails is on, and are null otherwise.

Verified live on 2026-08-27 against item.rakuten.co.jp/miyoshi-ya/wa-02002/:

{
"price": 880,
"originalPrice": 1760,
"originalPriceLabel": "当店通常価格",
"discountPercent": 50,
"variants": [{ "variantId": "16154", "options": ["抗菌ライトオーク"], "price": 880, "originalPrice": 1760 }]
}

Reviews

Rakuten Ichiba exposes reviews publicly, and this actor reads them. Turn on fetchReviews and set maxReviewsPerItem (0 returns every review a product has).

You get the aggregate (rating, reviewCount), the full 1 to 5 star ratingBreakdown, Rakuten's own AI review summary and topic sentiment, and the individual reviews with the shop's public replies and any photos reviewers attached.

Verified live on 2026-08-27 against a product with 50,021 reviews: rating 4.7, breakdown [5★ 38274, 4★ 9587, 3★ 1494, 2★ 319, 1★ 348], 30 individual reviews per page across multiple pages, each with rating, text, nickname, date, helpful count, the variant purchased and, where present, the shop's reply.

A product with no reviews returns reviews: [], reviewsReturned: 0, and leaves rating and ratingBreakdown empty rather than inventing zeros.

Only what Rakuten itself displays publicly is copied. Reviewer display nicknames are included because they are shown on the page, together with the order date Rakuten itself prints on the review.

Two further reviewer-supplied attributes are copied when, and only when, Rakuten publishes them beside the review: authorAgeRange, a coarse decade band such as 40代, and authorGender. Both are optional self-declared profile fields, both are printed publicly on the review page, and both come back null when the reviewer did not publish them. If you do not want them, drop the two columns on export.

No account identifier, email address, phone number, postal address or any other contact detail is ever collected.


Country scope: Japan only, and why

This actor covers rakuten.co.jp (Rakuten Ichiba, Japan) only. That is a deliberate decision, not an omission. Every other Rakuten country property was re-checked live on 2026-08-27, each one fetched with the same real-browser client this actor uses:

PropertyWhat it actually servesVerdict
www.rakuten.com (US)200. The Rakuten cash-back and coupon portal ("Coupons, Promo Codes & Cash Back"). No marketplace catalogue, nothing resembling Ichiba's data shape.Different product, out of scope
global.rakuten.com200, redirecting to /corp/, where it serves Rakuten Group corporate and investor pages. The storefront paths are the part that is gone: /en/ and /en/store/ both return 404 "Page not found". Rakuten Global Market is retired; the hostname is not.Storefront retired, host alive
fr.shopping.rakuten.com (France)200, ~450 KB of a live marketplace (formerly PriceMinister) with its own URL grammar, its own catalogue, EUR prices and a different page structure.Separate site, own actor
www.rakuten.com.tw (Taiwan)200, ~950 KB of a live, actively maintained Chinese-language storefront. It has its own URL grammar (/search/<keyword>/, /shop/<code>/), its own catalogue and TWD prices - none of which match Ichiba's search.rakuten.co.jp/search/mall/... pages or their structure.Separate site, own actor

On how these were checked. Rakuten's edge refuses requests that do not look like they came from a real browser, and it refuses them before answering - so a naive check can make a perfectly healthy storefront look like a dead host. Every row above was fetched exactly the way this actor fetches rakuten.co.jp, so "live" and "404" mean what a real browser sees. In particular www.rakuten.com.tw resolves and serves a full storefront: any claim that it is gone is an artefact of the probe, not a fact about the site.

The scope decision does not rest on any of these being dead. It rests on them being different platforms: separate catalogues, separate currencies, separate URL grammars and separate page payloads, with no shared or trivially parameterisable backend behind them. A country input on this actor would have been a label with nothing behind it, so it is not offered. Rakuten France and Rakuten Taiwan are each a reasonable candidate for a separate actor with its own extraction logic.


Incremental mode and resume

Two different things, both included.

incrementalMode is for recurring monitoring. Schedule the same search daily and later runs return only what actually changed:

  • changeType is NEW, UPDATED, REAPPEARED or EXPIRED
  • changedFields names exactly what moved, for example ["price"] or ["isSoldOut", "pointCount"]
  • firstSeenAt and lastSeenAt track each product's lifetime

Unchanged products are suppressed by default, so you are not billed for rows you already have. Turn on emitUnchanged for a full snapshot every run, or emitExpired to be told when a product disappears. Both return, and bill, extra rows.

Fields that change on their own every day without the product changing are deliberately excluded from change detection: the delivery-date estimate, the daily genre ranking position, the site-wide Rakuten sale window, and the AI-generated review summary. Price, discount, stock, points, rating and review count all count as real changes.

EXPIRED is only produced after a run has fully scanned the tracked search with nothing capped, nothing resumed, nothing unreadable and something actually found. A partial run never tombstones live products.

resumeFromRunId continues one specific interrupted run. Paste the previous run ID (or dataset ID) and rows already collected there are skipped. Runs also survive a platform migration or a Resurrect on their own, without re-collecting or re-charging anything.


Pricing

Billing has three components, each with volume tiers:

EventWhat triggers it
Actor startOnce per run.
Product resultEach product row returned in the dataset.
Product detail and reviewsOnce per product when fetchDetails and/or fetchReviews is on. A product enriched with both is charged once, not twice.

A suppressed row in incremental mode is never charged, even though its pages were still read to work out whether anything changed. A failed enrichment is never charged either.


Connection

The Apify Proxy default group is enough, and it works on every plan. Switch to a different proxy group only if a run reports pages it could not read.

If every page of a run is refused, the run fails with a clear message rather than quietly reporting an empty search. "We found nothing" and "we could not read anything" are never confused.


Limits worth knowing

  • Rakuten caps how deep any single search can be walked. The result pages report the reachable slice themselves (often a few hundred products for a broad keyword, even when millions match), and the walk stops there. To go wider, split the search: add genres, tags, price bands or shop codes.
  • Result pages carry about 45 products each.
  • A shop walk (shopUrlCodes, or a pasted /search/inshop/<code>/ URL) is Rakuten's own in-shop search, and Rakuten mixes a few rows from other shops into it - measured at 2 of 48 on a live walk. Rakuten does not flag those rows, and this actor returns them as Rakuten served them rather than silently dropping rows it cannot prove are foreign. Every row carries shopUrlCode and shopId, so filter on the code you asked for if you need a strictly single-shop catalogue.
  • Rakuten mixes paid placements into every result page, including sorted ones, so a price-sorted run is not perfectly monotonic. Those rows are marked isSponsored: true so you can filter or keep them deliberately. Measured on a price-sorted, price-banded run of 60 products: 2 sponsored rows.
  • Prices are in Japanese yen, tax included as displayed by the shop.

Send results into your apps (MCP connectors)

Optionally pipe results into Notion, Linear, Airtable or Apify through MCP connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed summary per product; the complete record always stays in the dataset.