MagicBricks & 99acres Property Data Scraper
Pricing
from $2.55 / 1,000 property scrapeds
MagicBricks & 99acres Property Data Scraper
Scrape filtered MagicBricks and 99acres searches with automatic pagination, prices, BHK, amenities, property details, seller category, images, and result positions.
Pricing
from $2.55 / 1,000 property scrapeds
Rating
5.0
(1)
Developer
Md Jakaria Mirza
Maintained by CommunityActor stats
0
Bookmarked
24
Total users
3
Monthly active users
11 days ago
Last modified
Categories
Share
MagicBricks & 99acres Property Data Scraper - Search URLs, Amenities & Prices
Scrape public Indian real-estate listings from MagicBricks and 99acres, with prices, price per square foot, BHK, area, locality, furnishing, amenities, seller category, property details, images, and listing URLs. Paste full portal search URLs to preserve website filters and paginate them automatically, or configure a simple source/city search. Export clean data to JSON, CSV, Excel, or HTML, or pull it via the Apify API. No source-site login or API key is required.
Built with Node.js 20, TypeScript, and the Apify SDK using native fetch over Apify residential proxies, with retries and resilient extraction so runs are reliable and repeatable. The actor reads each portal's structured listing data (JSON-LD and embedded page state) instead of fragile DOM scraping.
Quick Start
The input form is ready to run without editing: it collects one Mumbai property-for-sale listing from MagicBricks through the recommended Residential India proxy. Click Start, inspect the clean dataset record, and then increase the result limit or change the portal, city, transaction type, or filters.
If you already filtered a search on MagicBricks or 99acres, paste the complete results-page URL in Exact portal search. That keeps the portal's locality, BHK, property type, furnishing, budget, and posted-by filters.
What It Extracts
- Property title, source (MagicBricks or 99acres), and transaction type (sale or rent)
- City queried, locality, project name, and address text when published
- Price display text and parsed INR price
- Normalized price per square foot when the listing publishes a usable price and area
- BHK, property type, area and area unit, and area type (carpet / built-up / super built-up)
- Bedrooms, bathrooms, balconies, furnishing, status, and floor when available
- Public seller category (owner, agent, or builder), verification/featured markers, and posting date when published
- Property age, facing, ownership, parking, RERA ID, maintenance, and detected amenities
- Latitude and longitude when published by the source
- Primary image, published card image URLs, image count, listing URL, and short description
- Search-page URL, page number, and result position for traceability
- MagicBricks and 99acres records merged into one deduplicated dataset
This independent Actor does not extract phone numbers, emails, private contact details, accounts, messages, saved properties, or private dashboard data. If sensitive text appears in a public page description, it is redacted before saving.
Use Cases
- Real-estate market research for brokers, agencies, and proptech teams
- Property price monitoring and trend tracking by city and locality
- Competitor inventory tracking across major Indian portals
- Rental market research and housing supply analysis
- Listing-price and location analytics across cities
Pricing
Property records are charged only when delivered to the dataset. The apify-actor-start event is charged according to Actor memory, with at least one startup event.
This Actor uses Apify Pay Per Event pricing. Failed, blocked, or empty pages do not create property-scraped charges, but the startup event and platform resource consumption can still apply. A valid search with no matching listings finishes successfully with an empty dataset; the run fails only when every requested property page fails after retries or output billing fails.
| Event name | Price per event | 1,000 results | 10,000 results |
|---|---|---|---|
apify-actor-start | $0.00005 / GB | - | - |
property-scraped | $0.003 | $3.00 | $30.00 |
Cost-control tips:
- Run the prefilled MagicBricks + Mumbai sample with
maxResults: 1. - Leave price filters empty for the first run; unknown-price listings are excluded when filters are active.
- Set a maximum cost per run in Apify Console. The Actor stops requesting additional pages when Apify reports that limit.
- Use
bothonly after checking a one-source result.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchUrls | array | no | [] | Up to 10 full MagicBricks or 99acres search-result URLs. Preserves portal filters, paginates toward maxResults, and overrides the simple source/city search. |
source | string | yes | magicbricks | Which portal to scrape: both, magicbricks, or 99acres. |
transactionType | string | yes | sale | Listing type: sale or rent. |
cities | array | yes | ["Mumbai"] | Indian city names, e.g. Mumbai, Bengaluru, Pune, Delhi, Chennai, Hyderabad. |
minPrice | integer | no | none | Optional minimum price in INR. Listings with unknown prices are skipped when a price filter is set. |
maxPrice | integer | no | none | Optional maximum price in INR. Listings with unknown prices are skipped when a price filter is set. |
maxResults | integer | yes | 1 | Maximum unique listings to save (1-500). Start with one result. |
proxyConfiguration | object | no | Residential, IN | Apify proxy settings. Residential with India targeting recommended. |
Example Input
{"source": "magicbricks","transactionType": "sale","cities": ["Mumbai"],"maxResults": 1,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "IN"}}
To keep the filters selected on a portal, paste the complete results-page URL instead:
{"searchUrls": ["https://www.magicbricks.com/property-for-rent/residential-real-estate?cityName=Pune&bedroom=3&budgetMax=50000"],"maxResults": 25,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "IN"}}
How to Scrape MagicBricks and 99acres (Step by Step)
- Click Try for free / Run.
- For an exact filtered search, paste one or more portal result URLs in
searchUrls. - For a simple search, choose
source,transactionType, and one or more cities. - Run the prefilled Mumbai example first, or use one URL or one city such as Bengaluru, Pune, Delhi, Chennai, or Hyderabad.
- Leave price filters empty and set
maxResultsto1for the first run. - Run and export results as CSV, JSON, or Excel. Add sources, cities, or price filters after checking the output.
Output dataset
{"source": "99acres","transactionType": "sale","cityQuery": "Mumbai","propertyId": "H91004828","title": "3 BHK Flat in Sewri, Mumbai","propertyType": "Apartment","bhk": 3,"price": 63200000,"priceDisplay": "Rs. 6.32 Crore","pricePerSqft": 31041,"area": 2036,"areaUnit": "sqft","areaType": "Super Built-up Area","bedrooms": 3,"bathrooms": 3,"furnishing": "Unfurnished","status": "Under construction","floor": "16","listedBy": "Builder","propertyAge": "0-1 year old","facing": "East","parking": "1 Covered Parking","amenities": ["Lift", "Security", "Power Backup"],"projectName": "Lodha Aureus , Sewri","locality": "Sewri, Mumbai","city": "Mumbai South","address": "Lodha Aureus , Sewri, Sewri, Mumbai, Mumbai South, India","latitude": 19.000645,"longitude": 72.854859,"imageUrl": "https://imagecdn.99acres.com/media1/37936/8/758728772T-1778670458404.jpg","imageUrls": ["https://imagecdn.99acres.com/media1/37936/8/758728772T-1778670458404.jpg"],"imagesCount": 1,"propertyUrl": "https://www.99acres.com/3-bhk-bedroom-apartment-flat-for-sale-in-sewri-south-mumbai-2036-sqft-spid-H91004828","searchPage": 1,"resultPosition": 1,"scrapedAt": "2026-06-12T19:55:25.019Z"}
API Example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('fascinating_lentil/magicbricks-99acres-property-scraper').call({source: 'magicbricks',transactionType: 'sale',cities: ['Mumbai'],maxResults: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} properties`);
How It Works
- Validates full search URLs, or resolves the selected sources and cities.
- Fetches the supplied search URL without rewriting its filters, then follows bounded result pages toward
maxResults; or builds simple portal search URLs. - Extracts structured listing data (JSON-LD and embedded page state), then cleans and normalizes fields.
- Deduplicates by property ID / URL and applies optional price filters.
- Writes each clean record to the Apify Dataset together with the
property-scrapedcharge event.
Known Limits
- Many detail fields are conditional: geo coordinates, seller category, RERA ID, floor, balconies, parking, and deposit are only saved when the source publishes them. MagicBricks rarely exposes coordinates, so those may be
null. - Price filtering skips listings with an unknown price, since they cannot be compared.
- MagicBricks and 99acres can reject datacenter traffic. The default input uses Apify Residential proxy with India targeting for reliability.
- Listing availability and prices can change after scraping; verify important decisions against the source page.
- Pagination is bounded to 20 pages per search. Highly repetitive pages can yield fewer unique records than
maxResults.
Legal and Ethical Use
Use this Actor for legitimate public property-listing research and price monitoring. It is not affiliated with MagicBricks or 99acres. You are responsible for complying with each portal's terms, privacy laws, and local regulations wherever you use the data.
Responsible Use
This Actor is intended for lawful collection of publicly available information only. Users are responsible for ensuring their use complies with the source website's terms, robots.txt, applicable privacy laws, including India's DPDP Act, and all local regulations.
Do not use this Actor for owner, broker, tenant, buyer, or seller lead generation, or to collect, store, sell, or misuse personal data. The Actor author is not responsible for misuse by end users.
License
Apache-2.0. See LICENSE.