# Lowyat Scraper – Malaysia's Biggest Forum, Threads & Replies (`claude_code_reviewer/lowyat-scraper`) Actor

Scrape Lowyat.NET, Malaysia's biggest forum, without an API: browse a section's latest topics with a title-keyword filter, or pull a topic's full first post and every reply. snake\_case JSON/CSV/Excel export for Malaysia social listening, brand monitoring and market research.

- **URL**: https://apify.com/claude\_code\_reviewer/lowyat-scraper.md
- **Developed by:** [Chad](https://apify.com/claude_code_reviewer) (community)
- **Categories:** AI, News, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 topic listings

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

## Lowyat Scraper – Malaysia's Biggest Forum, Threads & Replies

Scrape **Lowyat.NET** (forum.lowyat.net), Malaysia's largest and most active online forum, without an API or login. Browse a section's latest topics (with an optional title-keyword filter), or pull any topic's full first post and every reply — for Malaysia social listening, brand monitoring and market research.

No account, no token, no browser automation — just fast public HTML endpoints. Output is clean, structured `snake_case` data (JSON / CSV / Excel), missing values are `null` (never dropped), and every row carries an ISO 8601 `scraped_at`.

### Output fields

| Field | Type | Description |
|---|---|---|
| `topic_id` | string | Lowyat topic id (the number in `/topic/{id}`) |
| `site` | string | Always `"lowyat"` |
| `forum` | string | null | Section the row came from (forum mode); `null` in topic mode |
| `title` | string | null | Topic title |
| `author` | string | null | Topic starter (forum mode) or the post's author (topic main / reply) |
| `reply_count` | number | null | Reply count from the listing (forum mode) |
| `view_count` | number | null | View count from the listing (forum mode) |
| `created_at` | string | null | Topic start time / post time, ISO 8601 (Malaysia UTC+8 resolved to UTC) |
| `last_reply_at` | string | null | Last-activity time from the listing (forum mode) |
| `topic_url` | string | null | Canonical topic URL |
| `content` | string | null | Post body text — topic main post and each reply (topic mode) |
| `content_images` | array | Image URLs found in the post body |
| `post_id` | string | Reply rows only — the Lowyat post id |
| `floor` | number | null | Reply rows only — the post's `#N` floor number |
| `source_mode` | string | `"forum"` or `"topic"` |
| `source_query` | string | The section or topic id this row was scraped from |
| `scraped_at` | string | Scrape time, ISO 8601 |

### Modes

| Mode | What it does | Charged |
|---|---|---|
| `forum` (default) | Latest topics in one or more sections, paginated; optional title-keyword filter and `dateFrom` cut-off | `search-listing` per topic |
| `topic` | A topic's full first post + all replies, across all pages | `product-detail` (main post) + `review-item` (per reply) |

### Input fields

| Field | Type | Default | Notes |
|---|---|---|---|
| `mode` | string | — | `forum` or `topic` (required) |
| `forums` | array | — | forum mode: section slugs (e.g. `Kopitiam`) or `forum/{id}` |
| `topicIds` | array | `[]` | topic mode: numeric topic ids |
| `topicUrls` | array | `[]` | topic mode: full topic URLs (id auto-extracted) |
| `keywords` | array | `[]` | forum mode: keep only topics whose title contains a keyword |
| `bulkInput` | string | — | one item per line; routed to the current mode's field |
| `maxItems` | integer | 50 | forum: max topics per section; topic: max topics (replies uncapped). Max 500 |
| `dateFrom` | string | — | forum mode: `3d` / `12h` / `2w` or `MM/DD/YY`; also stops paging early |
| `proxyConfiguration` | object | Apify datacenter | keep on to avoid shared-IP rate limiting |

### Examples

Latest topics in the Kopitiam (chit-chat) section:

```json
{ "mode": "forum", "forums": ["Kopitiam"], "maxItems": 50 }
```

Brand monitoring — only topics mentioning a keyword, from the last week:

```json
{ "mode": "forum", "forums": ["Kopitiam", "Celebrities"], "keywords": ["Maybank", "TNG"], "dateFrom": "7d" }
```

Full topic with every reply:

```json
{ "mode": "topic", "topicIds": ["4718961"] }
```

Topic mode from URLs:

```json
{ "mode": "topic", "topicUrls": ["https://forum.lowyat.net/topic/4718961/"] }
```

### Notes

- **Forum-section browsing, not full-site search.** Lowyat's site-wide search is not publicly accessible, so this Actor monitors the sections you name and filters titles by keyword (the same approach as forum monitors for other boards). Pick the sections your topic lives in (e.g. `Kopitiam`, `Celebrities`, `Announcements`).
- **Timestamps** are Malaysia local time (UTC+8) converted to UTC. Listing "Today"/"Yesterday" values are resolved against the run time.
- **Floor numbers** come straight from Lowyat's own `#N` markers (continuous across pages); when a floor can't be read it is `null` rather than guessed.
- **Pinned/announcement topics** are returned but are exempt from the `dateFrom` filter and never trigger the early-stop.
- Keep `proxyConfiguration` on — running without a proxy shares egress IPs with other runs and invites rate limiting.

### FAQ

**Does it need a Lowyat account?** No. Only public content is read.

**Can it search all of Lowyat by keyword?** Not in v1 — Lowyat's public search isn't accessible. Use `forum` mode on the relevant sections with a `keywords` title filter.

**How do I find a section slug?** It's the path in the section URL — `forum.lowyat.net/Kopitiam` → `Kopitiam`.

**What about reply images/stickers?** Image URLs in a post body are captured in `content_images`; the forum's own UI sprites are excluded.

### Disclaimer

This Actor collects only publicly available content for research and analytics. You are responsible for complying with Lowyat.NET's terms and applicable laws (including data-protection rules) when using the data.

***

*Keywords: Lowyat scraper, Lowyat.NET, Malaysia forum scraper, forum threads & replies, social listening Malaysia, brand monitoring, sentiment analysis, no API, JSON CSV Excel export.*

# Actor input Schema

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

What to scrape? Pick one mode and fill in the matching field below.

## `forums` (type: `array`):

Lowyat section slug (the path in the URL, e.g. "Kopitiam" from forum.lowyat.net/Kopitiam) or a numeric section id passed as "forum/{id}". Examples: Kopitiam, Announcements, Celebrities. Used by forum-section mode.

## `topicIds` (type: `array`):

Lowyat topic ids (the number in forum.lowyat.net/topic/{id}), e.g. 4718961. Used by full-topic mode.

## `topicUrls` (type: `array`):

Full Lowyat topic URLs, e.g. https://forum.lowyat.net/topic/4718961/. The topic id is extracted automatically.

## `bulkInput` (type: `string`):

**One per line** (press Enter between items, no quotes or commas). Treated as section slugs/ids or topic ids/URLs depending on the current mode, and merged into the matching field at run time. Pasting a whole column from Google Sheets / Excel is the fastest way in.

## `keywords` (type: `array`):

(Optional) Forum-section mode: keep only topics whose title contains any of these keywords. Leave empty to keep everything.

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

Forum-section mode: max topics per section. Full-topic mode: max topics to fetch (replies within a topic are not capped by this). Hard cap 500.

## `dateFrom` (type: `string`):

Forum-section mode only; judged by the later of topic-start time and last-reply time. Formats: relative like 3d (last 3 days), 12h, 2w, or absolute MM/DD/YY. Leave empty for no filter. When set it also stops paging early (pinned topics are exempt), saving cost on scheduled monitoring.

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

Defaults to Apify datacenter proxy: without a proxy you share egress IPs with every other proxy-less run, which gets forum sites to rate-limit you (429, missing pages). HTML responses are small, so proxy traffic cost is negligible. Turn it off only for local testing or bring-your-own proxy.

## Actor input object example

```json
{
  "mode": "forum",
  "forums": [
    "Kopitiam"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "mode": "forum",
    "forums": [
        "Kopitiam"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("claude_code_reviewer/lowyat-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 = {
    "mode": "forum",
    "forums": ["Kopitiam"],
}

# Run the Actor and wait for it to finish
run = client.actor("claude_code_reviewer/lowyat-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 '{
  "mode": "forum",
  "forums": [
    "Kopitiam"
  ]
}' |
apify call claude_code_reviewer/lowyat-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,claude_code_reviewer/lowyat-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/SlkU87bKe1Vuc7rFu/builds/6eAzeiFW5fS2bCOde/openapi.json
