Lelong.my Scraper | Malaysia Online Marketplace avatar

Lelong.my Scraper | Malaysia Online Marketplace

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Lelong.my Scraper | Malaysia Online Marketplace

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

19 hours ago

Last modified

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.

Apify Actor


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:

  1. Keyword mode — supply free-text search terms ("toyota vios", "iphone 15", "air fryer", "gaming chair"); the actor builds /kx/{keyword}.htm URLs, reads the JSON-LD ItemList embedded on each search page, and enriches every hit by fetching the individual product page.
  2. URL mode — paste any Lelong.my URL (search page, category browse, individual *-Sale-I.htm item, *-Sale-P.htm promoted 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)
  • AvailabilityInStock, OutOfStock, PreOrder (Schema.org enum normalized)
  • ConditionNewCondition, UsedCondition, RefurbishedCondition
  • Category — auto-derived from URL slug or breadcrumb (Automotive > Parts, Mobile Phones, etc.)
  • Brand — when declared in JSON-LD Product.brand
  • Listing typeItem (regular) or Promoted (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}.htm endpoint 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-LD seller block — 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

  1. Open the Lelong.my Scraper page on Apify and click Try for free
  2. Either keep the default keyword (toyota vios) or paste your own keywords / start URLs
  3. (Optional) tick Scrape Detail Pages for richer per-item data
  4. Hit Start — your dataset is live in 30–90 seconds for a small keyword set

API Run (Python)

from apify_client import ApifyClient
client = 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

LayerLibraryPurpose
HTTP clientgot-scrapingRealistic browser headers, automatic TLS fingerprint, no Chrome process
HTML parsercheeriojQuery-style traversal for fallbacks and DOM enrichment
Structured dataInline JSON-LD parserProduct, ItemList, BreadcrumbList extraction
ConcurrencyAsync worker queue1–20 parallel requests, default 4
StorageDataset.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 typeURL patternRecords returned
Keyword search/kx/{keyword+slug}.htmUp to ~9 items per keyword (no pagination)
Item detail (regular)/{slug}-{shop}-{id}-{yyyy-mm}-Sale-I.htm1 enriched product
Promoted item/{slug}-{shop}-{id}-{yyyy-mm}-Sale-P.htm1 enriched product
Category browse/{category-slug}/...Varies
Shop page/{shop-slug}/...Varies

Extraction strategy (in priority order)

  1. JSON-LD ItemList — primary source on search pages. Iterates itemListElement[], reading name, url, image, offers.price, offers.priceCurrency, offers.availability, description, brand.
  2. <b data-id data-link data-name> attributes — fallback when JSON-LD is absent or malformed.
  3. <a href*="-Sale-[IP].htm"> regex — last-resort link scrape with title/text mining.
  4. Detail-page enrichment — for each stub, fetch the product URL and re-parse JSON-LD Product, BreadcrumbList, plus DOM fallbacks for shopName, 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 silent SUCCEEDED runs 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 only UserImages/Items/ and Malaysia/ 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

ParameterTypeDefaultDescription
startUrlsarray<{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.
keywordsarray<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.
scrapeDetailsbooleantrueVisit 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.
maxRecordsinteger50Cap total output across all keywords/URLs. 0 = unlimited (bounded only by source pages).
requestDelayinteger (ms)1000Delay between requests. Range 200–10 000. Lelong has no anti-bot WAF, but 800–2000 ms is polite.
maxConcurrencyinteger4Parallel HTTP requests during detail enrichment. Range 1–20. 4–8 is safe; higher may trigger rate limits.
proxyConfigurationobject{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

FieldTypeDescription
listingIdstring | nullLelong internal ID parsed from URL pattern (e.g., X526784, 221826664)
titlestringProduct title as listed
descriptionstring | nullLong description from JSON-LD Product.description
pricenumber | nullNumeric price in RM (Malaysian Ringgit)
currencystringAlways "MYR" for Lelong listings
availabilitystring | nullNormalized: InStock, OutOfStock, PreOrder
conditionstring | nullNormalized: New, Used, Refurbished
categorystring | nullBreadcrumb tail or URL-derived (e.g., Automotive > Parts)
brandstring | nullFrom JSON-LD Product.brand
modelstring | nullModel code when present in schema
listingTypestring | nullItem (regular) or Promoted (paid placement)

Shop fields

FieldTypeDescription
shopNamestring | nullSeller display name (e.g., STAR_ICON, AUTOBAGS, mobileshop2u)
shopUrlstring | nullFull URL of the seller storefront
shopLocationstring | nullWhen surfaced (city or state — Selangor, Penang, Kuala Lumpur)

Media fields

FieldTypeDescription
imagestring | nullPrimary product image (absolute URL)
imagesarray<string> | nullFull sanitised image gallery — bank logos and badges removed

Engagement & metadata

FieldTypeDescription
viewCountnumber | nullPage-view count scraped from Views: text
soldCountnumber | nullUnits-sold counter scraped from Sold: text
postedYearMonthstring | nullYYYY-MM derived from URL (e.g., 2026-09)
listingUrlstringCanonical product URL
sourceUrlstringThe search/category/start URL that surfaced this record
scrapedAtstring (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

ValueMeaningURL marker
ItemStandard organic listing-Sale-I.htm
PromotedPaid 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

ValueMeaning
InStockReady to ship
OutOfStockSeller currently has none
PreOrderAvailable on backorder / built to order
DiscontinuedNo longer offered

Condition values

ValueMeaning
NewBrand-new, unopened
UsedPre-owned, working
RefurbishedRestored to working condition
DamagedSold as-is for parts

Common top-level categories on Lelong.my

CategoryTypical sellers
Mobile Phones & GadgetsApple, Samsung, Xiaomi, Huawei, Realme, Oppo, Vivo
Computer & NetworkingLogitech, Razer, Asus, MSI, TP-Link, Synology
Automotive — Parts & AccessoriesPerodua, Proton, Toyota, Honda, Nissan, Mitsubishi parts shops
Home & LivingPetronas-branded merch, kitchen appliances, smart home
Fashion & AccessoriesPadini, Habib, Bonia, Vincci, Pestle & Mortar
Health & BeautyWatsons-stocked SKUs, supplements, skincare
Books, Music & MoviesEnglish / BM textbooks, vinyl, K-pop
Antiques & CollectiblesMalaysian vintage coins, stamps, comics, watches
Sports & OutdoorsBicycles, fishing tackle, badminton (Yonex / Victor)
Toys & HobbiesLego, 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 viewCount and soldCount deltas 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 Promoted listings 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 Used condition on Lelong to catch resale arbitrage opportunities
  • Track new-stock arrivals by diffing listingId sets 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 45 Apple Watch Series 9 is almost certainly counterfeit
  • Identify repeat-offender shops by counting violations per shopName
  • Snapshot evidence with scrapedAt, full image URLs, and listingUrl for 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 brand and 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 listingId values (additions to a watched keyword)
  • Price drops above N% on tracked SKUs
  • Stock changes (InStockOutOfStock)
  • 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 requests
items = 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

HubStateWhy it matters on Lelong
Kuala Lumpur (KL)Federal TerritoryLargest concentration of electronics + fashion shops
Petaling JayaSelangorKlang Valley auto-parts and home-goods cluster
Shah AlamSelangorWholesale-leaning shops, heavy in automotive and industrial
Subang JayaSelangorMobile and gadget importers
George TownPenangAntiques, collectibles, photography, vintage electronics
Bayan LepasPenangComputer parts and refurb electronics (free-trade-zone proximity)
Johor BahruJohorCross-border (Singapore) electronics arbitrage, automotive
IpohPerakWhite goods, vintage Malaysian collectibles
KuchingSarawakEast Malaysia specialty goods, fishing tackle
Kota KinabaluSabahOutdoor / adventure gear
MelakaMelakaAntiques and Peranakan collectibles
SerembanNegeri SembilanAutomotive 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

MetricValue
EngineHTTP-only — got-scraping + cheerio (no headless browser)
Docker imageapify/actor-node:20
Cold-start build~25 seconds
Memory footprint256 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 runTypically < $0.05 in pay-per-event
Pricing modelPay-per-event (transparent per-record)
Data freshnessLive at run time
Auth requiredNone
Proxy requiredNone (Lelong has no Cloudflare/WAF)
Concurrency1–20 (default 4); safe at 4–8
Anti-bot tactics handledNone needed
Records per /kx/ searchUp to ~9 (no pagination on Lelong)

  • 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 default requestDelay: 1000 and maxConcurrency: 4 are 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 shopName is 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.htm
  • Promoted — 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.

  1. 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.
  2. 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.
  3. 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 shopName once 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.


Marketplaces & Classifieds (Direct Siblings)

Automotive

Real Estate (Useful for Cross-Region SEA Coverage)

Healthcare & Care (For Cross-Niche Reseller Research)


Comparison vs. Alternatives

ApproachSetup timeData freshnessCost (100 listings)MaintenanceAnti-bot handling
This actor< 1 minuteLive at run< $0.05ZeroN/A (Lelong is open)
Manual browse + spreadsheetHours per sweepLive but stale by handFreeHigh (human)N/A
Custom Node/Python scraper1–2 days devLiveFree + infraHigh (selector drift)DIY (none needed today)
Headless browser (Playwright)1–2 days devLiveExpensive (RAM/CPU)HighOverkill — Lelong is open
Paid commercial datasetDays of sales callsWeekly / monthly$$$$NoneVendor's problem
No dataFreeN/AFreeN/AN/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: 9 for cents
  • Predictable per-keyword cost makes budgeting trivial

Changelog

VersionDateNotes
1.0.02026-05-18Initial 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.02026-05Internal pivot from carlist-my-scraper (Cloudflare Bot Management Pro blocked all approaches); architecture re-targeted at Lelong.my
0.5.02026-04Internal 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!