# Shopee Official Brand Store Directory (`incognito_mode/shopee-brand-directory-scraper`) Actor

List every official and Mall brand store on Shopee across 11 countries - brand name, shop ID, username, store tier, logo and listing date - in one request per marketplace. Optionally add followers, rating, listings and response rate. Feeds the Shopee product and seller Actors.

- **URL**: https://apify.com/incognito\_mode/shopee-brand-directory-scraper.md
- **Developed by:** [Elena Vance](https://apify.com/incognito_mode) (community)
- **Categories:** Lead generation, E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 brand stores

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Shopee Official Brand Store Directory

Every **official and Mall brand store** on Shopee, across **11 marketplaces** —
brand name, shop ID, username, store tier, logo and listing date.

One HTTP request returns an entire country's directory. Singapore has **1,735**
official stores; Malaysia has **3,349**. No API key, no login, no browser.

***

### Why this exists

Shopee's official-store directory is the cleanest B2B list the platform
publishes: every verified brand presence in a market, with the shop IDs needed
to go deeper. It is normally buried behind an A–Z browse UI with no export.

This Actor is also the **discovery front end** for the rest of the Shopee
family — its `shopId` is exactly what the Shop & Seller Scraper and the Product
Catalog Scraper take as input.

### What you get

| Field | Notes |
| --- | --- |
| `brandName` | As Shopee lists it |
| `shopId` | Numeric store ID — feeds the other Shopee Actors |
| `username` | Account username (not always the URL slug) |
| `shopUrl` / `usernameUrl` | The canonical `/shop/{id}` link and the pretty one |
| `region`, `country` | Which marketplace this listing came from |
| `shopType` | `mall`, `preferred` or `brand` |
| `entityId` | Shopee's internal brand ID — **stable across marketplaces**, so you can match the same brand in SG and MY |
| `indexLetter` | The A–Z bucket Shopee files it under |
| `logoUrl` | Desktop logo asset where available |
| `listedAt` | When the store joined the official directory (ISO-8601 UTC) |
| `shopProfile` | *Optional* — followers, rating, review total, listings, response and cancellation rates |

#### A brand is not a store

Several brands routinely share one official shop. Nestlé's `nestlepetcare.sg`
store appears as **Alpo**, **Dentalife**, **Fancy Feast** and more — four
directory rows, one `shopId`. That is Shopee's model, not a bug, and it is why
enrichment fetches each *distinct* store once rather than once per row.

### Example output

```json
{
  "brandName": "A FOR APOTHECARY",
  "shopId": 30431123,
  "username": "aforapothecary",
  "region": "sg",
  "country": "Singapore",
  "shopUrl": "https://shopee.sg/shop/30431123",
  "usernameUrl": "https://shopee.sg/aforapothecary",
  "indexLetter": "A",
  "logoUrl": "https://down-sg.img.susercontent.com/file/sg-11134258-7rceg-m6ca2xcwx7576a",
  "shopType": "mall",
  "entityId": 10955,
  "listedAt": "2025-02-17T07:24:51Z"
}
```

### Input

```json
{
  "regions": ["sg", "my", "id"],
  "nameContains": "nestle",
  "includeShopProfile": false,
  "maxItems": 5000
}
```

| Option | Default | Notes |
| --- | --- | --- |
| `regions` | `["sg"]` | One request each. Pick as many as you like. |
| `nameContains` | — | Case-insensitive match on brand name **or** username. |
| `includeShopProfile` | `false` | Adds seller metrics — **one request per store**. |
| `maxItems` | `5000` | Hard cap across all marketplaces. |
| `proxyConfiguration` | off | Leave off — see below. |

#### About `includeShopProfile`

Off by default on purpose. The directory itself is one request per country;
enrichment is one request per *store*, so switching it on turns a 1-request
Singapore run into roughly 1,400. Pair it with `nameContains` or a small
`maxItems` unless you genuinely want the whole market enriched.

### Marketplaces

Singapore · Malaysia · Indonesia · Thailand · Vietnam · Philippines · Taiwan ·
Brazil · Mexico · Colombia · Chile

Verified live on all of them. Shopee has exited Spain, France, India and
Poland, so those are not offered.

### Speed and cost

**One request per marketplace.** Singapore's full 1,735-store directory and
Malaysia's 3,349 together take two requests and a few seconds at 256 MB. No
browser is launched.

No proxy is used unless Shopee actually blocks an IP, and then the Actor
escalates on its own — datacenter first (included in every Apify plan, free
tier included), residential only if your plan has it.

### Use it for

- **B2B lead lists** — every verified brand in a market, with links.
- **Market-entry research** — which brands are live in ID but not yet in MY,
  matched on `entityId`.
- **Brand monitoring** — watch `listedAt` to catch new official stores as they
  launch by scheduling a daily run.
- **Feeding the pipeline** — take the `shopId` column straight into the Shopee
  Shop & Seller Scraper or Product Catalog Scraper.

### Related

**Shopee Shop & Seller Profile Scraper** for deep seller metrics, and
**Shopee Product Catalog & Variant Scraper** for what those stores sell.

# Actor input Schema

## `regions` (type: `array`):

Which Shopee countries to list. Each one costs a single HTTP request and returns that marketplace's entire official-store directory - around 1,700 for Singapore and 3,300 for Malaysia.

## `nameContains` (type: `string`):

Optional. Keep only stores whose brand name or username contains this text (case-insensitive). Useful for pulling one brand's stores out of every marketplace at once - try "nestle" or "samsung".

## `includeShopProfile` (type: `boolean`):

Adds followers, rating, review total, listing count, response rate and cancellation rate to each store. This costs one extra request PER STORE, so a whole marketplace becomes ~1,700 requests instead of one. Profiles are fetched once per store and shared across the brands that use it. Combine with a name filter or Maximum brand stores to keep runs small.

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

Hard cap on how many rows are stored across all marketplaces. The run stops as soon as it is reached.

## `proxyConfiguration` (type: `object`):

Leave off. Every request calls Shopee directly first, which costs nothing. If an IP is blocked the Actor escalates on its own: first to a datacenter proxy (included in every Apify plan, free tier included), then to residential only if your plan has it.

## Actor input object example

```json
{
  "regions": [
    "sg"
  ],
  "includeShopProfile": false,
  "maxItems": 5000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing every listed brand store.

# 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 = {
    "regions": [
        "sg"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("incognito_mode/shopee-brand-directory-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 = {
    "regions": ["sg"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("incognito_mode/shopee-brand-directory-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 '{
  "regions": [
    "sg"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call incognito_mode/shopee-brand-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,incognito_mode/shopee-brand-directory-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/eVE4EzDmnlmcKp6bF/builds/C9Yd9XMvlElVU5rLS/openapi.json
