# Thaimart Product & Shop Scraper (`mai_amm/thaimart-scraper`) Actor

Scrape public Thaimart marketplace product pages and search/category result pages

- **URL**: https://apify.com/mai\_amm/thaimart-scraper.md
- **Developed by:** [wiseld\_squid](https://apify.com/mai_amm) (community)
- **Categories:** E-commerce, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Thaimart Product & Shop Scraper

Scrape public product listings from [Thaimart](https://thaimart.com/) for product research, price monitoring, seller discovery, catalog building, and Thailand e-commerce market analysis.

The Actor supports Thai search keywords, public product URLs, category URLs, seller URLs, and search-result URLs. Results are saved as normalized product records in the default Apify dataset.

### What You Can Scrape

- Product title, description, slug, and canonical URL
- Current price or price range in THB
- Shop name and public seller URL
- Category path and breadcrumbs
- Stock availability
- Main product image and image gallery
- Product variants, quantities, dimensions, and public compliance fields when available
- Product creation and update timestamps published by the source
- Discovery source and scrape timestamp

### Common Use Cases

- Monitor product prices and availability
- Compare sellers and product ranges
- Build searchable product catalogs
- Research Thai marketplace categories
- Discover shops for sourcing or partnership outreach
- Track assortment changes with scheduled Apify runs

### Input

| Field | Type | Default | Description |
|---|---|---:|---|
| `accessMode` | string | `preview` | Use `preview` for a capped sample or `full` for a larger run. |
| `searchKeywords` | string[] | — | One or more product keywords. Thai and English terms are supported. |
| `startUrls` | request[] | — | Public Thaimart product, search, category, or seller URLs. |
| `maxItems` | integer | `20` | Maximum number of unique products saved. |
| `previewLimit` | integer | `20` | Preview-mode cap, from 1 to 50 products. |
| `maxPages` | integer | `10` | Maximum listing pages processed for each search. |
| `includeDetails` | boolean | `true` | Enrich products with descriptions, shops, availability, variants, and other detail fields. |
| `includeImages` | boolean | `true` | Include public product image URLs. |
| `proxyConfiguration` | object | Apify Proxy | Proxy configuration used by the Actor. |

If no keywords or URLs are supplied, the Actor collects a default product sample.

### Example Input

Search for up to 100 coffee products:

```json
{
  "accessMode": "full",
  "searchKeywords": ["กาแฟ"],
  "maxItems": 100,
  "maxPages": 5,
  "includeDetails": true,
  "includeImages": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

Search multiple keywords:

```json
{
  "accessMode": "full",
  "searchKeywords": ["กาแฟ", "ชา", "น้ำผึ้ง"],
  "maxItems": 200,
  "includeDetails": false
}
```

Scrape specific public pages:

```json
{
  "accessMode": "full",
  "startUrls": [
    { "url": "https://thaimart.com/products/<product-slug>" },
    { "url": "https://thaimart.com/categories/<category-id>" },
    { "url": "https://thaimart.com/sellers/<seller-id>" },
    { "url": "https://thaimart.com/search?keyword=กาแฟ" }
  ],
  "maxItems": 100,
  "includeDetails": true
}
```

### Output

Each dataset item represents one unique product. Common fields include:

- `recordType`, `source`
- `url`, `canonicalUrl`, `slug`
- `title`, `description`
- `price`, `priceText`, `currency`
- `shopName`, `shopUrl`
- `categoryHints`, `breadcrumbs`
- `availability`
- `image`, `images`
- `metadata`
- `discoveredFrom`, `scrapedAt`

#### Output Example

```json
{
  "recordType": "product",
  "source": "thaimart",
  "url": "https://thaimart.com/products/กาแฟ-sunday-ซองขาว-485604b27340",
  "canonicalUrl": "https://thaimart.com/products/กาแฟ-sunday-ซองขาว-485604b27340",
  "title": "กาแฟ Sunday ซองขาว",
  "description": "กาแฟ Sunday รสชาติหอมกลิ่นกาแฟ",
  "price": 160,
  "priceText": "160 บาท",
  "currency": "THB",
  "shopName": "อันดรู",
  "shopUrl": "https://thaimart.com/sellers/อันดรู-0UsYK8",
  "categoryHints": [
    "อาหารและเครื่องดื่ม",
    "เครื่องดื่มและผงชงดื่ม",
    "กาแฟ / เมล็ดกาแฟคั่ว"
  ],
  "availability": "OutOfStock",
  "image": "https://img-cdn.thaimart.com/...",
  "images": ["https://img-cdn.thaimart.com/..."],
  "discoveredFrom": "keyword",
  "scrapedAt": "2026-07-23T08:55:59.119Z"
}
```

### Run Summary

After each run, the default key-value store contains:

- `SUMMARY`: saved products, discovered products, pages processed, timestamps, and errors
- `OUTPUT`: dataset ID plus the same run summary

Use these records to monitor scheduled runs or connect the Actor to automation workflows.

### Result Size and Performance

- Preview mode returns at most 50 products and is suitable for quick validation.
- Full mode follows `maxItems` and `maxPages` for larger collections.
- `includeDetails: false` is faster and returns lighter product records.
- `includeDetails: true` is slower but provides richer seller, stock, description, and variant data.
- A cloud validation run collected 10 detailed products in about 30 seconds. Actual duration varies with result size and source response time.

### Notes

- Prices, stock, images, and seller information can change after collection.
- Some products may not publish every optional field.
- Products with different variants can expose a price range in `priceText`.
- Use `maxItems` and `maxPages` to control runtime and cost.
- Collect and use marketplace data responsibly and in accordance with applicable rules and your use case.

# Actor input Schema

## `accessMode` (type: `string`):

Preview is capped for quick validation. Full mode allows larger runs.

## `searchKeywords` (type: `array`):

Keywords to search on Thaimart public search pages. Thai terms are supported.

## `startUrls` (type: `array`):

Optional public Thaimart URLs to crawl, such as /search, /products/:slug, /categories/:id, or /sellers/:id. Do not add /api URLs.

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

Maximum product records to save. Preview mode is capped at previewLimit.

## `previewLimit` (type: `integer`):

Maximum products saved in preview mode.

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

Maximum search/category/listing pages to open for discovery.

## `includeDetails` (type: `boolean`):

Open product pages for detail extraction. Recommended for useful output.

## `includeImages` (type: `boolean`):

Collect image URLs from product pages.

## `scrollPage` (type: `boolean`):

Useful because Thaimart is a Next.js app with client-side content.

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

Apify proxy configuration.

## Actor input object example

```json
{
  "accessMode": "preview",
  "searchKeywords": [
    "กาแฟ"
  ],
  "startUrls": [],
  "maxItems": 20,
  "previewLimit": 20,
  "maxPages": 10,
  "includeDetails": true,
  "includeImages": true,
  "scrollPage": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `summary` (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 = {
    "accessMode": "preview",
    "searchKeywords": [
        "กาแฟ"
    ],
    "startUrls": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mai_amm/thaimart-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 = {
    "accessMode": "preview",
    "searchKeywords": ["กาแฟ"],
    "startUrls": [],
    "maxItems": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "accessMode": "preview",
  "searchKeywords": [
    "กาแฟ"
  ],
  "startUrls": [],
  "maxItems": 20
}' |
apify call mai_amm/thaimart-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=mai_amm/thaimart-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Thaimart Product & Shop Scraper",
        "description": "Scrape public Thaimart marketplace product pages and search/category result pages",
        "version": "1.0",
        "x-build-id": "0BGq2TIUByKQx30Ci"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mai_amm~thaimart-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mai_amm-thaimart-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/mai_amm~thaimart-scraper/runs": {
            "post": {
                "operationId": "runs-sync-mai_amm-thaimart-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/mai_amm~thaimart-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-mai_amm-thaimart-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "accessMode": {
                        "title": "Result type",
                        "enum": [
                            "preview",
                            "full"
                        ],
                        "type": "string",
                        "description": "Preview is capped for quick validation. Full mode allows larger runs.",
                        "default": "preview"
                    },
                    "searchKeywords": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search on Thaimart public search pages. Thai terms are supported.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Specific public URLs",
                        "type": "array",
                        "description": "Optional public Thaimart URLs to crawl, such as /search, /products/:slug, /categories/:id, or /sellers/:id. Do not add /api URLs.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum products",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum product records to save. Preview mode is capped at previewLimit.",
                        "default": 20
                    },
                    "previewLimit": {
                        "title": "Preview cap",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum products saved in preview mode.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Maximum listing pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum search/category/listing pages to open for discovery.",
                        "default": 10
                    },
                    "includeDetails": {
                        "title": "Open product pages",
                        "type": "boolean",
                        "description": "Open product pages for detail extraction. Recommended for useful output.",
                        "default": true
                    },
                    "includeImages": {
                        "title": "Include images",
                        "type": "boolean",
                        "description": "Collect image URLs from product pages.",
                        "default": true
                    },
                    "scrollPage": {
                        "title": "Scroll pages before extraction",
                        "type": "boolean",
                        "description": "Useful because Thaimart is a Next.js app with client-side content.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Apify proxy configuration.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
