# Blibli Merchant Profile & Inventory Scraper (`zucchini_gopher_m2v/blibli-merchant-profile-scraper`) Actor

Map any Blibli competitor's storefront: full product inventory, seller ratings, response speed, shipping origin, followers, review stats and active vouchers. Paste a store URL or any product link from it. No login needed.

- **URL**: https://apify.com/zucchini\_gopher\_m2v/blibli-merchant-profile-scraper.md
- **Developed by:** [Faisal Ahdan naufal](https://apify.com/zucchini_gopher_m2v) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 records

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

## Blibli Merchant Profile & Inventory Scraper

Map any competitor's storefront on [Blibli](https://www.blibli.com) in one
run: their **full product inventory**, **seller ratings**, **response
speed**, **shipping origin**, follower count, review statistics and active
vouchers.

Paste a store URL — or any product link from that store — and get one flat
profile row plus the catalogue.

No login, no API key. HTTP-only — no browser.

### What you get per competitor

```json
{
  "recordType": "MERCHANT_PROFILE",
  "merchantCode": "COP-60023",
  "merchantName": "Colgate Palmolive Indonesia Flagship Store",
  "isOfficial": true,
  "activationDateIso": "2018-05-11T03:27:00Z",

  "badgeId": "Diamond",
  "badgeRating": 99,
  "respondTimeRating": 5.0,
  "productQualityRating": 5.0,
  "orderFulfillmentRating": 5.0,
  "fastCustomerResponseRating": 100,
  "fastFulfillmentRating": 100,
  "orderCompletedRating": 99,
  "positiveFeedbackRating": 99,

  "province": "DKI Jakarta",
  "pickupPointCity": "Kota Bekasi",
  "pickupPointAddress": "Gudang Blibli.com, Komplek Pergudangan ...",
  "pickupPointLatLong": "-6.2038743,106.9686089",
  "fulfilledByBlibli": true,
  "businessHours": [{ "day": "MONDAY", "openingTime": "00.00", "closingTime": "23.59", "open": true }],

  "totalFollowers": 12427,
  "totalReviews": 68842,
  "averageRating": 4.9,
  "negativeSharePercent": 0.72,
  "reviewTopicCounts": { "QUALITY": 1181, "PRICE": 1006, "SHIPMENT": 935 },

  "productCount": 154,
  "voucherCount": 27,
  "vouchers": [{ "title": "Diskon Rp10.000", "minCriteria": "Min. transaksi Rp100.000", "endDateIso": "..." }]
}
```

Plus one `PRODUCT` record per catalogue item:

```json
{
  "recordType": "PRODUCT",
  "sku": "COP-60023-00892",
  "name": "Colgate Optic White Purple Toothpaste [100 g] x 3 Pcs",
  "salePrice": 88500,
  "listPrice": 169200,
  "discountPercent": 48,
  "rating": 4,
  "reviewCount": 128,
  "soldCount": 2380,
  "storeLocation": "Kota Bekasi",
  "categories": ["Kesehatan & Kecantikan", "Perawatan Gigi & Mulut"]
}
```

### Benchmarking competitors

List several stores and you get a directly comparable row each:

| Store | Badge | Response | Ships from | Followers | Products | Vouchers |
| --- | --- | --- | --- | --- | --- | --- |
| Colgate Palmolive | Diamond | 5.0 | Kota Bekasi | 12,427 | 154 | 27 |
| adidas Sports | Diamond | 5.0 | Kab. Bekasi | 43,161 | 3,112 | 25 |

`respondTimeRating` and `fastCustomerResponseRating` answer "how
responsive is this seller", `pickupPointCity` and `fulfilledByBlibli`
answer "how fast can they deliver to my customers", `reviewTopicCounts`
answers "what do their buyers keep bringing up", and `soldCount` across the
catalogue is the closest public proxy for their actual demand.

### Input

```json
{
  "storeUrls": [
    "https://www.blibli.com/merchant/colgate-palmolive-indonesia-flagship-store/COP-60023",
    "ADS-12698",
    "COP-60023-00933"
  ],
  "includeProducts": true,
  "catalogCoverage": "standard"
}
```

| Field | Description |
| --- | --- |
| `storeUrls` | Store URL, bare store code, or **any product URL/SKU from the store** — the store code is the SKU's prefix |
| `includeProducts` | Emit the catalogue. On by default; turn off for a fast profile-only run |
| `catalogCoverage` | `standard` (one sweep, up to 800) or `deep` (extra sort + price-band sweeps for large stores) |
| `maxProductsPerStore` | Cap per store (0 = no limit) |
| `includeReviewStats` | Add rating histogram + review topic counts. On by default |
| `includeVouchers` | Add active vouchers. On by default |
| `proxyConfiguration` | Apify Residential + country `ID` recommended |

### Known limits

- **Very large catalogues cannot be fully enumerated.** Blibli's search
  serves at most 800 products per query. `deep` coverage adds sort and
  price-band sweeps, reaching **2,271 of 3,112** products on the largest
  store tested. `productCount` on the profile always reports the *true*
  catalogue size, so you can see what fraction a run retrieved.
- **No absolute stock levels.** `soldCount` is the demand signal Blibli
  exposes.
- Badge scores are calculated over a rolling window (`badgeCalculationDays`,
  180 in samples), so they lag very recent performance changes.
- A store code that does not exist is reported as a `STORE_NOT_FOUND` error
  row rather than silently producing an all-zero profile — Blibli returns
  HTTP 200 for made-up codes.

### Reliability

Blibli sits behind **Cloudflare**, and the merchant-profile endpoint
additionally blocks *specific TLS fingerprints* — Chrome profiles get a 403
there while every other endpoint works fine on them. This actor leads with
a fingerprint verified against all five endpoints it uses, and a test
guards that ordering so it cannot regress. On a block it retries with
exponential backoff, rotating both fingerprint and (with a proxy) egress IP.

A failing store never sinks the run: it emits an `ERROR` record with
`_error` and `_errorDetail`, and the remaining stores continue.

See [CRAWLING\_METHOD.md](CRAWLING_METHOD.md) for the full fingerprint
matrix, the endpoints that looked useful but were not, and the measured
catalogue-partition results.

# Actor input Schema

## `storeUrls` (type: `array`):

Which stores to profile. Accepts a store URL (https://www.blibli.com/merchant/<name>/COP-60023), a bare store code (COP-60023), or ANY product URL or SKU from that store - the store code is the SKU's own prefix, so pasting a competitor's product link works. List several to benchmark competitors side by side.

## `includeProducts` (type: `boolean`):

Emit one PRODUCT record per item in the store's catalogue, with price, discount, rating, sold count and stock location. Turn off for a fast profile-only run.

## `catalogCoverage` (type: `string`):

Blibli's search serves at most 800 products per query. 'standard' does one sweep, which is the complete catalogue for most stores. 'deep' adds sort-order and price-band sweeps to reach further into very large catalogues (measured: 2,271 of 3,112 products on a store where a single sweep returned 800).

## `maxProductsPerStore` (type: `integer`):

Stop after this many products per store. 0 means no limit - sweep until the coverage plan is exhausted.

## `includeReviewStats` (type: `boolean`):

Add the store's rating histogram, average rating, negative share, and Blibli's own review-topic counts (quality, price, shipping, packaging, service, authenticity) to the profile record.

## `includeVouchers` (type: `boolean`):

Add the store's currently active vouchers - discount value, minimum spend and expiry - to the profile record. Useful for reading a competitor's promotional posture.

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

Blibli is behind Cloudflare. Apify Residential proxy with country 'ID' is recommended for long runs; short runs usually succeed without a proxy.

## Actor input object example

```json
{
  "storeUrls": [
    "https://www.blibli.com/merchant/colgate-palmolive-indonesia-flagship-store/COP-60023"
  ],
  "includeProducts": true,
  "catalogCoverage": "standard",
  "maxProductsPerStore": 0,
  "includeReviewStats": true,
  "includeVouchers": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Merchant profile and product inventory records from this run.

# 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 = {
    "storeUrls": [
        "https://www.blibli.com/merchant/colgate-palmolive-indonesia-flagship-store/COP-60023"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zucchini_gopher_m2v/blibli-merchant-profile-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 = { "storeUrls": ["https://www.blibli.com/merchant/colgate-palmolive-indonesia-flagship-store/COP-60023"] }

# Run the Actor and wait for it to finish
run = client.actor("zucchini_gopher_m2v/blibli-merchant-profile-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 '{
  "storeUrls": [
    "https://www.blibli.com/merchant/colgate-palmolive-indonesia-flagship-store/COP-60023"
  ]
}' |
apify call zucchini_gopher_m2v/blibli-merchant-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zucchini_gopher_m2v/blibli-merchant-profile-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/F6g60hefl7qXbEVLR/builds/lKhenfbr45VkYChiz/openapi.json
