# ZOZOTOWN - Japan Fashion Products, Variants & Reviews (`abotapi/zozotown-scraper`) Actor

Scrape ZOZOTOWN (zozo.jp), Japan's largest fashion marketplace: name, brand, JPY price with was-price and discount, per-size and per-colour stock, materials, size charts, shipping, images and reviews with star breakdown. Search by keyword, brand, shop or category, or paste product and listing links.

- **URL**: https://apify.com/abotapi/zozotown-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 product results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## What does ZOZOTOWN Scraper do?

Scrape product data from **[ZOZOTOWN (zozo.jp)](https://zozo.jp)**, Japan's largest fashion marketplace, with 1,500+ shops and 8,000+ brands. Search by keyword in Japanese or English, browse a whole brand, shop or category, or paste product and listing links.

Every product comes back as one structured record: name, brand (English and Japanese), shop, JPY price with the struck-through was-price and discount percent, colour variants, per-size and per-colour stock, materials, country of origin, size chart, shipping fee, images, and customer reviews with the full star breakdown and size/fit feedback.

Run it on Apify and you get scheduling, API access, webhooks, integrations (Zapier, Make, Google Sheets), automatic proxy rotation, and run monitoring out of the box.

### Features

- **Two ways in.** Keyword search (Japanese or English), brand, shop or category browsing, or paste links you already have.
- **The site's own filters,** applied by the site itself so they narrow results before they are fetched: sort, department, colour, on-sale vs full-price, new vs pre-owned, pre-order, gift-wrappable, coupon-eligible, and include-sold-out. Plus a price range applied to the results.
- **Discounts, properly separated.** `price` is what you pay now, `originalPrice` is the struck-through price, `discountPercent` is the site's own figure, and `isOnSale` / `isTimeSale` tell you which kind of deal it is.
- **Per-size and per-colour stock,** not just a single in-stock flag: every size on the shelf with its availability, back-order status and colour.
- **Customer reviews,** with per-review rows plus the aggregate: star rating, title, review text, date, the exact colour and size the reviewer bought, their size and fit answer, and the reaction count, together with the average rating and the 1-to-5 star breakdown.
- **Incremental mode and Resume,** so a daily or weekly run returns only what changed instead of re-collecting and re-billing the whole catalogue.
- **Export straight into your apps** through MCP connectors (Notion, Linear, Airtable, Apify).

### How to use it

1. Pick **Mode**: `Search` to look products up, or `URL` to scrape links you paste.
2. In search mode, enter **Keywords** (`ワンピース`, `nike`) and/or a **Brand**, **Shop** or **Category**. In URL mode, paste product or listing links.
3. Set any **Filters** you want. They apply in both modes.
4. Turn on **Fetch product details** for descriptions, materials, size charts and per-size stock, and **Fetch customer reviews** for review rows and the rating breakdown. Each adds a per-product charge, see Pricing.
5. Set **Max products** to cap the run and your spend.
6. Run it. Results stream into the dataset as they are scraped, and export as JSON, CSV, Excel or HTML.

Minimal input:

```json
{
    "mode": "search",
    "queries": ["ワンピース"],
    "maxItems": 200
}
```

Everything on, on one brand:

```json
{
    "mode": "search",
    "brandSlug": "nike",
    "sort": "priceAsc",
    "priceType": "sale",
    "color": "black",
    "gender": "men",
    "fetchDetails": true,
    "fetchReviews": true,
    "maxReviewsPerProduct": 20,
    "maxItems": 500
}
```

### Input

| Field | Type | Description |
|---|---|---|
| `mode` | enum | `search` or `url`. |
| `queries` | string\[] | Keywords, Japanese or English. Each is searched separately. |
| `brandSlug` / `shopSlug` | string | Browse one brand or shop, named as in the site's own links (`nike`). |
| `categoryPath` | string | Browse one category, as in the site's own category path (`shoes/sneakers`). |
| `urls` | array | Product links, or brand, shop, category and search result links. |
| `sort` | enum | `popular`, `newest`, `priceAsc`, `priceDesc`. |
| `gender` | enum | `any`, `men`, `women`, `kids`. |
| `color` | enum | One of the site's 14 colour families. |
| `priceType` | enum | `any`, `sale` (discounted only), `proper` (full price only). |
| `condition` | enum | `any`, `new`, `used` (the site's pre-owned range). |
| `sellType` | enum | `any`, `normal`, `preorder`. |
| `includeOutOfStock` | boolean | Off by default, matching the site. |
| `giftWrappingOnly` / `couponOnly` | boolean | Keep only gift-wrappable / coupon-eligible products. |
| `minPrice` / `maxPrice` | integer | Price range in JPY, applied to results. |
| `fetchDetails` | boolean | Read each product's page. Adds one request per product. Default `false`. |
| `fetchReviews` | boolean | Also collect reviews and the rating breakdown. Requires `fetchDetails`. Default `false`. |
| `maxReviewsPerProduct` | integer | Cap per product. `0` for all. Default `20`. |
| `maxItems` | integer | The run's cap. Default `20`. `0` for no limit. |
| `maxPages` | integer | Leave empty for unlimited. Does not cap the run; the run stops at Max products. |
| `resumeFromRunId` | string | Continue one interrupted run and return only the delta. |
| `incrementalMode` | boolean | Recurring monitoring: return only what changed. Default `false`. |
| `stateKey` | string | Name a monitoring campaign to keep its state stable. |
| `emitUnchanged` / `emitExpired` | boolean | Also return, and bill, unchanged / disappeared products. Default `false`. |
| `proxy` | object | Japanese residential connection. Keep the default. |

#### One cap, not two

Only **Max products** carries a number by default. **Max pages per search** is unlimited and defers to it, so there is never a question of which limit stops your run. Set Max pages only if you specifically want each search to stop after N result pages.

### Output

One record per product.

```json
{
    "productId": "104503785",
    "goodsId": 104503785,
    "goodsCode": "105503785",
    "name": "ナイキ スポーツウェア クラシック ウィメンズ オーバーサイズド Tシャツ / Nike Sportswear Classic Women's Oversized T-Shirt IH7605-100 White",
    "url": "https://zozo.jp/shop/nike/goods/104503785/",
    "brand": "NIKE",
    "brandNameJp": "ナイキ",
    "brandSlug": "nike",
    "shopName": "NIKE",
    "shopSlug": "nike",
    "category": "Tシャツ/カットソー",
    "categoryPath": "tops",
    "subCategoryName": "Tシャツ/カットソー",
    "breadcrumb": [
        { "label": "ZOZOTOWN", "url": "https://zozo.jp/" },
        { "label": "NIKE", "url": "https://zozo.jp/shop/nike/" },
        { "label": "トップス", "url": "https://zozo.jp/shop/nike/tops/" }
    ],
    "price": 3575,
    "originalPrice": 5500,
    "discountPercent": 35,
    "currency": "JPY",
    "isOnSale": true,
    "isTimeSale": false,
    "saleType": "SALE",
    "saleEndsAt": null,
    "isSoldOut": false,
    "availabilityStatus": "IN_STOCK_NORMAL",
    "colorName": "ホワイト",
    "colorCount": 1,
    "colorVariants": [],
    "image": "https://c.imgz.jp/785/105503785/105503785b_b_06_500.jpg",
    "images": ["https://c.imgz.jp/785/105503785/105503785b_1_d_500.jpg"],
    "videos": [{ "videoId": 70025, "fileName": "105503785_a69rscf3.mp4" }],
    "productCode": "IH7605-100",
    "description": "クラシックなスタイルで、柔らかくてややしっかりとした肌触りの...",
    "material": "本体:綿 100%",
    "madeIn": "中国",
    "targetGenders": ["women"],
    "tags": ["半袖", "ミドル丈", "クルーネック(丸首)"],
    "condition": "brand_new",
    "isPreOrder": false,
    "sizes": [
        { "size": "S", "color": "ホワイト", "availability": "NORMAL", "inStock": true, "stockQuantity": 12, "isBackOrder": false },
        { "size": "XS", "color": "ホワイト", "availability": "OUT_OF_STOCK", "inStock": false, "stockQuantity": 0, "isBackOrder": false }
    ],
    "sizeChart": [{ "sizeId": 2126, "women": ["S"] }],
    "shippingFee": 330,
    "shippingType": "ZOZOTOWN",
    "rewardPoints": 162,
    "rating": 4.79,
    "reviewCount": 233,
    "reviewSummary": {
        "averageRating": 4.79,
        "totalReviews": 233,
        "ratingBreakdown": {
            "1": { "count": 1, "percent": 0 },
            "4": { "count": 27, "percent": 11 },
            "5": { "count": 198, "percent": 87 }
        }
    },
    "reviews": [
        {
            "reviewId": 1830347,
            "rating": 5,
            "title": "ZOZOマットのおかげです！",
            "body": "サイズがぴったりで、履きごごち抜群です。",
            "postedAt": "2026-08-26T20:07:00+09:00",
            "purchasedVariant": "グリーン系 / 24.5",
            "sizeFitQuestion": "サイズ感",
            "sizeFitAnswer": "ちょうどいい",
            "reviewerProfile": "性別（女性） | 45〜49歳 | 普段履いているサイズ（24.0cm）",
            "helpfulCount": 0
        }
    ]
}
```

Fields from `productCode` down (description, materials, sizes, size chart, shipping, images, video) appear when **Fetch product details** is on, or when you paste a product link. `reviews`, `reviewSummary` and the review-derived `rating` / `reviewCount` appear when **Fetch customer reviews** is on.

#### About reviews

Reviews are proven present and are extracted in full: a representative item returned **233 reviews** with an average of 4.79 and a complete 1-to-5 star breakdown.

**ZOZOTOWN reviews are anonymous.** The site publishes no author name, handle or avatar, so this scraper does not emit an `author` field rather than filling one with a placeholder. The only person-level content the site publishes is the coarse self-reported line the reviewer chose to show (age band, gender, usual size), passed through verbatim as `reviewerProfile`. What the site does expose, and this scraper captures, is the star rating, title, body, date, the exact colour and size purchased, the size and fit answer, and the reaction count.

A product with no reviews returns `reviews: []` with `reviewCount` left at the site's own value and no invented rating.

#### Incremental mode and Resume

- **Resume from a previous run** continues one interrupted crawl: paste that run's id and this run skips everything already collected, returning only the delta.
- **Incremental mode** is for recurring monitoring. The first run marks everything `NEW`; later runs return only `NEW`, `UPDATED` and `REAPPEARED`, with `changedFields` naming exactly what moved. Turn on **Emit unchanged** or **Emit expired** only if you also want those rows, which are billed like any other.

State is kept per search and filter setup, so two different searches never mix. `EXPIRED` rows are produced only after a run has genuinely scanned the whole tracked search: a run stopped by a cap, by a connection problem, or by Resume never marks anything expired.

New reviews arriving do not mark a product `UPDATED`, and a run whose detail or review fetch failed never reports the product as having lost that data.

### Send results into your apps (MCP connectors)

Optionally pipe 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, and leaving it empty skips it entirely.

Each connector receives a condensed, human-readable summary per product (its title plus the key fields as 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 **`mcpConnectors`** input field. (If the picker is empty, you have not authorized a connector yet.)
3. For **Notion**, also set **`notionParentPageUrl`** to the page the item pages should be created under. It is ignored by every other connector.
4. Use **`maxNotifyListings`** to cap how many products are written to each connector per run. It does not affect the dataset.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mcpConnectors` | array | (empty) | Which authorized MCP connectors to send results to. Empty means skip. |
| `notionParentPageUrl` | string | (empty) | Notion connector only. URL or id of the page under which item pages are created. |
| `maxNotifyListings` | integer | 50 | Cap on products written to each connector per run. Does not affect the dataset. |

The connection is mediated by Apify's MCP proxy, so this Actor never sees your third-party credentials.

### Scope: zozo.jp only

ZOZOTOWN is operated by ZOZO, Inc. (株式会社ZOZO, Chiba, Japan) at **zozo.jp**, and is a **Japan-domestic marketplace**. This scraper targets zozo.jp exclusively, and that is a deliberate, verified decision rather than an omission:

- The **`zozo.com`** domain is registered to the same company but is **not a storefront**. Its apex has no address record and `www.zozo.com` is a dangling alias to a decommissioned distribution, so neither answers at all. It briefly hosted ZOZO's international made-to-measure clothing line (2018 to 2019), a separate own-label product that was never the ZOZOTOWN catalogue; that service closed in May 2019 and the domain's last live page read "This service is no longer available outside of Japan." Today only the company's own corporate and trade-facing hosts remain there. There is no product catalogue on zozo.com to reconcile with zozo.jp's, and no product id is shared.
- ZOZO's specialty malls, **ZOZOUSED**, **ZOZOVILLA**, **ZOZOCOSME** and **ZOZOSHOES**, are **sub-paths of zozo.jp** sharing its product-id namespace, so they are already in scope here. Pre-owned items are reachable through the `condition: used` filter.
- ZOZO's other consumer properties are separate sites with separate catalogues and are out of scope for this scraper.

ZOZOTOWN itself has no English checkout and no international shipping, which is why a Japanese connection is required below.

### Connection

**ZOZOTOWN serves visitors in Japan only** and turns other connections away before any page loads, so a Japanese residential connection is required. Keep the default proxy setting unless you have your own Japan-based pool.

Access is also granted per connection rather than per account, and not every connection is accepted. The actor establishes a working one at startup and retries with a different connection for **every page it fetches**, so one connection being turned away slows a run slightly instead of cutting it short.

The site answers a given connection in one of three ways: it serves the page, it turns the connection away, or it asks the connection to verify itself. The actor uses a fast, lightweight method by default and switches to a slower one **only** for that third case, and only for as long as the site keeps asking. Most runs never need it. This is automatic and changes neither your results nor your charges — you may just see the run take longer, and the log will say so.

If no connection can be established at all, the run **fails with a clear message** rather than finishing successfully with an empty dataset, so you can always tell a connection problem apart from a search that genuinely had no matches.

If you change the proxy setting away from the default, the actor says so in the log and the run will most likely come back empty.

### Pricing

You pay for products successfully returned, plus only the extras you switch on.

| Event | When it fires |
|---|---|
| Actor start | Once per run. |
| Product result | Once per product returned in the dataset. |
| Detail enrichment | Once per product returned, only when **Fetch product details** is on. |
| Review enrichment | Once per product returned with reviews, only when **Fetch customer reviews** is on. Not per review. |

Both per-product extras are charged **once per product actually returned**, never per request. A product whose detail page or reviews could not be read is not charged for that extra, and in incremental mode a product that is suppressed because nothing changed is not charged at all.

Use **Max products** to cap your spend per run, or set a Max charge per run in the Apify Console.

### Tips

- **Japanese keywords match better** than English ones for generic items (`ワンピース` returns 80,000+ dresses), while brand names like `nike` work fine either way.
- **Browse a brand or category for full-catalogue monitoring**: set `brandSlug` or `categoryPath` and leave `maxPages` empty.
- **For sale tracking**, set `priceType: "sale"` and read `originalPrice` and `discountPercent`, then schedule it with `incrementalMode` on to get only the price moves.
- **Reviews are the slowest part.** Leave `fetchReviews` off unless you need it, and use `maxReviewsPerProduct` to keep deep-reviewed products bounded.

### FAQ and support

**Is it legal to scrape ZOZOTOWN?** This scraper collects publicly available product information only, and does not collect personal information. Reviews on ZOZOTOWN are published anonymously and no author identity is available or extracted. Make sure your use of the data complies with ZOZOTOWN's Terms of Service and the laws that apply to you; this Actor and its output are intended for lawful purposes such as market research and price monitoring.

**Why did my run return nothing?** Almost always the connection: the site accepts Japanese connections only. Check that residential proxy is enabled. If no connection could be established at all, the run fails with a message saying so rather than reporting an empty search.

**Why are some retries in the log?** Not every connection is accepted, so the actor tries a different one. This is normal, is handled automatically for every page, and costs you nothing extra — you are billed for products returned, not for requests made.

**Found a bug or a missing field?** Open an issue on the Actor's Issues tab.

# Actor input Schema

## `mode` (type: `string`):

Choose Search to look products up on the site, or URL to scrape links you paste yourself.

## `queries` (type: `array`):

Keywords to search, in Japanese or English, for example ワンピース or nike. Each keyword is searched on its own.

## `brandSlug` (type: `string`):

Browse one brand's whole catalogue, using the brand name as it appears in the site's own brand links, for example nike or adidas. Leave empty to skip.

## `shopSlug` (type: `string`):

Browse one shop's whole catalogue, using the shop name as it appears in the site's own shop links, for example nike. Leave empty to skip.

## `categoryPath` (type: `string`):

Browse one category, using the site's own category path, for example shoes/sneakers or tops/tshirt-cutsew. Leave empty to skip.

## `urls` (type: `array`):

Links to scrape: product pages (zozo.jp/shop/<shop>/goods/<id>/), or brand, shop, category and search result pages.

## `sort` (type: `string`):

Order results the way the site orders them.

## `gender` (type: `string`):

Limit to one department. Applies to brand and category browsing; keyword search covers all departments.

## `color` (type: `string`):

Keep only products available in one colour family.

## `priceType` (type: `string`):

Keep only discounted products, or only full-price products.

## `condition` (type: `string`):

New products, or the site's pre-owned range.

## `sellType` (type: `string`):

Regular products, or products sold as pre-orders.

## `includeOutOfStock` (type: `boolean`):

Off by default, matching the site, which shows in-stock products only. Turn on to also return sold-out products.

## `giftWrappingOnly` (type: `boolean`):

Keep only products the shop can gift-wrap.

## `couponOnly` (type: `boolean`):

Keep only products a shop coupon applies to.

## `minPrice` (type: `integer`):

Keep only products at or above this price. The site offers no price filter of its own, so this is applied to results after they are fetched.

## `maxPrice` (type: `integer`):

Keep only products at or below this price. The site offers no price filter of its own, so this is applied to results after they are fetched.

## `fetchDetails` (type: `boolean`):

Read each product's own page for description, materials, country of origin, product code, size chart, per-size and per-colour stock, shipping fee and full category path. Adds one request per product and charges the Detail enrichment event once per product returned.

## `fetchReviews` (type: `boolean`):

Also collect customer reviews for each product: star rating, title, review text, date, the exact colour and size the reviewer bought, their size and fit answer, and how many people reacted to the review, plus the average rating and the star breakdown. Requires Fetch product details. Charges the Review enrichment event once per product returned with reviews.

## `maxReviewsPerProduct` (type: `integer`):

Cap on reviews collected per product when Fetch customer reviews is on. Use 0 for every available review.

## `maxItems` (type: `integer`):

Maximum number of products saved across all keywords and links. This is the run's cap. Set 0 for no limit.

## `maxPages` (type: `integer`):

Leave empty for unlimited: this does not cap the run, the run stops at Max products. Set a number only to stop each search after that many result pages.

## `resumeFromRunId` (type: `string`):

Optional. ID of a previous run of this actor, or a dataset ID. Products already in that dataset are skipped, so this run returns only NEW products. Combine both runs' datasets for the full set. For recurring monitoring of the same search, use Incremental mode below instead.

## `incrementalMode` (type: `boolean`):

Turn this on for daily or recurring monitoring of the same search or links. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products. Turn on Emit unchanged or Emit expired only when you also want those products returned, and billed. State is kept separately per distinct search and filter setup, or by State key below.

## `stateKey` (type: `string`):

Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key from your mode, search and filter settings, so different searches never mix state with each other.

## `emitUnchanged` (type: `boolean`):

Off 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 the full snapshot every run.

## `emitExpired` (type: `boolean`):

Off 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, not when Max products or Max pages capped it, a connection problem stopped it early, or Resume was used. This returns, and bills, extra synthetic rows.

## `proxy` (type: `object`):

The site serves visitors in Japan only and turns other connections away, so a Japanese residential connection is required. Keep the default unless you have your own Japan based pool.

## `mcpConnectors` (type: `array`):

Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify -> Settings -> Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "ワンピース"
  ],
  "urls": [],
  "sort": "popular",
  "gender": "any",
  "color": "any",
  "priceType": "any",
  "condition": "any",
  "sellType": "any",
  "includeOutOfStock": false,
  "giftWrappingOnly": false,
  "couponOnly": false,
  "fetchDetails": false,
  "fetchReviews": false,
  "maxReviewsPerProduct": 20,
  "maxItems": 20,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  },
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "ワンピース"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "JP"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/zozotown-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["ワンピース"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "JP",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/zozotown-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "ワンピース"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}' |
apify call abotapi/zozotown-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/zozotown-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8tuGg0THgeTNXA46z/builds/Dpaz0uThoWBWTC6wh/openapi.json
