Nitori Japan Furniture & Home Goods Scraper
Pricing
from $1.50 / 1,000 product results
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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.
| Field | Example |
|---|---|
productId | "9987654s" |
name | "サンプルカウチソファ (EXAMPLE)" |
brand | "ニトリ" (also "Deco Home", "Nitori Business", "N+") |
url | link to the product on the store |
breadcrumb / categoryPath | ["ソファ", "カウチソファ"] / "ソファ > カウチソファ" |
price | 45800 |
originalPrice | 52800 (details on, when the product is reduced) |
discountAmount / discountPercent | 7000 / 13.3 |
discountDate | "2026/03/01" |
currency | "JPY" |
onSale / isOutlet | true / false |
inStock | true |
rating / reviewCount | 4.2 / 62 |
ratingBreakdown | { "1": 2, "2": 3, "3": 8, "4": 19, "5": 30 } |
reviews | individual rows: author, date, rating, title, text, helpful count, photos (details and reviews on) |
dimensions / weight | "幅150×奥行80×高さ70cm" / "約38kg" |
material / color | "合成皮革" / "ベージュ" |
countryOfOrigin | "ベトナム" |
assemblyRequired / assemblyTime | true / "20分" |
deliveryMethod / returnsPolicy | store delivery method text / store returns terms text |
variants | colour or size options, each with its own id, price and swatch image |
images | full 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
- Pick a Mode:
search(keyword and/or the store's filters) orurl(paste links and product codes). - Fill in the fields for that mode, and switch on the filters and detail level you need.
- Set Max products to control run size and cost, then click Start.
- 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 ApifyClientclient = 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 classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED(only once a run has fully scanned the tracked search, and only withemitExpired).stateKeynames 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
EXPIREDrows 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 ownstateKey, 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 inchangedFields, 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.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword and/or filters) or url (paste links and product codes). |
queries | array | ["ソファ"] | Keywords to search (search mode). Each is searched separately. |
urls | array | sample | Store links or bare product codes (url mode). |
categories | array | (none) | Keep only products in these store categories. |
brands | array | (none) | Keep only products from these store brands. |
colors | array | (none) | Keep only products available in these store colours. |
minPrice | integer | (none) | Minimum price in JPY, applied by the store. |
maxPrice | integer | (none) | Maximum price in JPY, applied by the store. |
onSaleOnly | boolean | false | Keep only products the store currently flags as reduced. |
inStockOnly | boolean | false | Keep only products the store will currently accept an order for. Requires details. |
minRating | string | 0 | Minimum average customer rating: 0, 3, 4 or 5. |
sortBy | string | relevance | Result order: relevance, price_asc, price_desc, newest, rating_desc, review_count_desc. |
fetchDetails | boolean | true | Read each product's own page for specifications, delivery terms, variants and the original price. |
includeReviews | boolean | true | Add each product's customer reviews. Requires fetchDetails. |
maxReviewsPerProduct | integer | 20 | Cap on individual review rows returned per product. 0 = all. |
maxItems | integer | 20 | Maximum number of products to return across the whole run. 0 = unlimited. |
maxPages | integer | 0 | Maximum result pages read per keyword or link. 0 = no limit. |
resumeFromRunId | string | (none) | Continue one interrupted run by its run or dataset id. |
incrementalMode | boolean | false | Return only new, updated and reappeared products on scheduled runs. |
stateKey | string | (none) | Name or share an incremental-mode state. Derived automatically when left empty. |
emitUnchanged | boolean | false | Also return (and bill) unchanged products. |
emitExpired | boolean | false | Also return (and bill) products no longer found. |
proxy | object | Apify Proxy | Connection settings. |
mcpConnectors | array | (none) | Optional: send a summary of each product to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which products are created. |
maxNotifyListings | integer | 50 | Cap 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.
Is it legal to scrape Nitori?
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... |
💬 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.