MUJI Scraper icon

MUJI Scraper

Scrape MUJI products from the United States, Canada and Australia storefronts. Search by keyword or paste product, category and search links. Returns…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

MUJI Scraper at a glance

MUJI Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes product, change type (incremental mode), country, currency and price, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce
Pricing
$2.20 per 1,000 results (Free plan), from $1.50 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
28 options

Scrape MUJI products from the United States, Canada and Australia storefronts. Search by keyword or paste product, category and search links. Returns price, was-price and discount, per-variant stock, sizes, colours, media, materials and customer reviews, plus Incremental mode for change monitoring.

What MUJI Scraper can do

  • Three country storefronts, one actor. Search by keyword or paste links for the United States, Canada or Australia; each keeps its own country, currency, prices and stock, and links from different countries can be mixed in one run.
  • A full pricing picture. Current price, was-price, discount amount and discount percentage, plus per-variant stock and backorder status.
  • Deep detail on demand. Full description, breadcrumb, extra media, materials, measurements, care notes and country of origin, toggled per run so you only pay for what you use.
  • Customer voice. Individual reviews with rating, title, text, author, date, verified-buyer flag, helpful votes and photos, plus the per-star breakdown, where the storefront publishes them.
  • The storefront's own filters. Category, colour, size, price range and availability, matched to each storefront's own values so spelling and capitalisation are handled for you.
  • Five ways to order results. Relevance, price, name, newest or best selling.

Choose what to collect

These inputs let you configure MUJI Scraper - Products, Prices, Stock & Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose 'search' for keywords plus filters, or 'url' to scrape pasted MUJI links. Each mode reads only its own field below.

Choices: search, url

queriesarrayOnly used when mode = search, ignored in URL mode. One or more keywords, for example 'aroma diffuser' or 'oxford shirt'.
urlsarrayOnly used when mode = url, ignored in search mode. Product links under /products/, category links under /collections/ and search links under /search?q= are all accepted. A category or search link that already carries page=N starts at that page rather than at page 1. A product link ending in .json works too. sort_by= and the price / availability filters on a link are honoured for that link. Leaving this empty in URL mode runs the 11 example links.
countrystringWhich MUJI storefront to read. Each one has its own catalogue, its own prices in its own currency and its own stock. In URL mode this is only the fallback: a pasted link's own address decides its country. MUJI Japan and MUJI Europe run on separate platforms and are not covered here.

Choices: us, ca, au

categorystringOptional. Keep only products in this catalogue category, exactly as MUJI names it, for example 'Aroma Diffusers', 'Ballpoint Pens' or 'Shirts'. Category names differ between country storefronts.
colorstringOptional. Keep only products offered in this colour, for example 'Navy' or 'Off White'. The storefront's own colour list is read at run time, so spelling and capitalisation are matched for you.
sizestringOptional. Keep only products offered in this size, for example 'M', 'L' or 'A4'. The storefront's own size list is read at run time, so spelling and capitalisation are matched for you.
Show 21 more inputs
More input fields
InputWhat it controls
minPriceintegerOptional. Only keep products whose current price is at or above this amount, in the storefront's own currency.
maxPriceintegerOptional. Only keep products whose current price is at or below this amount, in the storefront's own currency.
inStockOnlybooleanOptional. Keep only products that can be bought right now. Sold-out products are returned by default so you can track them.
sortBystringHow to order results. Relevance and price are ordered by MUJI itself. A category or search link can also order by name, newest and best selling; a keyword search cannot, so for a keyword search name and newest are applied over the products the run collects, and best selling falls back to relevance.

Choices: relevance, price_asc, price_desc, title_asc, newest, best_selling

fetchDetailsbooleanCollect each product's full description, category breadcrumb, extra images and videos, materials, measurements, care notes and country of origin. Turn off for a lighter run that returns only the listing-level fields. A pasted product link always returns full detail, because there is no listing card behind it.
fetchReviewsbooleanAlso collect individual customer reviews for each product: rating, title, text, author, date, verified-buyer flag, helpful votes and review photos, plus the per-star breakdown. The average rating and review count are always returned without this. Not every MUJI country publishes individual reviews; where none are published, reviews come back as an empty list and reviewsAvailable is false.
maxReviewsPerProductintegerCap on how many individual reviews are collected for each product when 'Fetch customer reviews' is on. Newest first.
maxItemsintegerMaximum number of products to return across the whole run. This is the run's cap. Use 0 for unlimited.
maxPagesintegerMaximum number of result pages to take per keyword or link. 0 = unlimited; the run then stops only at Max products, or when there are no more results.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large catalogue pull without returning or charging for products already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns every matching product as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products. A product is UPDATED when any of its stored fields moves (price, was-price, promo, stock including per-variant stock, copy, images, options); review text, ratings and review counters, scrapedAt and updatedAt never count, and 'Change scope' narrows this to price and stock only. Turn on 'Emit unchanged' or 'Emit expired' only when you also want those rows returned (and billed). State is kept separately for each storefront, search and filter setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the storefront, search and filter settings, so two different searches never mix state.
emitUnchangedbooleanOff by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want a full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, never when Max products capped it or Resume was used. This returns, and bills, extra rows, so leave it off unless you need expiry tracking.
changeScopestringAll fields (default): any change to a stored field except reviews, ratings and timestamps makes a product UPDATED. Price and stock only: only price, was-price, discount, on-sale flag, in-stock flag and each variant's price and availability decide UPDATED; copy, images and labels never do. Switching scope never restarts the baseline, with or without a state key: stored products are compared again under the new scope, so nothing comes back as NEW or is billed again because of it.

Choices: all, priceAndStock

compactUpdatesbooleanOff by default. UPDATED and EXPIRED rows are slimmed down to identifiers, current price and stock, priceChanges (old and new value) and variantChanges. NEW rows stay full. A compact row carries no product details, so it does not incur the detail-enrichment charge.
expireAfterMissedScansintegerUsed with Emit expired. A product is marked EXPIRED only after it was missing from this many consecutive complete scans (default 1). EXPIRED means the product dropped out of the scanned search, which a listing change and a delisting both cause; use the stock fields for availability.
ignoreFieldsForChangesarrayField names that must never make a product UPDATED or appear in changedFields, for example description. Dotted paths reach inside variants: variants.image drops the image from every variant while variant price and stock still count. Ignored fields are still returned in every row. Reviews, ratings and timestamps are always ignored. Adding or removing a field here never restarts the baseline: no product comes back as NEW or is billed again because of it.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per product; other connectors get a best-effort write or digest. Each connector receives a condensed summary per product, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which product pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on products written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

titleProduct
changeTypeChange type (incremental mode) (text)
countryCountry
currencyCurrency
pricePrice
originalPriceWas
discountPercentDiscount %
onSaleOn sale (boolean)
inStockIn stock (boolean)
categoryCategory
ratingRating
reviewCountReviews
Show 24 more fields
sizesSizes (array)
colorsColours (array)
skuSKU
productIdProduct ID
featuredImageImage (image)
urlURL (link)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
descriptionDescription
materialsMaterials
countryOfOriginCountry of origin
measurementsMeasurements
dimensionsDimensions
careInstructionsCare
variantsVariants (array)
imagesImages (array)
reviewsreviews
authorAuthor
bodyReview text
dateReview date
helpfulVotesHelpful votes
priceChangesPrice changes (text)
variantChangesVariant changes

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "productId": "0000000000001",
  "handle": "sample-product-handle",
  "title": "Sample Product Name",
  "url": "https://www.muji.us/products/sample-product-handle",
  "country": "us",
  "countryName": "United States",
  "currency": "USD",
  "brand": "MUJI",
  "category": "Aroma Diffusers",
  "productCategory": "Diffusers",
  "tags": [
    "Aroma Diffuser",
    "Best Seller Home"
  ],
  "price": 42.5,
  "originalPrice": 55,
  "discountAmount": 12.5,
  "discountPercent": 22.7,
  "onSale": true,
  "inStock": true,
  "variantCount": 2,
  "inStockVariantCount": 1,
  "sizes": [
    "S",
    "L"
  ],
  "colors": [
    "Black",
    "White"
  ],
  "variants": [
    {
      "variantId": "0000000000002",
      "sku": "0000000000000",
      "title": "S / Black",
      "price": 42.5,
      "originalPrice": 55,
      "available": true,
      "backorder": false
    }
  ],
  "featuredImage": "https://example.com/images/00000000.jpg",
  "images": [
    "https://example.com/images/00000000.jpg"
  ],
  "rating": 4.3,
  "reviewCount": 128,
  "reviewsAvailable": true,
  "reviews": [
    {
      "reviewId": "000000001",
      "rating": 5,
      "title": "Sample review title",
      "body": "Sample review text appears here.",
      "author": "Reviewer Name",
      "date": "2026-01-01T00:00:00.000Z",
      "verifiedBuyer": true
    }
  ],
  "description": "Full product description appears here when Fetch product details is on.",
  "materials": "Cotton",
  "countryOfOrigin": "Japan",
  "attributes": {
    "custom.purposes": [
      "Long Sleeve"
    ]
  },
  "source": "search",
  "sourceRef": "aroma diffuser",
  "scrapedAt": "2026-01-01T00:00:00Z"
}

Ways to use this data

  • Price and discount tracking: monitor was-price, discount percentage and stock across a catalogue on a recurring schedule.
  • Assortment comparison: compare category, pricing and stock across the US, Canada and Australia storefronts.
  • Product research and cataloguing: pull full descriptions, materials, measurements and media for a product line.
  • Review analysis: collect individual customer reviews and ratings to track sentiment on top sellers.
  • Competitive and catalogue monitoring: watch a category or search result for new arrivals and price changes.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does MUJI Scraper return?

The documented output for MUJI Scraper includes product, change type (incremental mode), country, currency, price, was, discount % and on sale. Availability of each field depends on the source page and the selected mode.

How much does MUJI Scraper cost?

It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated products, and unchanged ones are not billed. stateKey lets you name a monitoring campaign so its state stays stable across runs.

Why does a category or search link sometimes return fewer products than expected?

The run stops at Max products, or at Max pages if that is set lower. Raise either one, or set it to 0, to collect more of a large category.

Why did my run fail instead of returning an empty dataset?

If the storefront refuses every request, the run stops with a clear message so "no matching products" is never confused with "nothing could be read". Run it again in a few minutes. If only some links or pages could not be read, you still get what was found.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with MUJI Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.