Nitori Japan Furniture & Home Goods Scraper avatar

Nitori Japan Furniture & Home Goods Scraper

Pricing

from $1.50 / 1,000 product results

Go to Apify Store
Nitori Japan Furniture & Home Goods Scraper

Nitori Japan Furniture & Home Goods Scraper

Scrape Nitori Japan (nitori-net.jp) furniture and home goods by keyword, category or pasted link. Filter by category, brand, colour and price. Returns name, code, price, original price, images, variants, specifications, delivery and assembly terms and reviews. Incremental mode tracks daily changes.

Pricing

from $1.50 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Scrape products from Nitori Japan (nitori-net.jp), the country's largest furniture and home-goods retailer. Search the catalogue by keyword, browse a whole category with the store's own filters, or paste product, category and search links, including bare product codes. Every product comes back as one flat record with price, discount, images, stock and category; enable details to add the full specifications, delivery and assembly terms, colour and size variants, the original pre-discount price, and customer reviews. Export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Two ways to find products. Search by keyword, browse a whole category with no keyword at all, or paste product, category and search links, mixed freely with bare product codes.
  • The store's own filters, applied at the source. Category, brand, colour, price range, sale-only, stock and rating narrow the result count on the store's own catalogue, in both search and url mode.
  • Full detail on demand. Switch on specifications, delivery and assembly terms, the full media gallery, colour and size variants, and the original pre-discount price, and pay the detail surcharge only when you use it.
  • Customer reviews included. Average rating, the per-star breakdown, and individual review rows with author, date, rating, text, helpful count and photos.
  • Native JPY pricing. This is a single-market, Japanese-language storefront, so every price and field comes back exactly as the store reports it, no currency conversion involved.
  • Built for schedules. Incremental mode returns only new, updated and reappeared products on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
  • Resume one interrupted run. Continue a large pull by run or dataset id without paying twice for what it already collected, separate from scheduled incremental monitoring.

Use Cases

  • Price and discount monitoring: track reduced-price products, the original versus current price, and discount timing across a category or search.
  • E-commerce competitor research: benchmark Nitori's furniture and home-goods assortment, pricing and stock levels against your own catalogue.
  • Product data feeds: build a JPY-priced product feed with specifications, images and colour or size variants for a comparison site or marketplace.
  • Customer sentiment analysis: collect review text, ratings, photos and the per-star breakdown to track product reception over time.
  • Recurring catalogue monitoring: schedule the actor to catch new arrivals, price changes and out-of-stock items as they happen, billed only for what changed.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
productId"9987654s"
name"サンプルカウチソファ (EXAMPLE)"
brand"ニトリ" (also "Deco Home", "Nitori Business", "N+")
urllink to the product on the store
breadcrumb / categoryPath["ソファ", "カウチソファ"] / "ソファ > カウチソファ"
price45800
originalPrice52800 (details on, when the product is reduced)
discountAmount / discountPercent7000 / 13.3
discountDate"2026/03/01"
currency"JPY"
onSale / isOutlettrue / false
inStocktrue
rating / reviewCount4.2 / 62
ratingBreakdown{ "1": 2, "2": 3, "3": 8, "4": 19, "5": 30 }
reviewsindividual rows: author, date, rating, title, text, helpful count, photos (details and reviews on)
dimensions / weight"幅150×奥行80×高さ70cm" / "約38kg"
material / color"合成皮革" / "ベージュ"
countryOfOrigin"ベトナム"
assemblyRequired / assemblyTimetrue / "20分"
deliveryMethod / returnsPolicystore delivery method text / store returns terms text
variantscolour or size options, each with its own id, price and swatch image
imagesfull gallery when details are on, the listing image only when they are off
changeType"NEW" (incremental mode; also "UPDATED", "REAPPEARED", "UNCHANGED", "EXPIRED")

How to Use

  1. Pick a Mode: search (keyword and/or the store's filters) or url (paste links and product codes).
  2. Fill in the fields for that mode, and switch on the filters and detail level you need.
  3. Set Max products to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search by keyword:

{
"mode": "search",
"queries": ["ソファ"],
"maxItems": 20
}

Browse a whole category, on sale only, no keyword:

{
"mode": "search",
"categories": ["Sofa"],
"onSaleOnly": true,
"maxItems": 50
}

Paste a product link, a category link and a bare product code:

{
"mode": "url",
"urls": [
"https://www.nitori-net.jp/ec/product/9987654s/",
"https://www.nitori-net.jp/ec/cat/Sofa/CouchCornerSofa/1/",
"9912345s"
]
}

Scheduled incremental run over the same search:

{
"mode": "search",
"queries": ["ベッド"],
"incrementalMode": true,
"maxItems": 0
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/nitori-net-jp-scraper").call(run_input={"mode": "search", "queries": ["ソファ"], "maxItems": 20})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["name"], product["price"], product["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/nitori-net-jp-scraper').call({ mode: 'search', queries: ['ソファ'], maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Max products, pagination and multiple keywords

Max products is the run's overall cap; Max result pages per keyword or link additionally caps how many pages any one keyword or link walks (0 means no limit, the default). With more than one keyword or pasted link in the same run, Max products is split evenly across them.

Each keyword's share is counted against the products its result pages list, not against the products the run finally returns. Three effects follow:

  • Incremental mode with a small Max products can return fewer changes than exist, even with a single keyword. Unchanged products still use up a keyword's share, so on a repeat run whose first result page is all unchanged, the walk can stop before it reaches a later page of genuinely new products, and the run returns nothing new. Set Max products to 0 (unlimited), or well above the size of the tracked search, for scheduled incremental runs.
  • Overlapping keywords can cut each other short. Once one keyword has read a product, a later keyword in the same run skips it. If a later keyword, after finding some products of its own, hits a result page made up entirely of products an earlier keyword already read, it treats that as the end of its results and does not read its further pages, so products only that later keyword would have found are not returned.
  • A product cut by the cap is not picked up by another keyword. A product one keyword read but did not return because Max products was reached is also skipped by later keywords in the same run, even if the run ends below Max products.

If a run returns fewer products than you expect, run each keyword or link on its own, or raise Max products.

Resume and recurring updates

Two separate features, for two separate jobs.

  • Resume from a previous run (resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips everything already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same search. Each product is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED or EXPIRED (only once a run has fully scanned the tracked search, and only with emitExpired). stateKey names or shares the stored state; leave it empty and the actor derives one from your search, filters and detail settings. With incremental mode off, output is exactly as before.

Three behaviours worth knowing if you combine features:

  • Emit expired products is not capped by Max products. Expiry is decided against the whole tracked baseline for a search, not against the run's own product cap, so a long-running monitoring campaign with many tracked products can return a large batch of EXPIRED rows on the run that detects them. Keep a monitoring campaign's tracked search reasonably narrow, or watch the run's item count, if you rely on Max products for cost control.
  • Running several overlapping keywords or links together, with Incremental mode and Emit expired products both on, can occasionally mark a still-available product EXPIRED. Once one keyword's scan reads a product id, an overlapping keyword later in the same run treats it as already handled and does not reconsider it; if that makes the second keyword's own scan look complete when part of it was actually skipped, a product unique to that keyword can be wrongly reported as no longer found. Track each keyword as its own campaign (its own stateKey, run separately) if you need Emit expired products to be reliable.
  • Starting a new Incremental mode campaign with Resume from a previous run adds the resumed products without a comparable snapshot. (Resume is refused once a campaign already has saved state, so this only applies to that first run.) The next run reports those specific products as UPDATED, with every field listed in changedFields, even when nothing changed on the store; from the run after that, they classify normally, once a real snapshot has been recorded.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (keyword and/or filters) or url (paste links and product codes).
queriesarray["ソファ"]Keywords to search (search mode). Each is searched separately.
urlsarraysampleStore links or bare product codes (url mode).
categoriesarray(none)Keep only products in these store categories.
brandsarray(none)Keep only products from these store brands.
colorsarray(none)Keep only products available in these store colours.
minPriceinteger(none)Minimum price in JPY, applied by the store.
maxPriceinteger(none)Maximum price in JPY, applied by the store.
onSaleOnlybooleanfalseKeep only products the store currently flags as reduced.
inStockOnlybooleanfalseKeep only products the store will currently accept an order for. Requires details.
minRatingstring0Minimum average customer rating: 0, 3, 4 or 5.
sortBystringrelevanceResult order: relevance, price_asc, price_desc, newest, rating_desc, review_count_desc.
fetchDetailsbooleantrueRead each product's own page for specifications, delivery terms, variants and the original price.
includeReviewsbooleantrueAdd each product's customer reviews. Requires fetchDetails.
maxReviewsPerProductinteger20Cap on individual review rows returned per product. 0 = all.
maxItemsinteger20Maximum number of products to return across the whole run. 0 = unlimited.
maxPagesinteger0Maximum result pages read per keyword or link. 0 = no limit.
resumeFromRunIdstring(none)Continue one interrupted run by its run or dataset id.
incrementalModebooleanfalseReturn only new, updated and reappeared products on scheduled runs.
stateKeystring(none)Name or share an incremental-mode state. Derived automatically when left empty.
emitUnchangedbooleanfalseAlso return (and bill) unchanged products.
emitExpiredbooleanfalseAlso return (and bill) products no longer found.
proxyobjectApify ProxyConnection settings.
mcpConnectorsarray(none)Optional: send a summary of each product to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which products are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"productId": "9987654s",
"name": "サンプルカウチソファ (EXAMPLE)",
"brand": "ニトリ",
"brandCode": "001",
"url": "https://www.nitori-net.jp/ec/product/9987654s/",
"breadcrumb": ["ソファ", "カウチソファ"],
"categoryPath": "ソファ > カウチソファ",
"categoryName": "カウチソファ",
"price": 45800,
"priceFormatted": "¥45,800",
"originalPrice": 52800,
"discountAmount": 7000,
"discountPercent": 13.3,
"discountDate": "2026/03/01",
"currency": "JPY",
"onSale": true,
"isOutlet": false,
"loyaltyPoints": 208,
"inStock": true,
"rating": 4.2,
"reviewCount": 62,
"ratingBreakdown": { "1": 2, "2": 3, "3": 8, "4": 19, "5": 30 },
"reviews": [
{
"reviewId": "EXAMPLE-REVIEW-0001",
"title": "満足しています (EXAMPLE)",
"text": "サイズ感もちょうど良く、組み立ても簡単でした (EXAMPLE)。",
"rating": 4,
"date": "2026-04-02T09:00:00Z",
"author": "サンプル利用者",
"authorGender": "女性",
"authorAgeGroup": "40代",
"helpfulCount": 2,
"images": ["https://example.invalid/review-photo.jpg"],
"variantName": "サンプルカウチソファ (EXAMPLE BE)"
}
],
"dimensions": "幅150×奥行80×高さ70cm",
"weight": "約38kg",
"material": "合成皮革",
"color": "ベージュ",
"countryOfOrigin": "ベトナム",
"warrantyYears": "3年",
"assemblyRequired": true,
"assemblyTime": "20分",
"deliveryMethod": "玄関先までのお届け (EXAMPLE)",
"shippingNote": "個別送料あり (EXAMPLE)",
"storePickup": "可能 (EXAMPLE)",
"returnsPolicy": "店舗ポリシーに準じます (EXAMPLE)",
"homeDeliveryAvailable": true,
"variants": [
{
"variantId": "EXAMPLE-VARIANT-01",
"skuCode": "EXAMPLE-SKU",
"optionType": "カラー",
"optionValue": "ベージュ",
"price": null,
"onSale": false,
"selected": true,
"image": "https://example.invalid/swatch.jpg"
}
],
"images": ["https://example.invalid/product-01.jpg"],
"videos": [],
"assemblyManuals": ["https://example.invalid/manual.pdf"],
"specifications": { "size": "幅150×奥行80×高さ70cm", "material": "合成皮革" },
"searchMode": "search",
"scrapedAt": "2026-01-01T00:00:00Z"
}

In incremental mode a record also carries changeType (NEW / UPDATED / REAPPEARED / UNCHANGED / EXPIRED), changedFields, firstSeenAt and lastSeenAt.

Plan Requirement

The default connection works out of the box, since this store answers over the standard connection pool. A residential pool is available under Connection if you specifically want one, but this store does not need it.

FAQ

How much does it cost?

You pay per product returned, plus a detail surcharge only when Fetch product details is on. The Pricing tab shows the current rates. Use Max products to cap the cost of any run.

This actor collects only publicly available product data. You are responsible for how you use it: follow the store's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product names, prices and specifications are generally facts, but product photos may be subject to third-party rights.

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, updated and reappeared products, and unchanged ones are not billed by default.

Does this cover Nitori's stores outside Japan?

No. nitori-net.jp is a single-market, Japanese-language catalogue priced only in JPY, and this actor is built for it specifically. Nitori's Taiwan, Singapore and Korea storefronts run on separate platforms with their own product data and URLs; this actor's addresses do not resolve on them.

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

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

Why does a scheduled run sometimes mark a product EXPIRED even though it still looks available on the store?

This happens only with Incremental mode and Emit expired products both on, and only when a run has multiple overlapping keywords or links that scan some of the same products. See the tips under How to Use for the trigger and workaround; running each keyword as its own campaign avoids it.

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.

🔗 Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

👗 ZOZOTOWN
Scrape ZOZOTOWN (zozo.jp), Japan's largest fashion marketplace: name, brand, JPY price...
🧩 Rakuten
Scrape Rakuten Ichiba (rakuten.co.jp): name, JPY price, reference price and discount...
🧩 Isetan Mitsukoshi
Scrape the Isetan Mitsukoshi department store online shop (mistore.jp). Search by keyword...
🛒 Mercari Japan Scraper
From $0.80/1K. Scrape Mercari Japan listings, sellers and reviews at scale. Extract...
🧩 Suumo.jp Scraper
Scrape Suumo, Japan's largest property portal: rental rooms with rent, management fees...
🔌 Casas Bahia Brazil Electronics & Home Goods Scraper
Scrape products from Casas Bahia Brazil by keyword, department, or URL. Filter by brand...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.