Mudah.my Classifieds Scraper - Cars, Property & Marketplace
Pricing
from $1.30 / 1,000 results
Mudah.my Classifieds Scraper - Cars, Property & Marketplace
Scrapes classified ads from Mudah.my, Malaysia's largest marketplace: cars, property for sale and rent, phones, electronics and more. Get title, price, description, photos, location, seller, specifications and WhatsApp numbers. Search by keyword, category, state or listing URL.
Pricing
from $1.30 / 1,000 results
Rating
0.0
(0)
Developer
ActorFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Mudah.my Classifieds Scraper - Cars, Property & Marketplace Malaysia
Scrape classified ads from Mudah.my (mudah.my), Malaysia's largest online marketplace: used cars, property for sale and rent, phones, electronics, furniture and every other category. Get the title, price, full description, HD photos, location, seller, all specifications and the seller's WhatsApp numbers, and export the Mudah.my data as JSON, CSV or Excel or call the actor as an API. Paste a Mudah.my listing URL or type a keyword, press Start, and repeat runs skip ads you already scraped.
Target website: mudah.my
✨ Features of this Mudah.my classifieds scraper
- Classified ad extraction — title, price, old price and price drop, description, category, condition, state and area, seller name and type, photos and posting, update and expiry dates.
- Full ad details — every specification (car make, model, variant, year, mileage, engine; property type, size, bedrooms, furnishing, facilities, building and address), HD photos, videos, store details, company registration number and WhatsApp numbers when the seller shows them.
- Pagination support — keeps paging through the results until Max items is reached.
- Keyword, category, state, price, sort and seller filtering — search any keyword in any of 45 categories and 16 states, for sale, for rent, new properties or auctions, with a price range and private or company sellers.
- Any Mudah.my listing URL — set filters on the site and paste the URL; single ad URLs work too.
- Incremental runs, no repeat charges — with a cache project name, ads you already scraped are skipped on every later run.
- Proxy support — optional Apify Proxy, off by default.
- No browser required — plain HTTP requests keep runs fast and cheap.
🚀 How to scrape Mudah.my listings in 5 steps
- Sign up for a free Apify account — includes $5 monthly credit.
- Open the actor page and click Try for free.
- Fill in the Input fields (a keyword, category, listing URL or ad URL is required).
- Click Start and wait for the run to complete.
- Download results from the Output tab in JSON, CSV, or Excel format.
You can also run this actor via the Apify API or integrate it directly into your workflows using Zapier, Make, or n8n.
💰 Mudah.my scraper pricing
This actor uses pay-per-result billing: you pay for each listing saved to the dataset.
- New Apify accounts include $5 of free monthly credit.
- The actor uses plain HTTP requests, so it costs significantly less to run than browser-based scrapers.
- The proxy is disabled by default; leaving it off keeps runs cheapest.
- Listings skipped by the cache are not charged, so scheduled runs cost only for genuinely new ads.
🔧 Mudah.my scraper input configuration
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
Listing or ad URLs (startUrls) | array | — | https://www.mudah.my/malaysia/cars-for-sale (prefill) | Mudah.my listing pages with any filters set on the site, or single ad pages. |
Max items per search (maxItems) | integer | — | 5 | Maximum unique listings saved for each keyword or listing URL. |
Scrape full ad details (scrapeDetails) | boolean | — | true | Open every ad for all specifications, HD photos, store details, address and WhatsApp numbers. Turn off for faster runs with the search data only. |
Cache project name (cacheProjectName) | string | — | — | Use the same name on each run to get only new listings. Cached ads are skipped, not charged and not counted towards Max items. Records get changeType: new. |
Search keywords (keywords) | array | — | — | Words to search for. Each keyword is searched separately with the filters below. |
Category (category) | string | — | — | One of 45 categories, for example Cars, Apartment / Condominium, Mobile Phones & Gadgets. Empty = all categories. |
State (region) | string | — | — | Malaysian state or federal territory. Empty = the whole of Malaysia. |
Listing type (listingType) | string | — | sell | sell (for sale), let (for rent), newprop (new properties) or auction. |
Minimum price (RM) (minPrice) | integer | — | — | Lowest price, or monthly rent for rentals. |
Maximum price (RM) (maxPrice) | integer | — | — | Highest price, or monthly rent for rentals. |
Sort by (sortBy) | string | — | newest | newest, price_asc or price_desc. |
Seller type (sellerType) | string | — | all | all, private or company. |
Proxy configuration (proxyConfiguration) | object | — | no proxy | Works without a proxy. Enable Apify Proxy only if you get blocked. |
Max concurrency (maxConcurrency) | integer | — | 5 | How many requests run in parallel. |
The category, state, listing type, price, sort and seller filters apply to keyword searches. Pick a category or state without a keyword to browse it.

The numbered markers in the screenshot show the fields most runs use:
- Listing or ad URLs: paste a Mudah.my listing page with your filters set on the site, or a single ad URL.
- Max items per search: how many ads to save for each URL or keyword.
- Scrape full ad details: on by default; opens every ad for all specifications, HD photos, store details and WhatsApp numbers. Turn it off for faster, cheaper runs with the search data only.
- Cache project name: optional; reuse the same name on every run so ads you already scraped are skipped and not charged.
Below the Proxy configuration (optional, the site works without a proxy) sits the collapsed Search filters and more options section. Expand it to search without a URL: it holds the keywords, category, state, listing type, price range, sorting and seller type. Each keyword is a separate search.
How the cache saves money:
With full ad details on, every ad costs one extra detail request on top of the search request. Without a cache, a daily run over the same search opens the same detail pages again and again and pays for them each time. With a Cache project name:
- The actor remembers every listing it has saved in a key-value store named after your project, and keeps it between runs.
- Each run still reads the search result pages, which are cheap and hold up to 50 ads each. Ads already in the cache are dropped right there, before a detail page is requested.
- Skipped ads cost no detail request, no proxy traffic and no result charge, and they do not count towards Max items per search. The limit is spent only on new ads.
- Ad URLs you paste are skipped the same way if the ad is already cached.
For example, a search with 500 matching ads that gets 20 new ads a day pays for 20 results and 20 detail pages on day 2 instead of 500 of each.
Use a different project name per search you track, because each name has its own memory. Pick a new name, or remove the stored record, to start from scratch. A cached ad is not scraped again, so later price changes on it are not picked up.
Supported URL types:
- Listing pages:
https://www.mudah.my/malaysia/cars-for-sale,https://www.mudah.my/selangor/cars-for-sale/toyota?price=20000-60000,https://www.mudah.my/kuala-lumpur/apartment-condominium-for-rent,https://www.mudah.my/malaysia/for-sale?q=iphone,https://www.mudah.my/johor/properties-for-auction - Ad pages:
https://www.mudah.my/2014-mercedes-benz-c200-1-8-cgi-blueefcy-w204-115289827.htm
📦 Mudah.my scraper output data
Each listing is saved as one dataset item with the fields id, listId, adId, url, title, description, price, priceLabel, priceSuffix, oldPrice, priceDropPercent, currency, category, categoryId, listingType, condition, region, subarea, location, address, sellerDetails (an object with name, type, profileUrl, avatarUrl, joined, phones, storeName, storeVerified, storeSince, companyRoc), make, model, manufacturedYear, mileage, transmission, engineCapacity, fuelType, bodyType, propertyType, size, sizeUnit, bedrooms, bathrooms, buildingName, furnishing, specs, badges, mudahCertified, hasVideo, videoUrls, imageCount, imageUrl, images, postedAt, modifiedAt, expiresAt, scrapedAt and, when caching is on, changeType. Fields that do not apply to a category (for example mileage for a phone) are null. The dataset has 1 view, Overview, a table with the photo, title, price, category, location, seller, posting date and ad URL.
Output at a glance:
| Listing | Price (RM) | Category | Location | Seller | Posted |
|---|---|---|---|---|---|
| 2019 Toyota HARRIER 2.0 PREMIUM (A) | 93,888 | Cars | Kuala Lumpur - Salak Selatan | company | 2026-09-07 |
| 2023 Suzuki JIMNY Sierra JC (A) | 118,000 | Cars | Selangor - Bangi | company | 2026-10-14 |
| 2015 Honda ACCORD 2.0 VTI-L (A) | 32,800 | Cars | Selangor - Petaling Jaya | company | 2026-08-27 |
| iphone 15 pro | 2,500 | Mobile Phones & Gadgets | Melaka - Bandar Hilir | private | 2026-10-14 |
| Iphone 15 | 1,900 | Mobile Phones & Gadgets | Melaka - Bukit Rambai | private | 2026-10-14 |
Sample output (raw JSON):
[{"id": "115721131","listId": 115721131,"adId": 135885187,"url": "https://www.mudah.my/2019-toyota-harrier-2-0-premium-a-cashback-rebate-115721131.htm","title": "2019 Toyota HARRIER 2.0 PREMIUM (A)cashback rebate","description": "🚙 TOYOTA HARRIER 2.0 PREMIUM (A) 2024 🚙\n✨ PREMIUM SUV|COMFORTABLE|HIGH SPEC ✨\n\n🎉 SPECIAL PROMOTION 🎉\n🎁 FREE 2YEARS WARRANTY\n💰 FULL LOAN/CASH BACK REBATE\n📉 LOW I...","price": 93888,"priceLabel": "RM 93,888","priceSuffix": null,"oldPrice": 96888,"priceDropPercent": 3,"currency": "MYR","category": "Cars","categoryId": 1020,"listingType": "sell","condition": "Used","region": "Kuala Lumpur","subarea": "Salak Selatan","location": "Kuala Lumpur - Salak Selatan","address": null,"sellerDetails": {"name": "MS AUTOMOTIVE","type": "company","profileUrl": "https://www.mudah.my/ismailmah-ms-automotive-salak-selatan-salak-south","avatarUrl": "https://img.rnudah.com/stores/logo_949178_pxm.jpg","joined": null,"phones": ["+60198634865", "+60129419288"],"storeName": "SALAK SELATAN SALAK SOUTH","storeVerified": true,"storeSince": "2019-07-05T00:00:00+08:00","companyRoc": "002598691-W"},"make": "Toyota","model": "Harrier","manufacturedYear": 2019,"mileage": "70000-74999","transmission": "Auto","engineCapacity": 1998,"fuelType": "petrol","bodyType": "SUVs","propertyType": null,"size": null,"sizeUnit": null,"bedrooms": null,"bathrooms": null,"buildingName": null,"furnishing": null,"specs": {"Condition": "Used","Brand": "Toyota","Model": "Harrier","Type": "SUVs","Transmission": "Auto","Engine Capacity": "1998 cc","Mileage": "70 000 - 74 999","Mfg. Year": "2019","ROC/SSM No.": "002598691-W","Variant": "PREMIUM"},"badges": ["Verified Dealer","With Car Grant"],"mudahCertified": false,"hasVideo": true,"videoUrls": ["https://customer-76ekbudsmzsbwunl.cloudflarestream.com/b5f7954222b7e7053683eb40f7f27999/manifest/video.m3u8"],"imageCount": 24,"imageUrl": "https://cdn.rnudah.com/image_hd/plain/f2f167b8ff0f3ebd5e9a14bf62136744-3001038217882499483.jpg","images": ["https://cdn.rnudah.com/image_hd/plain/f2f167b8ff0f3ebd5e9a14bf62136744-3001038217882499483.jpg","https://cdn.rnudah.com/image_hd/plain/f5158651499786464ac876e3accecfae-3001038216396475456.jpg"],"postedAt": "2026-09-07T13:41:34+08:00","modifiedAt": "2026-10-15T01:16:23+08:00","expiresAt": "2026-11-08T13:41:34+08:00","scrapedAt": "2026-10-14T17:30:48.109Z"},{"id": "116047931","listId": 116047931,"adId": 136276829,"url": "https://www.mudah.my/iphone-15-pro-116047931.htm","title": "iphone 15 pro","description": "LLA SET , 256gb , used E-sim","price": 2500,"priceLabel": "RM 2,500","priceSuffix": null,"oldPrice": null,"priceDropPercent": null,"currency": "MYR","category": "Mobile Phones & Gadgets","categoryId": 3020,"listingType": "sell","condition": "Second-hand (Used)","region": "Melaka","subarea": "Bandar Hilir","location": "Melaka - Bandar Hilir","address": null,"sellerDetails": {"name": "Eittie Ty","type": "private","profileUrl": "https://www.mudah.my/u/seller-11476666","avatarUrl": null,"joined": null,"phones": null,"storeName": null,"storeVerified": false,"storeSince": null,"companyRoc": null},"make": "Apple","model": "iPhone 15 Pro","manufacturedYear": null,"mileage": null,"transmission": null,"engineCapacity": null,"fuelType": null,"bodyType": null,"propertyType": null,"size": null,"sizeUnit": null,"bedrooms": null,"bathrooms": null,"buildingName": null,"furnishing": null,"specs": {"Subcategory": "Phones","Brand": "Apple","Model": "iPhone 15 Pro","Storage": "256 GB","Warranty": "No Warranty","Condition": "Second-hand (Used)","Deal Method": "Meet Up"},"badges": null,"mudahCertified": false,"hasVideo": false,"videoUrls": null,"imageCount": 4,"imageUrl": "https://cdn.rnudah.com/image_hd/plain/c89ab498cedc6c1e8eb1292c38dcb5a9-3006451621693636155.jpg","images": ["https://cdn.rnudah.com/image_hd/plain/c89ab498cedc6c1e8eb1292c38dcb5a9-3006451621693636155.jpg","https://cdn.rnudah.com/image_hd/plain/a25d7e958baa8e336d3a89d59ae5191c-3006451622611456415.jpg"],"postedAt": "2026-10-14T21:36:09+08:00","modifiedAt": "2026-10-14T21:36:09+08:00","expiresAt": "2027-01-12T21:36:09+08:00","scrapedAt": "2026-10-14T17:30:47.709Z"}]
specs holds every specification shown on the ad, keyed by its label (the sample is trimmed). Dates are Malaysia time (+08:00).
🐍 How to scrape Mudah.my with Python, JavaScript or the API
Run the actor programmatically with the official Apify clients. Replace <YOUR_API_TOKEN> with the token from your Apify Console.
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("confidential_gnat/mudah-classifieds-scraper").call(run_input={"keywords": ["honda city"],"category": "1020","region": "8","maxItems": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('confidential_gnat/mudah-classifieds-scraper').call({keywords: ['honda city'],category: '1020',region: '8',maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL — start a run and wait for the dataset:
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~mudah-classifieds-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords": ["honda city"], "category": "1020", "region": "8", "maxItems": 20}'
💡 What you can use Mudah.my classifieds data for
- Used car price research: compare asking prices by make, model, year and mileage across Malaysian states
- Property rental and sale market analysis: rent per square foot, furnishing and facilities by building and area
- Dealer and agent lead generation with company names, registration numbers and WhatsApp contacts
- Price-drop and new-listing alerts for specific products, cars or neighbourhoods
- Marketplace and e-commerce research on second-hand phones, electronics and household goods
Car dealers, property agents and investors, resellers, market researchers and price-comparison sites in Malaysia typically use this data.
⚠️ Mudah.my scraper limitations and known issues
- Search depth — Mudah.my returns at most 10,000 results per search (about 5,000 for keyword searches). Split bigger searches by state or price range.
- Phone numbers — the number behind the "Show phone number" button is already in the ad data, so the actor returns it in
sellerDetails.phones(international format, plus any WhatsApp numbers). It isnullwhen the seller has no number or full ad details are off. - Price filter on rental URLs — On rental pages Mudah.my itself filters by
monthly_rent; aprice=parameter in a rental URL returns no results on the site too. The price inputs of this actor use the right filter automatically. - Login-required pages — The actor cannot access content behind authentication.
❓ Mudah.my scraper FAQ
Can I scrape Mudah.my legally?
The actor only collects ads that are already publicly visible on mudah.my, without logging in. Scraping publicly available data is generally considered lawful (see hiQ Labs v. LinkedIn), but you are responsible for complying with Mudah.my's Terms of Service and laws such as Malaysia's PDPA if you handle personal data like seller names and phone numbers.
What data does the Mudah.my scraper return?
Every listing has its title, price, description, photos, category, condition, location, seller name and type, key specifications and posting dates. With full ad details turned on, you also get every specification, HD photos, videos, store details, building address, company registration number and WhatsApp numbers when shown.
How many listings can I scrape from one Mudah.my search?
maxItems limits the number of listings per keyword or listing URL, not for the whole run. Mudah.my returns at most 10,000 results per search, so split very large categories by state or price range.
Do I need a proxy to scrape mudah.my?
No. The actor works without a proxy by default, which keeps runs cheapest. Turn on Apify Proxy only if you get blocked.
How do I scrape Mudah.my with Python?
Use the Python example above: call the actor with ApifyClient, then iterate over the dataset items of the finished run.
Can I run this Mudah.my scraper on a schedule and get only new ads?
Yes. Use Apify Schedules and set the same Cache project name on every run. The actor skips ads it already saved before opening their detail pages, so each run fetches, returns and charges for only new listings, marked with changeType: new. See How the cache saves money above.
What formats can I export Mudah.my data in?
JSON, CSV, Excel, XML and RSS, either from the Output tab or through the Apify API.
Does it return the seller's phone number?
Yes, with full ad details on. The phone number that Mudah.my shows after you click "Show phone number" is returned in sellerDetails.phones, together with any WhatsApp numbers on the ad.
🔗 Other actors you may find useful
| Scraper | Description |
|---|---|
| 🛍️ Carousell Products Scraper | Marketplace listings from Carousell.sg by category, search or listing URL: title, price, seller rating, condition, photos and likes. |
| 📋 Craigslist Listings Scraper | Craigslist classified listings in any city and category: title, price, location, coordinates and photos. |
| 🛒 Tokopedia Product Scraper | Indonesian marketplace products from Tokopedia: title, shop, price in IDR, stock, category and images, with cross-run deduplication. |
| 🚗 Copart Search Scraper | Salvage and used vehicle auction lots from Copart: damage, odometer, current bid, sale date, yard, photos and VIN decoding. |
| 🏁 Cheapest Cars & Bids Scraper | The cheapest vehicle listings from Cars & Bids, to find the best-value auction deals. |
💬 Support & contact
If you encounter any issues or have questions, please open an issue.
You can also find more of our actors on the Actor Flow page.
🇲🇾 Scraper iklan Mudah.my: panduan ringkas (Bahasa Melayu)
Actor ini mengambil iklan daripada Mudah.my, pasaran dalam talian terbesar di Malaysia, secara automatik. Anda boleh mendapatkan data kereta terpakai, hartanah untuk dijual dan disewa, telefon, elektronik, perabot dan semua kategori lain: tajuk, harga, penerangan, gambar HD, lokasi, penjual, spesifikasi penuh dan nombor WhatsApp penjual. Hasilnya boleh dimuat turun dalam format JSON, CSV atau Excel, atau digunakan melalui API.
Cara guna:
- Masukkan URL senarai Mudah.my (dengan penapis yang anda tetapkan di laman web) atau URL satu iklan ke dalam Listing or ad URLs.
- Jika tidak mahu guna URL, taip kata kunci dalam Search keywords, contohnya
honda cityatauiphone 15. Setiap kata kunci dicari secara berasingan. - Tetapkan Max items per search untuk had bilangan iklan bagi setiap URL atau kata kunci.
- Buka Search filters and more options untuk memilih kategori, negeri, jenis senarai (jual, sewa, hartanah baharu atau lelongan), julat harga, susunan dan jenis penjual (persendirian atau syarikat).
- Tekan Start, kemudian muat turun hasil daripada tab Output.
Elakkan data berulang dengan cache: isi Cache project name dengan nama yang sama pada setiap larian. Iklan yang telah diambil sebelum ini akan dilangkau dan tidak dicaj, jadi larian berjadual hanya memberi iklan baharu, ditandakan dengan changeType: "new".
Butiran penuh iklan: pilihan Scrape full ad details (aktif secara lalai) membuka setiap iklan untuk spesifikasi penuh seperti jenama, model, tahun, jarak perjalanan, saiz, bilik tidur, kemudahan, gambar HD dan nombor WhatsApp penjual. Matikan pilihan ini untuk larian yang lebih pantas dan murah.
Nota penting:
- Mudah.my memulangkan paling banyak 10,000 keputusan bagi satu carian. Pecahkan carian besar mengikut negeri atau julat harga.
- Nombor telefon disembunyikan di sebalik captcha oleh Mudah.my. Actor ini memulangkan nombor WhatsApp yang dipaparkan oleh penjual; penjual persendirian biasanya tiada.
- Actor ini hanya mengambil maklumat awam yang boleh dilihat oleh semua pengunjung, tanpa log masuk. Anda bertanggungjawab mematuhi Terma Perkhidmatan Mudah.my dan undang-undang seperti Akta Perlindungan Data Peribadi (PDPA) 2010 jika anda mengendalikan data peribadi.