# PChome Scraper — Taiwan Product Prices & Listings (`logiover/pchome-taiwan-product-scraper`) Actor

Scrape PChome 24h, Taiwan's largest online retailer. Extract product name and description, price in New Taiwan dollars, category, seller and image for any search term across the whole catalogue. Straight from the store's own JSON API, no key required.

- **URL**: https://apify.com/logiover/pchome-taiwan-product-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 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

## PChome Scraper — Taiwan Product Prices & Listings

Taiwan's largest online retailer in rows: product name and description, price in New Taiwan dollars, category, seller and image — for any search term across the whole catalogue.

### What does the PChome Scraper do?

This Actor collects products from **PChome 24h**, Taiwan's largest online retailer and the reference most Taiwanese shoppers check first — famous locally for 24-hour delivery across the island.

The storefront is served by a search API that answers JSON directly, so no markup is parsed at all. That makes this one of the fastest scrapers in the catalogue: six hundred products in about fifteen seconds, with no proxy needed.

### Who is it for?

- **Price-monitoring and repricing teams** tracking the Taiwanese market.
- **Brands and distributors** checking how their products are listed and priced in Taiwan.
- **Market researchers** measuring price distribution in a category.
- **Marketplace sellers** benchmarking against PChome's own first-party listings.
- **Comparison sites** seeding a Taiwanese catalogue.
- **Supply-chain analysts** watching electronics pricing at the source of much of it.

### Use cases

- Track prices for a product category day by day to detect discounting.
- Compare PChome's own listings against marketplace sellers on the same term.
- Measure the price spread within a category to position a product.
- Build a Taiwanese price index for consumer electronics.
- Watch how quickly new models appear after a launch.
- Feed an AI agent live Taiwanese retail prices for shopping questions.

### Why use this PChome Scraper?

- **Straight from the store's JSON API** — no markup parsing, nothing to break when the front end changes.
- **Very fast**: hundreds of products a second, and no proxy required.
- **Every emitted column is filled.** The API declares brand, author and publish date but returns them empty on every product, so those are excluded rather than shipped blank. See the FAQ.
- **First-party and marketplace listings distinguished** in the `seller` column.
- **Five sort orders**, including best selling and price ascending.
- **Keyless and login-free.**

### What data can you extract?

One row per product. Anything the source left blank comes back as `null`.

| Field | Description |
| --- | --- |
| `productId` | PChome product ID |
| `url` | Link to the product page |
| `title` | Product name |
| `description` | Product description |
| `price` | Price in New Taiwan dollars |
| `categoryId` | PChome category identifier |
| `seller` | PChome or Marketplace seller |
| `imageUrl` | Product image |
| `searchTerm` | The term crawled |
| `scrapedAt` | ISO timestamp of collection |

#### Sample output

```json
{
  "productId": "DHAEJA-A900IU6JY",
  "url": "https://24h.pchome.com.tw/prod/DHAEJA-A900IU6JY",
  "title": "Aspire Lite 17.3吋文書筆電 銀色(C3-N355/8G/512G/W11/AL17-31P-363V)",
  "description": "ACER Aspire Lite 17.3吋文書筆電 銀色(C3-N355/8G/512G/W11/AL17-31P-363V)",
  "price": 17900,
  "categoryId": "DHAEJA",
  "seller": "PChome",
  "imageUrl": "https://cs-a.ecimg.tw/items/DHAEJAA900IU6JY/000001_1747722528.jpg",
  "searchTerm": "筆電",
  "scrapedAt": "2026-08-23T11:36:26.527Z"
}
```

### How to use the PChome Scraper

#### Option A — one search term

Put a term in **Search term** — PChome is a Taiwanese store, so Chinese terms match far more than English ones. Try `筆電` (laptop), `手機` (phone) or `冷氣` (air conditioner). Set **Maximum results** and run.

#### Option B — a category sweep

Run several terms and combine the datasets. Each row carries its `searchTerm`, so the combined set stays segmented, and `categoryId` groups products by shelf.

#### Option C — a daily price watch

Schedule a daily run on the same term and diff `price` by `productId`.

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `searchTerm` | string | `筆電` | What to search for |
| `sort` | select | `sale/dc` | Best selling, most relevant, price ascending or descending, newest |
| `maxResults` | integer | 1000 | Stop after this many products (max 50,000) |
| `proxyConfiguration` | object | *(off)* | Optional; the API answers without one |

### Tips for best results

- **Search in Chinese.** The catalogue is written in Traditional Chinese and an English term matches a fraction of what the Chinese one does. `筆電` returns a whole category; "laptop" returns a handful of imports.
- **`categoryId` is the grouping key.** It is PChome's own shelf identifier and is stable across runs, which the search term is not.
- **Use `seller` before comparing prices.** PChome's first-party stock and marketplace sellers price differently on the same product.
- **`productId` is your join key** across scheduled runs.
- **Sort by price ascending** if you want the cheap end of a category without pulling the whole thing.

### Integrations

Connect the dataset to Make, Zapier, Airbyte, Google Sheets, Slack, GitHub or any HTTP endpoint through Apify integrations, or schedule a run and push results into a warehouse with a webhook.

### API usage

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("logiover/pchome-taiwan-product-scraper").call(run_input={
    "searchTerm": "手機",
    "sort": "sale/dc",
    "maxResults": 3000,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
first_party = [r for r in rows if r["seller"] == "PChome"]
print(f"{len(first_party)} of {len(rows)} sold by PChome itself")
```

### Use with AI agents (MCP)

The Actor is callable from the Apify MCP server, so an assistant can pull Taiwanese retail prices directly and answer product and pricing questions.

### FAQ

#### Do I need a PChome account or API key?

No. This Actor reads the store's public search interface; there is nothing to register.

#### How many products can one run return?

Up to 50,000 per run, twenty per request. Because the source is a JSON API rather than a rendered page, this runs at several hundred products a second.

#### Why is there no brand or discount column?

Because the API does not fill them. It declares `brand`, `author` and `publishDate` on every record and returns an empty string for all three, and `originPrice` is always identical to `price`, so there is no "was" figure and no discount to compute. Shipping columns that are blank on every row makes an export look broken, so they are left out.

#### What currency are prices in?

New Taiwan dollars (TWD).

#### Should I search in Chinese or English?

Chinese. The catalogue is in Traditional Chinese, and English terms match only imported goods whose titles happen to carry Latin script.

#### What is the difference between PChome and a marketplace seller?

PChome holds and ships its own 24h stock; marketplace sellers list through the platform. The `seller` column separates them, and they price the same product differently.

#### Can I export to CSV or Excel?

Yes — every run's dataset exports to JSON, CSV, Excel, XML or JSONL.

#### How fresh is the data?

Each run reads the store live, so prices are as current as PChome's own at the moment you run it.

#### Why did my run return zero products?

Almost always an English search term with no Taiwanese matches. Try the Chinese equivalent.

#### How often is the Actor updated?

It is monitored and fixed when the source changes. See the changelog for release history.

### Is it legal to scrape PChome?

PChome is a public retail catalogue and this Actor reads only its public search interface — no accounts, no logins, no personal data. Product names, prices and availability are commercial information published to be seen. As with any scraping, you remain responsible for how you use the data and for respecting the retailer's terms in your own jurisdiction.

### Related scrapers

- **Bol Scraper** — Dutch and Belgian retail prices.
- **Rozetka Scraper** — Ukrainian retail prices.
- **Hepsiburada Scraper** — Turkish retail prices.
- **Morele Scraper** — Polish electronics prices.

# Actor input Schema

## `searchTerm` (type: `string`):

What to search for. PChome is a Taiwanese store, so Chinese terms match far more than English ones — e.g. 筆電 (laptop), 手機 (phone), 冷氣 (air conditioner).

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

How the store should order results.

## `maxResults` (type: `integer`):

Stop after this many products. Each page returns 20.

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

The PChome search API answers without a proxy. Enable one only for very large exports.

## Actor input object example

```json
{
  "searchTerm": "筆電",
  "sort": "sale/dc",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Every record collected in this run. Open the Dataset tab to browse, filter or export as JSON, CSV or Excel.

# 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 = {
    "searchTerm": "筆電",
    "sort": "sale/dc",
    "maxResults": 1000,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/pchome-taiwan-product-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 = {
    "searchTerm": "筆電",
    "sort": "sale/dc",
    "maxResults": 1000,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/pchome-taiwan-product-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 '{
  "searchTerm": "筆電",
  "sort": "sale/dc",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call logiover/pchome-taiwan-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/pchome-taiwan-product-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/vF7LBXB3yj13pSE0l/builds/fbvsyh73JG7fangCS/openapi.json
