# UNIQLO Scraper: 21 Countries, Variants and Reviews (`abotapi/uniqlo-com-scraper`) Actor

Scrape UNIQLO products across 21 country storefronts in local currency. Price with pre discount original price, per size and colour stock, images, fabric and care, breadcrumbs, ratings and full reviews. Search by keyword, category and native filters, or paste product and category links.

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

## Pricing

from $1.20 / 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

## UNIQLO Product Scraper

Scrape UNIQLO clothing and accessories from **21 country storefronts**, each in its own
currency and with its own assortment. Every record carries the identity, price,
availability, media, variant and category data the storefront shows, and can be enriched
with full product detail and customer reviews.

Search by keyword, category and the storefront's own filters, or paste product, category
and search links and let the actor walk them.

***

### What you get

**Identity**
`uniqueKey` (country plus product code, unique across a multi-country run),
`productId`, `styleCode`, `name`, `url`, `country`, `countryName`, `language`,
`department` (men / women / kids / baby / unisex), `genderCategory`, `sizeGender`,
`breadcrumbs`, `categoryPath`, `communicationCode`, `priceGroup`, `kind`

**Price**
`price` (what the storefront charges now), `originalPrice` (pre discount),
`discountAmount`, `discountPercent`, `isOnSale`, `basePrice`, `promoPrice`,
`priceMin` / `priceMax` across variants, `currency`, `currencySymbol`, `taxPolicy`,
`isDualPrice`, `promotionText`

**Availability**
`availabilityStatus` (IN\_STOCK / PARTIAL / OUT\_OF\_STOCK), `variantCount`,
`inStockVariantCount`, `availableColors`, `availableSizes`, `isPurchasable`,
`storeStockOnly`

**Variants** (one row per size and colour combination)
`variantId`, `colorCode`, `colorName`, `colorGroup`, `colorHex`, `sizeCode`, `sizeName`,
`lengthCode`, `price`, `basePrice`, `promoPrice`, `currency`, `stockStatus`,
`stockStatusLabel`, `stockQuantity`, `inStock`, `backInStock`, `transitStatus`,
`deliveryNote`, `isReturnable`, `availableInStores`, `salesType`, `flags`

**Media**
`images`, `mainImage`, `subImages`, plus a per colour `imageUrl` and `chipUrl`

**Labels**
`flags`, `flagCodes`, `isNew`, `isNewColor`, `isComingSoon`, `isPreOrder`, `isUnisex`,
`isLimitedOffer`, `isAppMemberOffer`, `isRecycledMaterial`, `isSelectColorsSizesPrice`,
`isBestSeller`

**Detail** (with `fetchDetails`)
`description`, `descriptionShort`, `descriptionLong`, `composition` (fabric),
`careInstructions`, `washingInformation`, `designDetails`, `sizeInformation`,
`sizeChartUrl`, `countriesOfOrigin`, `productType`, `recycledMaterial`, `tags`,
`modelSizes`

**Reviews** (with `fetchReviews`)
`rating`, `reviewCount`, `ratingBreakdown` (one to five star counts), `fitRating`, and a
`reviews` array with `reviewId`, `rating`, `title`, `text`, `author`, `location`,
`createdAt`, `helpfulCount`, `fitFeedback`, `purchasedSize`, `purchasedColor`,
`reviewerGender`, `reviewerAgeRange`, `reviewerHeightRange`, `reviewerWeightRange`,
`reviewerShoeSize`, `isIncentivized`, `isSyndicated`, `images`, `tags`

**Incremental mode**
`changeType`, `changedFields`, `firstSeenAt`, `lastSeenAt`

***

### Countries

Prices, assortment and reviews are per country. The same product can be a different price,
carry a different number of colours and sizes, and have a different review pool in each.

| | | | |
|---|---|---|---|
| United States (USD) | United Kingdom (GBP) | Canada (CAD) | Australia (AUD) |
| Germany (EUR) | France (EUR) | Spain (EUR) | Italy (EUR) |
| Netherlands (EUR) | Belgium (EUR) | Sweden (SEK) | Denmark (DKK) |
| Japan (JPY) | South Korea (KRW) | Singapore (SGD) | Malaysia (MYR) |
| Thailand (THB) | Philippines (PHP) | India (INR) | Vietnam (VND) |
| Indonesia (IDR) | | | |

**Storefronts this actor does not cover.** Four UNIQLO markets are not on the same
platform as the 21 above and are therefore out of scope rather than silently missing:

| Market | Why |
|---|---|
| Taiwan | Runs a separate catalogue platform that does not answer the shared endpoints. |
| Hong Kong and Macau | Run on their own domain (uniqlo.com.hk), not the uniqlo.com storefront. |
| Mainland China | Runs on its own domain (uniqlo.cn), not the uniqlo.com storefront. |
| Russia | Redirects away and serves no catalogue. |

***

### Modes

#### Search mode

Pick a country, then any combination of keywords, categories and filters.

```json
{
  "mode": "search",
  "country": "uk",
  "queries": ["linen shirt"],
  "categories": ["men/tops/t-shirts"],
  "colors": ["BLACK", "BLUE"],
  "sizes": ["M", "L"],
  "flags": ["sale"],
  "minPrice": 10,
  "maxPrice": 40,
  "sortBy": "price_asc",
  "fetchDetails": true,
  "fetchReviews": true,
  "maxReviewsPerProduct": 20,
  "maxItems": 50
}
```

Categories use the path exactly as it appears in a storefront link, for example
`men/tops/t-shirts` or `women/outerwear-and-blazers/coats`. The same path resolves to a
different category in each country and in each department, and the actor resolves it
against that country's own category tree. A numeric category id also works.

Giving both keywords and categories scrapes every keyword inside every category. Giving
neither walks the whole storefront.

#### URL mode

Paste links. Product links return that one product; category and search links are walked
forward through their pages.

```json
{
  "mode": "url",
  "urls": [
    "https://www.uniqlo.com/us/en/products/E465185-000/00",
    "https://www.uniqlo.com/uk/en/men/tops/t-shirts",
    "https://www.uniqlo.com/jp/ja/search?q=シャツ"
  ],
  "maxItems": 100,
  "fetchDetails": true
}
```

The country, language and any filters already in the link are used, so the search mode
fields are ignored in URL mode. Links from different countries can be mixed in one run.

***

### Limits

There is exactly one limit that controls a run.

- **Max products** is the cap, and defaults to **20**. Set it to `0` for no limit.
- **Max pages per search** defaults to `0`, meaning no page limit. The run stops at Max
  products, or when the storefront runs out of results. Set a number only to cut a search
  short deliberately.

***

### Discounts and the original price

`price` is always what the storefront charges now. `originalPrice` is the pre discount
price, and is filled in when `fetchDetails` is on and the storefront still lists the
product at its regular price:

```
price 29.9, originalPrice 49.9, discountAmount 20.0, discountPercent 40.1
```

Some sale items are re-listed at the reduced price with no prior price published anywhere
on the storefront. Those come back with `isOnSale: true` and `originalPrice: null` rather
than a guessed figure.

***

### Reviews

Reviews are per country: the same product has a different review pool on each storefront.
Turn on `fetchReviews` to get the rating breakdown, the fit score and individual reviews,
including the reviewer's purchased size and colour, which is the part most useful for fit
analysis.

A product with no reviews returns `reviews: []` with `reviewCount: 0`; nothing is
invented. Review order can be newest, most helpful or highest rating.

***

### Incremental mode and resume

These are two different features.

**Resume** (`resumeFromRunId`) continues ONE interrupted run. Give it a previous run id or
dataset id and this run returns only the products that run had not collected yet.

**Incremental mode** (`incrementalMode`) is for running the same search repeatedly, for
example on a daily schedule. The first run returns everything as `NEW`. Later runs return
only what changed:

| `changeType` | Meaning |
|---|---|
| `NEW` | First time this product appeared in this search. |
| `UPDATED` | A real change, for example a price move or a size selling out. `changedFields` lists what moved. |
| `REAPPEARED` | Was gone, is back. |
| `UNCHANGED` | No change. Suppressed unless you turn on Emit unchanged. |
| `EXPIRED` | No longer listed. Only when you turn on Emit expired. |

**Ratings and review counts are deliberately not treated as changes.** A popular item
gains reviews continuously, and its average is recomputed from them, so counting that as a
change would return, and bill for, the entire catalogue on every run. Price and per size
stock are treated as real changes, because those are what a catalogue watch is for.

`EXPIRED` rows are only produced when a run has fully scanned the tracked search. A run
that hit Max products, hit Max pages, had a page refused, or used Resume returns no
expired rows and says so in the log, because an incomplete scan cannot tell "gone" from
"not reached yet".

State is kept per search and filter combination, so two different searches never mix. Set
`stateKey` to name a campaign explicitly.

***

### Connection

The **default Apify proxy** is what this actor is built around, and it works on every plan.
Leave the Connection section as it is unless you have a reason not to.

If a run starts being refused, try a different option in the Connection section and run
again. Running with no proxy at all works for very small runs but gets limited quickly.

If every page is refused, the run **fails** with a clear message rather than reporting a
successful empty result, so a connection problem is never mistaken for an empty search.

***

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

Optionally pipe results into the apps you already use, via Model Context Protocol
connectors. Authorize a connector once under Apify, Settings, Integrations, then select it
in **Export to your apps**. Set `notionParentPageUrl` when using Notion.

The connector receives a **condensed, human readable summary per item**: a title plus key
fields flattened to plain text, with nested objects reduced to their main value and arrays
trimmed. It is not a mirror of the dataset. The complete record always stays in the Apify
dataset.

Supported: Notion, Linear, Airtable, Apify. Leave it empty to skip; the dataset output is
byte identical either way.

***

### Sample record

Trimmed for readability. The review shown is illustrative, not a real customer.

```json
{
  "uniqueKey": "us:E465185-000",
  "productId": "E465185-000",
  "styleCode": "465185",
  "name": "AIRism Cotton Oversized T-Shirt",
  "url": "https://www.uniqlo.com/us/en/products/E465185-000/00",
  "country": "us",
  "countryName": "United States",
  "department": "UNISEX",
  "categoryPath": "Men > T-Shirts, Sweats & Fleece > T-Shirts > Uniqlo U",
  "price": 24.9,
  "originalPrice": null,
  "isOnSale": false,
  "currency": "USD",
  "currencySymbol": "$",
  "rating": 4.8,
  "reviewCount": 4742,
  "ratingBreakdown": { "one": 58, "two": 28, "three": 49, "four": 290, "five": 4317 },
  "fitRating": 3.19,
  "availabilityStatus": "PARTIAL",
  "variantCount": 128,
  "inStockVariantCount": 107,
  "availableSizes": ["XXS", "XS", "S", "M", "L", "XL", "XXL", "3XL"],
  "priceMin": 24.9,
  "priceMax": 24.9,
  "composition": "53% Cotton, 47% Polyester ( 30% Uses Recycled Polyester Fiber )",
  "washingInformation": "Machine wash cold, Dry clean",
  "sizeChartUrl": "https://www.uniqlo.com/us/en/size/465185_size.html",
  "mainImage": "https://image.uniqlo.com/UQ/ST3/us/imagesgoods/465185/item/usgoods_00_465185_3x4.jpg",
  "variants": [
    {
      "variantId": "07912968",
      "colorCode": "COL00",
      "colorName": "WHITE",
      "sizeCode": "SMA001",
      "sizeName": "XXS",
      "price": 24.9,
      "currency": "USD",
      "stockStatus": "IN_STOCK",
      "stockStatusLabel": "In stock",
      "stockQuantity": 11,
      "inStock": true,
      "isReturnable": true
    }
  ],
  "reviews": [
    {
      "reviewId": 10000001,
      "rating": 5,
      "title": "Great everyday tee",
      "text": "Relaxed fit and the fabric holds its shape after washing.",
      "author": "Sample Reviewer",
      "location": "Sample State",
      "createdAt": "2026-07-30T00:46:17+00:00",
      "helpfulCount": 3,
      "fitFeedback": 3,
      "purchasedSize": "M",
      "purchasedColor": "09 BLACK"
    }
  ],
  "changeType": "NEW",
  "changedFields": [],
  "firstSeenAt": "2026-08-27T00:00:00+00:00",
  "lastSeenAt": "2026-08-27T00:00:00+00:00"
}
```

***

### Input reference

| Field | Type | Default | Notes |
|---|---|---|---|
| `mode` | select | `search` | `search` or `url`. |
| `country` | select | `us` | One of the 21 storefronts. Search mode only. |
| `language` | string | storefront default | Two letter code. Rarely needed. |
| `queries` | string list | | Search keywords, one per line. |
| `categories` | string list | | Category paths such as `men/tops/t-shirts`, or numeric ids. |
| `colors` | multi select | | Colour families to keep. Blue covers navy and light blue, Red covers wine, and so on. |
| `sizes` | multi select | | Sizes to keep, adult and kids/baby bands. |
| `flags` | multi select | | Storefront labels such as Sale or New arrival. |
| `minPrice` / `maxPrice` | integer | | In the selected country's currency. |
| `sortBy` | select | `recommended` | Recommended, Best sellers, New arrivals, Price low to high, Price high to low, Highest rated. |
| `urls` | string list | | Product, category or search links. URL mode only. |
| `fetchDetails` | boolean | `true` | Detail, variants and pre discount price. Adds a per product surcharge. |
| `fetchReviews` | boolean | `false` | Rating breakdown and individual reviews. Adds a per product surcharge. |
| `maxReviewsPerProduct` | integer | `20` | Reviews returned per product. |
| `reviewsSort` | select | `newest` | Newest, Most helpful, Highest rating. |
| `maxItems` | integer | `20` | The run limit. `0` means no limit. |
| `maxPages` | integer | `0` | No page limit by default. |
| `resumeFromRunId` | string | | Continue one interrupted run. |
| `incrementalMode` | boolean | `false` | Only return what changed since the last run. |
| `stateKey` | string | | Name an incremental campaign. |
| `emitUnchanged` | boolean | `false` | Also return, and bill, unchanged products. |
| `emitExpired` | boolean | `false` | Also return, and bill, delisted products. |
| `proxy` | proxy | Apify proxy | The default works on every plan. |
| `mcpConnectors` | multi select | | Optional export into Notion, Linear, Airtable or Apify. |
| `notionParentPageUrl` | string | | Notion parent page for the export. |
| `maxNotifyListings` | integer | `50` | Cap on items sent to each connector. |

***

### Billing

You are charged for:

- Starting a run.
- Each product record returned.
- Each product record returned that carries detail or review data. Turning both
  `fetchDetails` and `fetchReviews` off means this does not apply at all.

A product whose extra data could not be fetched, or that incremental mode suppressed, is
never charged for the extra data.

# Actor input Schema

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

Search mode builds catalogue searches from the country, keywords, categories and filters below. URL mode takes links you paste (product pages, category pages, search pages) and walks them.

## `country` (type: `string`):

Which UNIQLO storefront to scrape. Prices come back in that storefront's own currency and the assortment differs between countries.

## `language` (type: `string`):

Two letter language code for product names and descriptions. Leave empty to use the country's own default language, which is what almost every run wants.

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

Search keywords, one per line. Each keyword is scraped as its own search. Leave empty to browse categories instead, or leave both empty to walk the whole storefront.

## `categories` (type: `array`):

Category paths as they appear in a storefront link, for example men/tops/t-shirts or women/outerwear-and-blazers/coats. A numeric category id also works. Combining keywords and categories scrapes every keyword inside every category.

## `colors` (type: `array`):

Keep only products available in these colour families. Each family covers every shade the storefront groups under it, so Blue includes navy and light blue. Leave empty for every colour.

## `sizes` (type: `array`):

Keep only products available in these sizes. Leave empty for every size.

## `flags` (type: `array`):

Keep only products carrying these storefront labels, for example only sale items or only new arrivals. Leave empty for everything.

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

Lowest price to keep, in the selected country's currency. Leave empty for no lower bound.

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

Highest price to keep, in the selected country's currency. Leave empty for no upper bound.

## `sortBy` (type: `string`):

How the storefront orders results before this actor reads them.

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

Paste product pages, category pages or search pages, one per line. Multi URL is supported. Category and search links are walked forward through their pages; a product link returns that single product. The country, language and any filters already in the link are used, so the search mode fields above are ignored.

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

On by default. Adds the description, fabric composition, care and washing text, size chart link, category breadcrumbs, and the full size and colour variant list with per variant price and stock. Also fills in the pre discount price for products that are on sale. Adds one surcharge event per product returned.

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

Off by default. Adds the rating breakdown, the fit score, and individual reviews with rating, title, text, author, location, date, helpful count and the reviewer's purchased size and colour. Products with no reviews come back with an empty review list. Adds one surcharge event per product returned.

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

How many individual reviews to return for each product. Only applies when Fetch customer reviews is on.

## `reviewsSort` (type: `string`):

Which reviews are returned first when the product has more reviews than the limit above.

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

Stop after this many products. This is the limit that controls the run; set 0 for no limit. In incremental mode this counts products read from the catalogue, including ones that are then suppressed because nothing changed.

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

Leave at 0 for no page limit: the run stops at Max products, or when the storefront runs out of results. Set a number only when you want to cut a search short.

## `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 datasets for the full set. Max products then counts only the new products. For recurring monitoring of the same search, use Incremental mode below instead.

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

Turn 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, where UPDATED means a real change such as a price move or a size selling out. Ratings and review counts drift on their own and are deliberately not treated as changes. State is kept separately for each 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 search and filter settings, so different searches never mix state.

## `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 listed, marked EXPIRED. Only produced once a run has fully scanned the tracked search, so not when Max products or Max pages capped it, not when a page was refused, and not when Resume was used. This returns, and bills, extra rows.

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

Connection settings for the run. The default Apify proxy is recommended.

## `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 plus 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",
  "country": "us",
  "queries": [
    "shirt"
  ],
  "sortBy": "recommended",
  "urls": [
    "https://www.uniqlo.com/us/en/men/tops/t-shirts"
  ],
  "fetchDetails": true,
  "fetchReviews": false,
  "maxReviewsPerProduct": 20,
  "reviewsSort": "newest",
  "maxItems": 20,
  "maxPages": 0,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "proxy": {
    "useApifyProxy": true
  },
  "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": [
        "shirt"
    ],
    "urls": [
        "https://www.uniqlo.com/us/en/men/tops/t-shirts"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/uniqlo-com-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": ["shirt"],
    "urls": ["https://www.uniqlo.com/us/en/men/tops/t-shirts"],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/uniqlo-com-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": [
    "shirt"
  ],
  "urls": [
    "https://www.uniqlo.com/us/en/men/tops/t-shirts"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/uniqlo-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/uniqlo-com-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/lVK3KK5bofZKDrRV3/builds/bgb3rCj7b7d7uzmrm/openapi.json
