Propiedades Scraper | Fast & Reliable | $1.5 / 1k avatar

Propiedades Scraper | Fast & Reliable | $1.5 / 1k

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Propiedades Scraper | Fast & Reliable | $1.5 / 1k

Propiedades Scraper | Fast & Reliable | $1.5 / 1k

Extract structured real estate listings across Mexico from Propiedades.com with prices, full description, property details, seller data, media and more. Built for enterprise-grade real estate intelligence, lead enrichment, market analysis, and automated data pipelines.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Propiedades Scraper

Slug: fatihtahta/propiedades-scraper

Overview

Propiedades Scraper collects structured real estate listing data from Propiedades.com, including listing identity, property type, transaction type, pricing, location, features, media, listing dates, status flags, source context, and description text. Propiedades.com is a major real estate marketplace in Mexico, making its public listing data useful for market research, pricing analysis, inventory monitoring, and lead discovery. The actor turns location- and filter-based searches into repeatable datasets that can be used in analytics, reporting, enrichment, and monitoring workflows. Output is normalized into JSON records so teams can run the same collection process consistently across geographies, deal types, property categories, and price or area segments. It is designed for dependable recurring data acquisition while reflecting the public data available at the time of each run.

Why Use This Actor

  • Market research and analytics teams: collect structured extraction outputs for pricing bands, geographic coverage, inventory movement, and market intelligence.
  • Product and content teams: populate internal property experiences, comparison views, editorial research, and localized content workflows with normalized listing data.
  • Developers and data engineering teams: feed repeatable collection results into downstream systems, ETL pipelines, search indexes, and operational reporting.
  • Lead generation and enrichment teams: identify public listing opportunities and enrich CRM records with current property attributes, locations, and transaction context.
  • Monitoring and competitive tracking teams: schedule recurring data acquisition to observe availability, pricing, listing status, and category movement over time.

Common Use Cases

  • Market intelligence: monitor supply, pricing, availability, property categories, locations, and size ranges across Mexican real estate markets.
  • Lead generation: build targeted prospect lists from public property listings in specific cities, neighborhoods, municipalities, or regions.
  • Competitive monitoring: track changes in visible inventory, pricing, listing age, media presence, and property positioning.
  • Catalog and directory building: populate internal databases with structured public property records for search, review, or qualification.
  • Data enrichment: add current public listing attributes to CRM, BI, valuation, or analytics datasets.
  • Recurring reporting: schedule periodic runs for dashboards, alerts, market snapshots, or trend analysis.

Quick Start

  1. Choose one or more location values, such as a city, neighborhood, municipality, or region in Mexico.
  2. Select the deal_type and property_type that match the target market segment.
  3. Add optional filters such as bedrooms, bathrooms, parking, amenities, price range, or area range when you need a narrower dataset.
  4. Set a small limit for the first validation run.
  5. Run the actor in Apify Console and inspect the first dataset records to confirm the shape matches your use case.
  6. Increase coverage, adjust filters, or schedule the actor once the output is verified.

Input Parameters

This actor accepts location-based searches with optional deal type, property type, room, amenity, price, area, and result limit filters.

ParameterTypeDescriptionDefault
locationarray of stringsCities, neighborhoods, municipalities, or regions to search in Mexico. Enter one location per row. Broader locations improve discovery; specific neighborhoods produce more targeted results.
deal_typestringCommercial context for the listings. Allowed values: all, sale, sale_infonavit, sale_remate, rent.all
property_typestringProperty category to collect. Allowed values: house, gated_community_house, apartment, residential_land, ranch, office, industrial_warehouse, commercial_land, industrial_storage, retail_space, building, room, commercial_storage, industrial_land.apartment
min_bedroomstringMinimum bedrooms required. Allowed values: 1, 2, 3, 4_plus. Leave empty when bedroom count should not restrict results.
min_bathroomstringMinimum bathrooms required. Allowed values: 1, 1_5, 2, 2_5_plus. Leave empty when bathroom count should not restrict results.
min_parkingstringMinimum parking spaces required. Allowed values: 1, 2, 3, 4_plus. Leave empty when parking availability should not restrict results.
amenitystringRequired amenity or furnishing characteristic. Allowed values: amenities, pool, furnished, laundry_area, fireplace, garden, basement, terrace.amenities
min_priceintegerMinimum listing price to include, in Mexican pesos. Minimum value: 1000.
max_priceintegerMaximum listing price to include, in Mexican pesos. Minimum value: 1000.
min_areaintegerMinimum constructed area to include, in square meters.
max_areaintegerMaximum constructed area to include, in square meters.
limitintegerMaximum number of listings to save for each provided location or input. Minimum value: 1. Leave empty to collect all available matching listings for the configured search.

Choosing Inputs

Use location as the primary scope control. A broad city or municipality can improve discovery, while a specific neighborhood helps produce a cleaner market segment for comparison, reporting, or lead review.

Use deal_type and property_type to align the dataset with the commercial workflow, such as rentals, standard sales, Infonavit-eligible sales, remate sales, apartments, houses, offices, land, warehouses, or retail spaces. Add room, parking, amenity, price, and area filters when you need qualification-ready results; leave optional filters empty when the goal is broad discovery. Start with a small limit to validate the output shape, then increase it once you confirm the dataset matches your intended use.

Example Inputs

Example: Neighborhood apartment sale validation

{
"location": ["Roma Norte"],
"deal_type": "sale",
"property_type": "apartment",
"min_bedroom": "2",
"min_price": 3000000,
"max_price": 9000000,
"limit": 25
}

Example: Rental monitoring in a city

{
"location": ["Guadalajara"],
"deal_type": "rent",
"property_type": "house",
"min_bathroom": "2",
"min_parking": "1",
"limit": 50
}

Example: Broad discovery with conservative limit

{
"location": ["Monterrey", "San Pedro Garza García"],
"deal_type": "all",
"property_type": "retail_space",
"amenity": "amenities",
"min_area": 50,
"max_area": 300,
"limit": 40
}

Output

Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, this README documents each shape separately based on the provided Example Output.

Record Envelope And Stable Identifiers

Each dataset item represents a public Propiedades.com property listing. The strongest recommended idempotency key is id; use url as a secondary verification key when syncing records across repeated runs.

For deduplication and upserts, store records by id and update mutable fields such as pricing, listing dates, status flags, media, and description when a later run returns the same listing. Stable identifiers make records easier to merge, deduplicate, and sync across warehouses, CRMs, search indexes, and internal APIs. The source_context.source_url and related source context fields provide run context for traceability, but they should not replace id as the primary listing key.

Examples

Example: property listing

{
"id": 24058591,
"url": "https://propiedades.com/inmuebles/casa-en-venta-roma-norte-cuauhtemoc-ciudad-de-mexico-roma-norte-df-24058591",
"title": "Roma Norte, Cuauhtémoc, Ciudad de México",
"property_type": "Residencial",
"listing_type": "Casa",
"transaction_type": "Venta",
"pricing": {
"price": 19500000,
"sale_price": 19500000,
"rental_price": 0,
"currency": "MXN"
},
"location": {
"full_address": "Roma Norte, Cuauhtémoc, Ciudad de México, Col. Roma Norte C.P. 06700, Cuauhtémoc",
"display_address": "Roma Norte, Cuauhtémoc, Ciudad de México, Col. Roma Norte",
"short_address": "Roma Norte, Cuauhtémoc, Ciudad de México",
"colony": "Roma Norte",
"municipality": "Cuauhtémoc",
"city": "Cuauhtémoc",
"state": "DF / CDMX",
"postal_code": "06700",
"coordinates": {
"latitude": 19.4173639,
"longitude": -99.1594532,
"valid": false
}
},
"features": {
"bedrooms": 0,
"bathrooms": 0,
"size_m2": 400
},
"media": {
"photo_count": 12,
"main_image": {
"url": "https://propiedadescom.s3.amazonaws.com/files/292x200/roma-norte-cuauhtemoc-ciudad-de-mexico-roma-norte-cuauhtemoc-df-cdmx-24058591-foto-01.jpg",
"width": 899,
"height": 1200
}
},
"listing_dates": {
"published_at": "2022-02-15 10:37:13",
"modified": "22/04/2026",
"age_text": "4 años en Propiedades.com"
},
"status": {
"is_new": false,
"off_market": false,
"verified_whatsapp": true,
"is_exclusive": false,
"is_auction": false,
"is_showroom": false,
"is_duplicate": false,
"is_main_duplicate": false,
"highlighted": false
},
"source_details": {
"city_id": 6,
"state_id": 1,
"purpose_id": 1,
"property_type_id": 1,
"property_subtype_id": 2,
"product_ranking_id": 4,
"random_value": 64.4635
},
"source_context": {
"source_url": "https://propiedades.com",
"seed_id": "ee7c8d09d185",
"seed_type": "query",
"seed_value": "Roma Norte",
"page_index": 1,
"query": "Roma Norte",
"location_label": "Roma Norte, Cuauhtémoc, Ciudad De México",
"direction_id": "733"
},
"description": "Venta de casa en el corazón de la colonia Roma, el acceso a la casa es directo sobre avenida. ID: EB-JP6134"
}

Field Reference

Property Listing Record

id (integer, required): Stable listing identifier recommended for deduplication and upserts.

url (string, required): Public listing URL.

title (string, optional): Listing title or headline location.

property_type (string, optional): Broad property classification.

listing_type (string, optional): Listing category, such as house or apartment.

transaction_type (string, optional): Commercial transaction type, such as sale or rent.

pricing.price / pricing.sale_price / pricing.rental_price (integer, optional): Listing price values in the record currency; availability depends on transaction type.

pricing.currency (string, optional): Currency code, typically MXN.

location.full_address (string, optional): Full visible address text.

location.display_address (string, optional): Display-ready address.

location.short_address (string, optional): Short location label.

location.colony (string, optional): Colony or neighborhood.

location.municipality (string, optional): Municipality.

location.city (string, optional): City.

location.state (string, optional): State or regional label.

location.postal_code (string, optional): Postal code when available.

location.coordinates.latitude / location.coordinates.longitude (number, optional): Geographic coordinates when available.

location.coordinates.valid (boolean, optional): Indicates whether coordinates are marked valid in the source data.

features.bedrooms (integer, optional): Bedroom count.

features.bathrooms (number, optional): Bathroom count.

features.size_m2 (integer, optional): Constructed area in square meters.

media.photo_count (integer, optional): Number of photos visible for the listing.

media.main_image.url (string, optional): Main image URL.

media.main_image.width / media.main_image.height (integer, optional): Main image dimensions when available.

listing_dates.published_at (string, optional): Published timestamp as returned by the source.

listing_dates.modified (string, optional): Last modified date as returned by the source.

listing_dates.age_text (string, optional): Human-readable listing age.

status.is_new (boolean, optional): Indicates whether the listing is marked new.

status.off_market (boolean, optional): Indicates whether the listing is marked off market.

status.verified_whatsapp (boolean, optional): Indicates whether WhatsApp verification is shown.

status.is_exclusive (boolean, optional): Indicates whether the listing is marked exclusive.

status.is_auction (boolean, optional): Indicates whether the listing is marked as auction or remate-related.

status.is_showroom (boolean, optional): Indicates whether the listing is marked showroom-related.

status.is_duplicate / status.is_main_duplicate (boolean, optional): Duplicate indicators from the listing data.

status.highlighted (boolean, optional): Indicates whether the listing is highlighted.

source_details.city_id / source_details.state_id (integer, optional): Source-provided location identifiers.

source_details.purpose_id (integer, optional): Source-provided transaction or purpose identifier.

source_details.property_type_id / source_details.property_subtype_id (integer, optional): Source-provided property classification identifiers.

source_details.product_ranking_id (integer, optional): Source-provided ranking or product identifier.

source_details.random_value (number, optional): Source-provided numeric value associated with the listing record.

source_context.source_url (string, optional): Public source context URL associated with the record collection.

source_context.seed_id (string, optional): Identifier for the input seed that produced the record.

source_context.seed_type (string, optional): Type of starting input, such as query.

source_context.seed_value (string, optional): Input value that produced the record.

source_context.page_index (integer, optional): Result page index associated with the record.

source_context.query (string, optional): Query or location text used for the record.

source_context.location_label (string, optional): Matched location label.

source_context.direction_id (string, optional): Source-provided location direction identifier.

description (string, optional): Listing description text.

Data Quality, Guarantees, And Handling

  • Structured records: results are normalized into predictable JSON objects for downstream use.
  • Best-effort extraction: fields may vary by region, session, availability, and target-side presentation changes.
  • Optional fields: null-check optional values in downstream code, especially media, dates, coordinates, status flags, and source-provided metadata.
  • Deduplication: use id as the primary stable key and url as a secondary verification key when storing records over time.
  • Freshness: results reflect the publicly available data at run time.
  • Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, or internal APIs.

Tips For Best Results

  • Start with a small limit to validate the output shape before scaling up.
  • Use one geography or segment per run when you need cleaner reporting and easier comparison.
  • Leave optional filters empty when the goal is broad market discovery.
  • Add price, area, room, parking, and amenity filters gradually to understand how each field changes coverage.
  • Use deal_type and property_type to keep sale, rental, residential, commercial, or industrial workflows separate.
  • Schedule recurring runs for monitoring workflows instead of relying on manual one-off collection.
  • Use id for deduplication when storing listing records over time.

How To Run On Apify

  1. Open the Actor in Apify Console.
  2. Configure the available input fields for the target scope.
  3. Set the maximum number of outputs to collect with limit.
  4. Click Start and wait for the run to finish.
  5. Open the dataset and review the first records.
  6. Download results in JSON, CSV, Excel, or another supported format.

Scheduling & Automation

Scheduling

Automated Data Collection

Schedule recurring runs to keep property datasets current for dashboards, alerts, enrichment, and operational reporting. Use separate schedules for different geographies, deal types, or property segments when you need cleaner historical comparisons.

  • Navigate to Schedules in Apify Console
  • Create a new schedule, such as daily, weekly, or custom cron
  • Configure input parameters
  • Enable notifications for run completion
  • Add webhooks for automated processing

Integration Options

  • CRM enrichment: sync listing attributes, public URLs, locations, pricing, and transaction context into account or lead records.
  • BI dashboards: monitor pricing, availability, property categories, geographic coverage, and listing changes over time.
  • Data warehouses: store normalized listing snapshots for historical analysis, modeling, and operational reporting.
  • Google Sheets or Airtable: review smaller property segments, lead lists, or market samples with business users.
  • Webhooks: trigger validation, notification, or ingestion workflows after each completed run.
  • Alerts and scheduled reporting: notify teams when new listings, price bands, or target locations require review.

Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for operational workflows, analytics, and archival storage.

  • JSON: for APIs, applications, and data pipelines
  • CSV or Excel: for spreadsheet workflows and manual review
  • API access: for automated ingestion into internal systems
  • BI and warehouses: for reporting, dashboards, and historical analysis

Performance

Estimated run times:

  • Small runs (< 1,000 outputs): ~3–5 minutes
  • Medium runs (1,000–5,000 outputs): ~5–15 minutes
  • Large runs (5,000+ outputs): ~15–30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

Limitations

  • Availability depends on what Propiedades.com publicly exposes at run time.
  • Some optional fields may be missing on sparse records or listing types that do not publish every attribute.
  • Very broad searches may take longer or require higher limit values to collect the desired coverage.
  • Target-side changes can affect field availability, labels, or naming.
  • Regional, account, or availability differences may change visible results.
  • Results should be treated as a run-time snapshot, not a guarantee that a listing remains available later.

Troubleshooting

  • No results returned: check filters, location spelling, property category, deal type, and whether the target has matching public records.
  • Fewer results than expected: broaden filters, raise limit, or verify that the target contains enough matching records for the selected location and segment.
  • Some fields are empty: optional fields depend on what each listing publicly provides.
  • Run takes longer than expected: reduce scope, lower limit for validation, or split broad collection into smaller segments.
  • Output changed: compare the current output with the field reference and report a small sample if support is needed.

FAQ

What data does this actor collect?

It collects public Propiedades.com property listing records, including listing identifiers, URLs, titles, property and transaction types, pricing, location, features, media, dates, status flags, source context, and descriptions when available.

Can I filter by location, category, price, or other criteria?

Yes. The actor supports location, deal_type, property_type, bedroom, bathroom, parking, amenity, price range, area range, and limit inputs.

Can I filter by date?

No date filter is exposed in the input schema. Date-related fields may appear in output records when available from the listing data.

Why did I receive fewer results than my limit?

The selected location and filters may have fewer matching public listings than the requested limit. Broaden filters or try a wider location to improve coverage.

Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor on a daily, weekly, or custom cadence for monitoring, reporting, and enrichment workflows.

How do I avoid duplicates across runs?

Use id as the primary idempotency key. You can also store url as a secondary verification field when syncing records into downstream systems.

Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support common export formats including JSON, CSV, and Excel, as well as API-based consumption.

Does this actor collect private data?

The actor is intended to collect publicly available property listing information from Propiedades.com. Users are responsible for using the data lawfully and responsibly.

What should I include when reporting an issue?

Include the input used with sensitive values removed, the run ID, expected versus actual behavior, and a small output sample if it helps explain the issue.

Compliance & Ethics

Responsible Data Collection

This actor collects publicly available real estate listing information from https://propiedades.com for legitimate business purposes, including:

  • Real estate research and market analysis
  • Property inventory monitoring and operational reporting
  • Lead discovery, CRM enrichment, and business intelligence workflows

This section is informational and not legal advice. Users are responsible for ensuring their use of collected data complies with applicable laws, regulations, and platform terms.

Best Practices

  • Use collected data in accordance with applicable laws, regulations, and the target site’s terms
  • Respect individual privacy and personal information
  • Use data responsibly and avoid disruptive or excessive collection
  • Do not use this actor for spamming, harassment, or other harmful purposes
  • Follow relevant data protection requirements where applicable, such as GDPR and CCPA

Support

For help, use the actor page or Issues section. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when relevant. This helps support reproduce the case and determine whether the issue is input scope, target availability, or output interpretation.