Lelong.my Scraper | Malaysia Online Marketplace
Pricing
from $1.00 / 1,000 results
Lelong.my Scraper | Malaysia Online Marketplace
Scrape Lelong.my — Malaysia's veteran e-commerce marketplace. Product listings across electronics, fashion, automotive, home and antiques. Title, price (RM), shop, availability, images and detail pages. Keyword-driven search OR paste any Lelong URL.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Lelong.my Scraper — Malaysia Online Marketplace Product, Price & Seller Data Extractor
The most reliable Lelong.my data extraction tool on Apify. Pull live product listings, prices in Malaysian Ringgit (RM), shop names, availability, condition, images, view counts, and listing IDs from Malaysia's veteran e-commerce marketplace — straight from JSON-LD with no headless browser, no Cloudflare bypass, and no login required.
What This Actor Does
The Lelong.my Scraper is a production-grade Apify Actor that extracts structured product listings from Lelong.my — Malaysia's longest-running online marketplace (founded 1998), still actively used by Malaysian sellers and resellers across electronics, automotive parts, fashion, home goods, antiques, collectibles, and consumer staples.
The actor accepts two input modes:
- Keyword mode — supply free-text search terms (
"toyota vios","iphone 15","air fryer","gaming chair"); the actor builds/kx/{keyword}.htmURLs, reads the JSON-LDItemListembedded on each search page, and enriches every hit by fetching the individual product page. - URL mode — paste any Lelong.my URL (search page, category browse, individual
*-Sale-I.htmitem,*-Sale-P.htmpromoted item, or shop page); the actor detects the page type and parses accordingly.
Each output record contains the data Malaysian e-commerce, dropshipping, and reseller teams actually need:
- Title — full product name as listed on Lelong
- Price (RM) — numeric value in Malaysian Ringgit (
MYR) - Shop name and shop URL — the seller's storefront (e.g.,
STAR_ICON,AUTOBAGS,mobileshop2u) - Availability —
InStock,OutOfStock,PreOrder(Schema.org enum normalized) - Condition —
NewCondition,UsedCondition,RefurbishedCondition - Category — auto-derived from URL slug or breadcrumb (
Automotive > Parts,Mobile Phones, etc.) - Brand — when declared in JSON-LD
Product.brand - Listing type —
Item(regular) orPromoted(paid placement,-Sale-P.htm) - Images — full image gallery, sanitised of bank logos, app-store badges, and merchant banners
- View count and sold count — when surfaced in the page DOM
- Posted year/month — extracted from the canonical URL pattern (
YYYY-MM-Sale-X.htm) - Listing ID — numeric or
X-prefixed identifier parsed from the URL
This makes the actor the fastest path to a clean, structured Lelong.my dataset — for competitive analysis, dropshipping product research, reseller arbitrage, brand monitoring, or Malaysian consumer trend tracking.
Why scrape Lelong.my yourself when this exists?
Lelong is technically easier to scrape than most modern marketplaces — no Cloudflare, no aggressive WAF, no JS challenge — but the long tail of edge cases will still consume a week of engineering time:
- Lelong's
/kx/{keyword}.htmendpoint does not paginate — each search returns at most ~9 items, so coverage requires multi-keyword orchestration - Listing cards are split between three rendering strategies: JSON-LD
ItemList,<b data-id data-link data-name>attributes, and raw<a href*="-Sale-I.htm">anchors — you need all three as fallbacks - JSON-LD payloads occasionally contain trailing commas that break stock
JSON.parse— a permissive parser is mandatory - Detail-page image galleries are polluted with bank logos (Maybank, CIMB, Public Bank), App Store / Google Play badges, and "BPP Crest" trust seals — a whitelist on
c.76.my/UserImages/Items/is required - Listing IDs and posting dates are embedded in the URL pattern
-{ID}-{YYYY-MM}-Sale-{P|I}.htm— you need a regex to recover them - Promoted listings (
-Sale-P.htm) and regular listings (-Sale-I.htm) share the same page template but differ in placement and pricing — distinguishing them matters for arbitrage analysis - Availability and condition come back as full Schema.org URIs (
https://schema.org/InStock); they must be stripped to plain English for CSV exports - Shop names occasionally appear only in DOM (
a.catalogShop-name) rather than the JSON-LDsellerblock — dual extraction needed - Lelong serves a mix of English and Malay copy; encoding and whitespace normalization are non-trivial
This actor solves all of the above: it downloads, parses, normalises, deduplicates, and outputs JSON — no parsing scripts, no broken selectors, no image-junk to filter downstream.
Quick Start
One-Click Run
- Open the Lelong.my Scraper page on Apify and click Try for free
- Either keep the default keyword (
toyota vios) or paste your own keywords / start URLs - (Optional) tick Scrape Detail Pages for richer per-item data
- Hit Start — your dataset is live in 30–90 seconds for a small keyword set
API Run (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/lelong-my-scraper").call(run_input={"keywords": ["toyota vios spare parts","perodua myvi accessories","iphone 15 pro max","samsung galaxy a55","air fryer",],"scrapeDetails": True,"maxRecords": 100,"requestDelay": 1000,"maxConcurrency": 4,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"RM {item['price']:>8} | {item['shopName'] or '-':<20} | "f"{item['listingType'] or '-':<8} | {item['title']}")
API Run (Node.js / TypeScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/lelong-my-scraper').call({keywords: ['xiaomi redmi note 13', 'logitech gaming mouse', 'durian'],scrapeDetails: true,maxRecords: 60,maxConcurrency: 6,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} Lelong.my listings`);for (const it of items) {console.log(`${it.listingId ?? '?'} RM ${it.price} ${it.title}`);}
API Run (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~lelong-my-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://www.lelong.com.my/kx/perodua+axia.htm"},{"url": "https://www.lelong.com.my/kx/proton+saga.htm"}],"scrapeDetails": true,"maxRecords": 40}'
Pasting a single item URL
{"startUrls": [{"url": "https://www.lelong.com.my/original-toyota-prius-camry-vios-altis-hilux-door-lamp-switch-star-icon-X526784-2007-01-Sale-I.htm"}],"scrapeDetails": true}
The actor auto-detects the URL pattern (-Sale-I.htm for an item, -Sale-P.htm for a promoted item) and skips search-page parsing.
How It Works
Lelong.my is one of the few large-scale marketplaces that still serves a fully server-rendered HTML page with embedded JSON-LD ItemList payloads on every search result page. That makes the scraping architecture refreshingly simple — and refreshingly cheap.
Architecture at a glance
| Layer | Library | Purpose |
|---|---|---|
| HTTP client | got-scraping | Realistic browser headers, automatic TLS fingerprint, no Chrome process |
| HTML parser | cheerio | jQuery-style traversal for fallbacks and DOM enrichment |
| Structured data | Inline JSON-LD parser | Product, ItemList, BreadcrumbList extraction |
| Concurrency | Async worker queue | 1–20 parallel requests, default 4 |
| Storage | Dataset.pushData (Apify) | Streaming per-record writes |
No Playwright. No Chrome. No headless browser overhead. The Docker image is apify/actor-node:20 and the cold start is ~25 seconds. Memory: 256 MB is sufficient for keyword runs; 512–1024 MB headroom for very large URL lists.
Source endpoints
| Page type | URL pattern | Records returned |
|---|---|---|
| Keyword search | /kx/{keyword+slug}.htm | Up to ~9 items per keyword (no pagination) |
| Item detail (regular) | /{slug}-{shop}-{id}-{yyyy-mm}-Sale-I.htm | 1 enriched product |
| Promoted item | /{slug}-{shop}-{id}-{yyyy-mm}-Sale-P.htm | 1 enriched product |
| Category browse | /{category-slug}/... | Varies |
| Shop page | /{shop-slug}/... | Varies |
Extraction strategy (in priority order)
- JSON-LD
ItemList— primary source on search pages. IteratesitemListElement[], readingname,url,image,offers.price,offers.priceCurrency,offers.availability,description,brand. <b data-id data-link data-name>attributes — fallback when JSON-LD is absent or malformed.<a href*="-Sale-[IP].htm">regex — last-resort link scrape withtitle/text mining.- Detail-page enrichment — for each stub, fetch the product URL and re-parse JSON-LD
Product,BreadcrumbList, plus DOM fallbacks forshopName,shopUrl, the full image gallery,Sold:/Views:counters.
Resilience
- 3-attempt retry with exponential backoff per fetch (2 s × attempt + random jitter)
- Per-task consecutive-failure tracking — abandons the entire run after 3 back-to-back empty/failed responses to avoid wasting compute on a Lelong outage
Actor.fail()when total records = 0 — no silentSUCCEEDEDruns that look fine in the dashboard but produced nothing- Permissive JSON-LD parsing — falls back to a
,]→]normalization for Lelong's occasional trailing-comma bug - Image whitelist — filters out
BankLogo,app-store-badge,google-play-badge,bpp_crest, merchant banners, and SVG icons; keeps onlyUserImages/Items/andMalaysia/paths
Why no proxy?
Lelong has no Cloudflare, no DataDome, no PerimeterX, and no WAF challenge. Direct HTTP requests with realistic Chrome 120+ headers and en-MY locale succeed reliably. The proxy field is exposed in the input schema for users running very large URL lists who want IP rotation — but for the typical workload it is off by default and never needed.
Input Parameters
{"startUrls": [],"keywords": ["toyota vios", "perodua myvi"],"scrapeDetails": true,"maxRecords": 50,"requestDelay": 1000,"maxConcurrency": 4,"proxyConfiguration": { "useApifyProxy": false }}
Parameter reference
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array<{url: string}> | [] | Any Lelong.my URL — keyword search, category, item detail, promoted item, or shop page. When provided, overrides keywords. Useful for narrow targeting or replaying historical URLs. |
keywords | array<string> | ["toyota vios"] | Free-text search terms. Each becomes a /kx/{slug}.htm request. Up to ~9 results per keyword — use multiple keywords for breadth. |
scrapeDetails | boolean | true | Visit each item URL for richer data (description, condition, full image gallery, shop info, view count). Slower but much more complete. Adds ~1–3 seconds per item. |
maxRecords | integer | 50 | Cap total output across all keywords/URLs. 0 = unlimited (bounded only by source pages). |
requestDelay | integer (ms) | 1000 | Delay between requests. Range 200–10 000. Lelong has no anti-bot WAF, but 800–2000 ms is polite. |
maxConcurrency | integer | 4 | Parallel HTTP requests during detail enrichment. Range 1–20. 4–8 is safe; higher may trigger rate limits. |
proxyConfiguration | object | {useApifyProxy: false} | Optional Apify Proxy. Not required. Use apifyProxyCountry: "MY" for Malaysian residential IPs only if needed. |
Output Schema
Every record is a flat JSON object — easy to load straight into Postgres, BigQuery, Snowflake, Google Sheets, or a pandas DataFrame without per-field branching.
Core fields
| Field | Type | Description |
|---|---|---|
listingId | string | null | Lelong internal ID parsed from URL pattern (e.g., X526784, 221826664) |
title | string | Product title as listed |
description | string | null | Long description from JSON-LD Product.description |
price | number | null | Numeric price in RM (Malaysian Ringgit) |
currency | string | Always "MYR" for Lelong listings |
availability | string | null | Normalized: InStock, OutOfStock, PreOrder |
condition | string | null | Normalized: New, Used, Refurbished |
category | string | null | Breadcrumb tail or URL-derived (e.g., Automotive > Parts) |
brand | string | null | From JSON-LD Product.brand |
model | string | null | Model code when present in schema |
listingType | string | null | Item (regular) or Promoted (paid placement) |
Shop fields
| Field | Type | Description |
|---|---|---|
shopName | string | null | Seller display name (e.g., STAR_ICON, AUTOBAGS, mobileshop2u) |
shopUrl | string | null | Full URL of the seller storefront |
shopLocation | string | null | When surfaced (city or state — Selangor, Penang, Kuala Lumpur) |
Media fields
| Field | Type | Description |
|---|---|---|
image | string | null | Primary product image (absolute URL) |
images | array<string> | null | Full sanitised image gallery — bank logos and badges removed |
Engagement & metadata
| Field | Type | Description |
|---|---|---|
viewCount | number | null | Page-view count scraped from Views: text |
soldCount | number | null | Units-sold counter scraped from Sold: text |
postedYearMonth | string | null | YYYY-MM derived from URL (e.g., 2026-09) |
listingUrl | string | Canonical product URL |
sourceUrl | string | The search/category/start URL that surfaced this record |
scrapedAt | string (ISO-8601) | Run timestamp |
Example record — auto part from a Selangor seller
{"listingId": "221826664","title": "Arospeed Anti Heat Coated Toyota Vios 07 Air Ram System","description": "Universal cold air intake system with heat-coated piping. Compatible with Toyota Vios 2007–2013. Improves throttle response.","price": 320,"currency": "MYR","availability": "InStock","condition": "New","category": "Automotive > Parts & Accessories","brand": "Arospeed","model": null,"shopName": "AUTOBAGS","shopUrl": "https://www.lelong.com.my/store/autobags","shopLocation": "Petaling Jaya, Selangor","listingType": "Promoted","image": "https://c.76.my/Malaysia/UserImages/Items/22/221826664-Arospeed.jpg","images": ["https://c.76.my/Malaysia/UserImages/Items/22/221826664-Arospeed.jpg","https://c.76.my/Malaysia/UserImages/Items/22/221826664-Arospeed-2.jpg"],"viewCount": 1843,"soldCount": 27,"postedYearMonth": "2026-09","listingUrl": "https://www.lelong.com.my/arospeed-anti-heat-coated-toyota-vios-07-air-ram-system-AUTOBAGS-221826664-2026-09-Sale-P.htm","sourceUrl": "https://www.lelong.com.my/kx/toyota+vios.htm","scrapedAt": "2026-05-18T08:14:22.000Z"}
Example record — collector spare part from a Penang shop
{"listingId": "X526784","title": "Original Toyota Prius Camry Vios Altis Hilux Door Lamp Switch","description": "Genuine Toyota OEM door courtesy lamp switch. Fits Prius, Camry, Vios, Altis, Hilux 2004–2012 model years.","price": 18.5,"currency": "MYR","availability": "InStock","condition": "New","category": "Automotive > Body & Interior","brand": "Toyota","model": null,"shopName": "STAR_ICON","shopUrl": "https://www.lelong.com.my/store/staricon","shopLocation": "George Town, Penang","listingType": "Item","image": "https://c.76.my/Malaysia/UserImages/Items/X5/X526784-doorswitch.jpg","images": ["https://c.76.my/Malaysia/UserImages/Items/X5/X526784-doorswitch.jpg"],"viewCount": 412,"soldCount": 9,"postedYearMonth": "2007-01","listingUrl": "https://www.lelong.com.my/original-toyota-prius-camry-vios-altis-hilux-door-lamp-switch-star-icon-X526784-2007-01-Sale-I.htm","sourceUrl": "https://www.lelong.com.my/kx/toyota+vios.htm","scrapedAt": "2026-05-18T08:14:23.000Z"}
Listing Type & Availability Reference
Listing types
| Value | Meaning | URL marker |
|---|---|---|
Item | Standard organic listing | -Sale-I.htm |
Promoted | Paid placement (sponsored / featured slot) | -Sale-P.htm |
Promoted listings are typically Lelong's "Best Sellers", "Spotlight", or carousel slots. Filter on listingType === "Promoted" to study what shops are paying to push, or listingType === "Item" for purely organic supply.
Availability values
| Value | Meaning |
|---|---|
InStock | Ready to ship |
OutOfStock | Seller currently has none |
PreOrder | Available on backorder / built to order |
Discontinued | No longer offered |
Condition values
| Value | Meaning |
|---|---|
New | Brand-new, unopened |
Used | Pre-owned, working |
Refurbished | Restored to working condition |
Damaged | Sold as-is for parts |
Common top-level categories on Lelong.my
| Category | Typical sellers |
|---|---|
| Mobile Phones & Gadgets | Apple, Samsung, Xiaomi, Huawei, Realme, Oppo, Vivo |
| Computer & Networking | Logitech, Razer, Asus, MSI, TP-Link, Synology |
| Automotive — Parts & Accessories | Perodua, Proton, Toyota, Honda, Nissan, Mitsubishi parts shops |
| Home & Living | Petronas-branded merch, kitchen appliances, smart home |
| Fashion & Accessories | Padini, Habib, Bonia, Vincci, Pestle & Mortar |
| Health & Beauty | Watsons-stocked SKUs, supplements, skincare |
| Books, Music & Movies | English / BM textbooks, vinyl, K-pop |
| Antiques & Collectibles | Malaysian vintage coins, stamps, comics, watches |
| Sports & Outdoors | Bicycles, fishing tackle, badminton (Yonex / Victor) |
| Toys & Hobbies | Lego, Gundam, RC cars, scale models |
Use Cases
Malaysian E-Commerce Competitive Intelligence
Shopee, Lazada, TikTok Shop Malaysia, and PG Mall merchants use Lelong as a competitive benchmark:
- Track competing shops by name (
AUTOBAGS,STAR_ICON,mobileshop2u) and snapshot their price ladder weekly - Spot price gaps between Lelong and Shopee for identical SKUs
- Identify high-velocity SKUs via
viewCountandsoldCountdeltas across runs - Monitor promoted-listing density — which categories are flooded with paid placements vs. organic
- Build long-tail catalogs of products that Lelong serves but Shopee underweights
Dropshipping Product & Price Research
Malaysian and Singaporean dropshippers source from Lelong because listing fees are zero and many sellers operate as direct importers:
- Discover trending categories by harvesting
Promotedlistings across 50+ keywords - Margin model with verified RM prices before posting to Shopify, TikTok Shop, or WhatsApp commerce
- Find suppliers with deep stock by counting listings per
shopName - Cross-check supplier reliability via
viewCount(popularity) and listing recency (postedYearMonth) - Auto-translate listings into English / Bahasa Indonesia / Thai for cross-border launch
Reseller Arbitrage (Lelong → Shopee / Lazada / TikTok Shop)
Independent resellers run nightly Lelong sweeps to spot mispriced items they can flip:
- Watch a fixed keyword set (
"iphone 14 pro max","playstation 5","perodua axia") for 20%+ price gaps - Filter for
Usedcondition on Lelong to catch resale arbitrage opportunities - Track new-stock arrivals by diffing
listingIdsets across runs - Auto-bid on niche categories like antique Malayan coins or vintage Petronas F1 collectibles
- Build a "Lelong-only" SKU catalog — items Shopee doesn't carry, ideal for high-margin niche stores
Brand Monitoring & Counterfeit Detection
Brand owners (Padini, Habib, Bonia, Toyota Malaysia, Perodua, Proton, Yonex, Asus) use the data to enforce IP:
- Daily sweep for unauthorised use of brand names in listing titles
- Flag suspicious pricing — a
RM 45Apple Watch Series 9 is almost certainly counterfeit - Identify repeat-offender shops by counting violations per
shopName - Snapshot evidence with
scrapedAt, full image URLs, andlistingUrlfor takedown notices - Benchmark grey-market saturation for parts that bypass authorised distributors
Market Research & Consumer Trend Analytics
Research consultancies, academic teams, and MIDA/MATRADE analysts use Lelong as a low-cost Malaysian retail signal:
- Track consumer-electronics inflation via average RM-price drift on benchmark SKUs (e.g., entry-level smartphones, air fryers, gaming consoles)
- Quantify Malaysian appetite for refurbished vs. new by condition mix in major categories
- Spot seasonal lift — Hari Raya (April–May), Merdeka (August), Deepavali (November) spending peaks
- Geographic supply patterns when sellers disclose
shopLocation(Klang Valley vs. Penang vs. Johor) - Compare with Mudah.my data for full second-hand vs. new-good market modelling
Price Benchmarking for Malaysian SMEs
Small retailers in Selangor, KL, Johor, and Penang use Lelong to benchmark before pricing inventory:
- Median, P25, P90 pricing for any keyword across the top-9 organic + top-N promoted listings
- Identify Klang Valley vs. East Coast price differentials when shop location is exposed
- Detect predatory price floors — listings sub-RM 10 in normally RM 50+ categories
- Power MSME pricing tools with a clean RM-denominated dataset
- Validate distributor RRP compliance for authorised retailers
Used Auto-Parts Pricing Data
Lelong has unusually deep automotive supply for Perodua (Myvi, Axia, Bezza, Ativa), Proton (Saga, Persona, X70, X50), Toyota (Vios, Camry, Hilux, Alphard), Honda (City, Civic, HR-V, CR-V), and Nissan (Almera, X-Trail):
- Build a parts-price index for insurance and accident-write-off valuation
- Source aftermarket vs. OEM by parsing
brandand listing title keywords - Track regional shops (KL, Johor Bahru, Ipoh, Penang) for sourcing logistics
- Power workshop quoting tools with live RM pricing from real Malaysian suppliers
- Salvage-yard inventory matching for collision-repair shops
Antiques, Coins & Collectibles Valuation
Lelong remains Malaysia's largest open marketplace for vintage Petronas F1 merchandise, Malayan-era coins (1900s pre-Independence), Malaysian comics (Gila-Gila, Ujang), pre-2010 video games, and Habib jewellery resales:
- Build a price guide for numismatic dealers and pawn shops
- Authenticate provenance via cross-referencing seller history
- Track auction-style listings for high-value collectibles
- Insurance valuation evidence with timestamped market data
- Heritage curation — museums and academic projects studying Malaysian material culture
SEO & Affiliate Content (Malaysian Product Reviews)
Affiliate publishers, Malaysian tech YouTubers, and product-review blogs use Lelong data to:
- Generate "Top 10 air fryers in Malaysia 2026" style articles with verified live pricing
- Power affiliate comparison widgets with daily-refreshed RM prices and stock status
- Track product launch coverage — first appearance dates via
postedYearMonth - Auto-update structured-data feeds for Google Shopping eligibility
- Build niche price-tracker websites ("Vios spare parts under RM 100", "Refurbished iPhones in Penang")
Sample Queries & Recipes
Recipe 1 — Toyota Vios spare parts price benchmark
{"keywords": ["toyota vios bumper","toyota vios headlight","toyota vios door handle","toyota vios brake pad","toyota vios spark plug"],"scrapeDetails": true,"maxRecords": 60}
Recipe 2 — Smartphone market snapshot (Apple + Samsung + Xiaomi)
{"keywords": ["iphone 15 pro max","iphone 14","samsung galaxy s24 ultra","samsung galaxy a55","xiaomi redmi note 13","xiaomi 14"],"scrapeDetails": true,"maxRecords": 100}
Recipe 3 — Promoted-only sweep for a specific category
{"startUrls": [{"url": "https://www.lelong.com.my/kx/gaming+chair.htm"},{"url": "https://www.lelong.com.my/kx/air+fryer.htm"},{"url": "https://www.lelong.com.my/kx/robot+vacuum.htm"}],"scrapeDetails": true,"maxRecords": 80}
Then post-filter listingType === "Promoted" downstream.
Recipe 4 — Single-item enrichment for a specific URL
{"startUrls": [{"url": "https://www.lelong.com.my/original-toyota-prius-camry-vios-altis-hilux-door-lamp-switch-star-icon-X526784-2007-01-Sale-I.htm"}],"scrapeDetails": true}
Recipe 5 — Antiques & collectibles sweep
{"keywords": ["malayan coin","petronas formula 1","vintage watch seiko","habib jewellery","gila-gila magazine"],"scrapeDetails": true,"maxRecords": 80}
Recipe 6 — Fashion brands monitor (Padini, Habib, Bonia)
{"keywords": ["padini", "habib", "bonia", "vincci"],"scrapeDetails": true,"maxRecords": 50}
Recipe 7 — Quick test (no detail enrichment, 9 items)
{"keywords": ["durian"],"scrapeDetails": false,"maxRecords": 9,"maxConcurrency": 2}
Useful for sanity-checking the actor before committing to a large run.
Integration Examples
Google Sheets
Schedule the actor daily on Apify, then connect the dataset to Google Sheets via the built-in Apify → Google Sheets integration. You get a fresh Lelong product sheet every morning, ready for VLOOKUP-driven pricing tools and conditional formatting on price drift.
Make.com / Zapier / n8n
Wire the Apify connector to trigger downstream workflows on:
- New
listingIdvalues (additions to a watched keyword) - Price drops above N% on tracked SKUs
- Stock changes (
InStock→OutOfStock) - Promoted-listing entries from a competitor
shopName - Daily Slack/Telegram digests of trending Lelong searches
Power BI / Tableau / Looker Studio
Connect the Apify REST API as a data source. Build dashboards for:
- RM price heat-maps per category
- Promoted vs. organic share over time
- Top-10 sellers by listing volume and
viewCount - Stock-availability time series for tracked SKUs
Postgres / Snowflake / BigQuery
Use the Apify webhook integration to POST the dataset URL to your ingestion endpoint after every scheduled run. listingId is a natural primary key; upserting is trivial.
CREATE TABLE lelong_listings (listing_id TEXT PRIMARY KEY,title TEXT,price_myr NUMERIC(10,2),currency TEXT,availability TEXT,condition TEXT,category TEXT,brand TEXT,listing_type TEXT,shop_name TEXT,shop_url TEXT,image TEXT,view_count INTEGER,sold_count INTEGER,posted_year_month TEXT,listing_url TEXT,scraped_at TIMESTAMPTZ);
Shopify / WooCommerce / EasyStore catalog sync
Map Lelong records → product drafts in your storefront. title, description, price, images and category cover the minimum Shopify product spec. Override RM → currency conversion (MYR → SGD / USD) before publish.
Salesforce / HubSpot / Pipedrive
Treat each shopName as a Lead or Account record. Use listing volume, viewCount, and presence of Promoted placements as scoring signals for B2B outreach to active Lelong sellers.
Slack / Telegram / Discord alerts
POST the dataset summary to a webhook for instant team visibility:
import requestsitems = list(client.dataset(run["defaultDatasetId"]).iterate_items())hot = [i for i in items if i.get("viewCount", 0) > 1000]requests.post(WEBHOOK, json={"text": f"Lelong sweep: {len(items)} listings, {len(hot)} hot (>1k views)"})
Major Malaysian Markets & Seller Hubs
| Hub | State | Why it matters on Lelong |
|---|---|---|
| Kuala Lumpur (KL) | Federal Territory | Largest concentration of electronics + fashion shops |
| Petaling Jaya | Selangor | Klang Valley auto-parts and home-goods cluster |
| Shah Alam | Selangor | Wholesale-leaning shops, heavy in automotive and industrial |
| Subang Jaya | Selangor | Mobile and gadget importers |
| George Town | Penang | Antiques, collectibles, photography, vintage electronics |
| Bayan Lepas | Penang | Computer parts and refurb electronics (free-trade-zone proximity) |
| Johor Bahru | Johor | Cross-border (Singapore) electronics arbitrage, automotive |
| Ipoh | Perak | White goods, vintage Malaysian collectibles |
| Kuching | Sarawak | East Malaysia specialty goods, fishing tackle |
| Kota Kinabalu | Sabah | Outdoor / adventure gear |
| Melaka | Melaka | Antiques and Peranakan collectibles |
| Seremban | Negeri Sembilan | Automotive aftermarket |
Lelong does not surface seller location in JSON-LD by default; the actor fills shopLocation when the field appears in DOM (a.catalogShop-name, breadcrumb tail, or shop-page enrichment).
Cost & Performance
| Metric | Value |
|---|---|
| Engine | HTTP-only — got-scraping + cheerio (no headless browser) |
| Docker image | apify/actor-node:20 |
| Cold-start build | ~25 seconds |
| Memory footprint | 256 MB sufficient; 512–1024 MB ceiling |
| Runtime — 1 keyword (9 items, detail on) | ~30 seconds |
| Runtime — 5 keywords (~45 items, detail on) | ~90–150 seconds |
| Runtime — 1 keyword (9 items, detail off) | ~5 seconds |
| Cost per run | Typically < $0.05 in pay-per-event |
| Pricing model | Pay-per-event (transparent per-record) |
| Data freshness | Live at run time |
| Auth required | None |
| Proxy required | None (Lelong has no Cloudflare/WAF) |
| Concurrency | 1–20 (default 4); safe at 4–8 |
| Anti-bot tactics handled | None needed |
Records per /kx/ search | Up to ~9 (no pagination on Lelong) |
Compliance, Privacy & Legal Notes
- Public data only — every field is what Lelong.my serves to any unauthenticated visitor at the URL
- No PII — the actor extracts shop display names (business identities), not buyer information, phone numbers, or addresses unless the seller posted them publicly in their own listing
- No payment data — no card numbers, no banking information
- Respect
robots.txt— the defaultrequestDelay: 1000andmaxConcurrency: 4are deliberately conservative; tune higher only with the same courtesy - Lelong.my Terms of Service — review them at lelong.com.my before running large-scale extractions; commercial redistribution is your responsibility
- GDPR / PDPA Malaysia — even when a
shopNameis a business, downstream use must comply with PDPA 2010 (Personal Data Protection Act) if you derive anything personal - Counterfeit reporting — if you use this actor for IP enforcement, follow Lelong's seller-reporting workflow rather than acting unilaterally
Important: This actor is a tool. You are responsible for ensuring your particular use case complies with Malaysian law, Lelong.my's Terms of Service, and any contracts you hold with brand owners or platforms you republish data to.
Frequently Asked Questions
How fresh is the data?
Live at the moment of the run. Every record is fetched from Lelong.my at runtime — there is no cached index, no upstream snapshot, no overnight refresh window.
How many records can I extract?
Per keyword: up to ~9 from the /kx/ search page (Lelong does not paginate /kx/). For broader coverage, supply more keywords — 50 keywords typically yields 300–450 enriched records. URL mode (paste category or shop URLs) can return more depending on the page.
Does this actor require login or Apify proxy?
No to both. Lelong has no Cloudflare, no WAF, and no JS challenge — direct HTTP succeeds. The proxy field is exposed only for users who want IP rotation on very large jobs.
Why is the /kx/ search limited to 9 results?
Lelong's keyword endpoint is intentionally a shallow "top results" view, not a paginated catalog. To go deeper, either:
- Run more granular keywords (
"toyota vios bumper"instead of"toyota vios") - Paste category URLs in
startUrls - Paste shop URLs to scrape a single seller's full catalog
What's the difference between "Item" and "Promoted" listings?
Item— regular organic listing, URL ends in-Sale-I.htmPromoted— paid placement / spotlight slot, URL ends in-Sale-P.htm
Promoted listings are valuable for understanding which sellers are spending to push particular SKUs.
What history does this actor have?
Honest answer: this actor ID has had three lives.
mudah-scraper— originally targeted Mudah.my (Malaysia's #1 classifieds). It worked until Mudah deployed a WAF that became impassable without browser automation and residential proxies — at which point the actor was rewritten.carlist-my-scraper— pivoted to Carlist.my, Malaysia's car classifieds. Carlist sits behind Cloudflare Bot Management Pro, which blocked every approach (HTTP, Playwright, residential proxies, even browser-fingerprint randomisation). After exhausting reasonable options, the actor was pivoted again.lelong-my-scraper— the current and working successor. Lelong has no WAF, no Cloudflare, and a JSON-LD-rich page structure — so this version is fast, cheap, and reliable.
For Mudah and Carlist data, see Mudah.my Scraper (legacy listing — note current site limitations) and consider Carbase.my or the YallaMotor Scraper for GCC automotive equivalents.
Can I use this for the entire Lelong catalogue?
Practically, no — Lelong does not publish a sitemap and /kx/ has no pagination. But you can:
- Build a long keyword list (hundreds of seed terms) and run nightly
- Paste category URLs to mine specific verticals
- Iterate shop pages by
shopNameonce you've identified the active sellers
Does this work outside Malaysia?
The Lelong.my source is Malaysia-only. For neighbouring markets, see Chotot Vietnam or Lamudi Philippines.
What export formats are available?
JSON, CSV, Excel (XLSX), HTML, XML, RSS, and JSON Lines — all directly from the Apify dataset view.
Can I schedule this actor?
Yes — Apify's built-in Scheduler supports cron expressions. A common pattern: every 6 hours sweep 20 priority keywords, daily at 02:00 KL time sweep the long-tail keyword list.
Does it work on the Apify Free Plan?
Yes — full functionality on free tier. A single-keyword run costs cents and runs well within free-tier compute units.
What happens if Lelong is down or returns empty results?
The actor retries 3× per request with exponential backoff. After 3 consecutive empty / failed search pages, it aborts the run. If no records were scraped, the actor calls Actor.fail() so the run shows FAILED (not silent SUCCEEDED) in your dashboard — making monitoring trivial.
Are images downloaded or just linked?
Just linked (absolute URLs on c.76.my, Lelong's CDN). Downloading would multiply costs and storage; downstream pipelines typically pull on demand.
What's a "promoted" listing worth tracking?
If a competitor consistently runs promoted placements on the same keyword cluster for weeks, that's a strong signal they're profitable on those SKUs. Track promoted-listing density to reverse-engineer competitor strategy.
Can I combine this with Shopee / Lazada scrapers?
Yes — title and brand are clean enough for fuzzy matching across marketplaces. We don't publish a Shopee scraper directly, but the schema is designed to merge cleanly with any Malaysian e-commerce dataset.
What if a shop name contains special characters?
Shop names are passed through as-is (STAR_ICON, mobileshop2u, 蝶之恋). Use shopName as a string and avoid treating it as a URL component — that's what shopUrl is for.
How are prices in non-RM currencies handled?
Lelong is RM-only; currency is always MYR. If a listing is cross-listed at USD or SGD (rare), the JSON-LD priceCurrency is preserved verbatim.
How do I report a bug?
Open an issue on the Apify Store page or use the "Contact developer" link.
Related Apify Actors by Haketa
Marketplaces & Classifieds (Direct Siblings)
- Mudah.my Scraper (Malaysia) — Malaysia's #1 classifieds (legacy; see actor README for current status)
- Chotot.com Scraper (Vietnam) — Vietnam's largest classifieds
- Mourjan Scraper (MENA) — Middle East & North Africa classifieds
- Kleinanzeigen.de Scraper (Germany) — eBay Kleinanzeigen replacement
- Marktplaats.nl Scraper (Netherlands) — Dutch classifieds leader
- OfferUp Scraper (US) — US peer-to-peer marketplace
- Kijiji.ca Scraper (Canada) — Canada's #1 classifieds
- TradeMe Scraper (New Zealand) — NZ's largest marketplace
Automotive
- YallaMotor Scraper (GCC) — Saudi/UAE/Kuwait/Qatar/Oman car listings
Real Estate (Useful for Cross-Region SEA Coverage)
- Lamudi Philippines Real Estate Scraper
- Realestate.com.kh Cambodia Scraper
- Zameen.com Pakistan Real Estate Scraper
- Domain.com.au Property Scraper (Australia)
Healthcare & Care (For Cross-Niche Reseller Research)
Comparison vs. Alternatives
| Approach | Setup time | Data freshness | Cost (100 listings) | Maintenance | Anti-bot handling |
|---|---|---|---|---|---|
| This actor | < 1 minute | Live at run | < $0.05 | Zero | N/A (Lelong is open) |
| Manual browse + spreadsheet | Hours per sweep | Live but stale by hand | Free | High (human) | N/A |
| Custom Node/Python scraper | 1–2 days dev | Live | Free + infra | High (selector drift) | DIY (none needed today) |
| Headless browser (Playwright) | 1–2 days dev | Live | Expensive (RAM/CPU) | High | Overkill — Lelong is open |
| Paid commercial dataset | Days of sales calls | Weekly / monthly | $$$$ | None | Vendor's problem |
| No data | Free | N/A | Free | N/A | N/A |
The HTTP-only architecture is the key differentiator: it costs an order of magnitude less than browser-based scrapers (no Chrome, no 1 GB RAM, no 30-second cold starts), runs faster, and is easier to extend.
Why Pay-Per-Event Pricing?
Most data scrapers either lock you into a flat monthly subscription (you pay even if you don't run) or charge by compute-unit (you can't predict the bill). This actor uses pay-per-event, which means:
- You only pay when the actor runs and produces data
- Charges scale with actual records delivered — not duration
- Transparent line-item billing inside the Apify Console
- No monthly minimums, no commitments
- Free to evaluate with
maxRecords: 9for cents - Predictable per-keyword cost makes budgeting trivial
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05-18 | Initial public release as Lelong.my Scraper — HTTP-only via got-scraping + cheerio, JSON-LD primary extraction with three fallback strategies, detail enrichment, 3-attempt retry, Actor.fail() on zero records |
| 0.9.0 | 2026-05 | Internal pivot from carlist-my-scraper (Cloudflare Bot Management Pro blocked all approaches); architecture re-targeted at Lelong.my |
| 0.5.0 | 2026-04 | Internal pivot from mudah-scraper (Mudah WAF became impassable); short-lived Carlist.my attempt |
Keywords
Lelong.my scraper · Malaysia online marketplace data · Malaysia e-commerce scraper · Lelong product data API · Malaysian dropshipping research · Lelong price scraper · Malaysia shopping data · Kuala Lumpur online marketplace · Lelong.my API alternative · HTTP-only marketplace scraper · Lelong product extraction · Malaysia classifieds scraper · RM price tracker Malaysia · Lelong seller monitoring · Lelong shop scraper · Malaysia reseller arbitrage data · Lelong category extraction · Lelong JSON-LD scraper · Lelong promoted listings · Lelong organic listings · Malaysian product price API · Selangor seller data · Penang marketplace data · Johor Bahru online listings · Petaling Jaya retail data · Perodua spare parts scraper · Proton parts price data · Toyota Vios parts Malaysia · Honda City accessories scraper · iPhone Malaysia price scraper · Samsung Galaxy Malaysia data · Xiaomi Malaysia listings · air fryer Malaysia price · gaming chair Malaysia · antiques Malaysia scraper · Petronas collectibles · Habib jewellery monitor · Padini fashion data · MIDA market research · MATRADE intelligence · Malaysia PDPA compliant scraper · Apify Lelong actor · Malaysia consumer trends data · Lelong vs Shopee benchmarking · Lazada Malaysia alternative data · TikTok Shop Malaysia research
Support
- Bug reports — open an Issue on the Apify Store actor page
- Feature requests — same place; please describe your use case and target keyword / URL pattern
- Direct contact — message via the Apify developer profile
If this actor saves you a week of engineering and a recurring Cloudflare headache, a 5-star rating on the Apify Store helps other Malaysian e-commerce, reseller, and dropshipping teams find it. Terima kasih!