Apartments.com with Agents | $1 / 1k
Pricing
from $0.80 / 1,000 results
Apartments.com with Agents | $1 / 1k
Extract structured US rental listings from Apartments.com with pricing, addresses, contact data, amenities, media, and more. Built for enterprise-grade rental market intelligence, lead enrichment, inventory monitoring, and automated analytics pipelines.
Pricing
from $0.80 / 1,000 results
Rating
5.0
(1)
Developer
Fatih Tahta
Maintained by CommunityActor stats
4
Bookmarked
60
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Apartments.com Scraper
Slug: fatihtahta/apartments-com-scraper
Overview
Apartments.com Scraper collects structured public rental listing data from Apartments.com, including listing identity, property name, listing URL, address, coordinates, pricing, bedroom-level rent options, contact details, media assets, amenities, offers, and source context. Apartments.com is a widely used rental housing marketplace, and its public listing data is useful for market analysis, reporting, enrichment, and recurring inventory monitoring. The actor is built for repeatable, input-driven collection so the same search strategy can be run again over time with consistent output structure. Results are delivered as normalized JSON records that are suitable for analytics workflows, ETL jobs, and downstream applications. It is designed for dependable recurring public-data acquisition where users need operationally usable datasets rather than ad hoc manual browsing.
Why Use This Actor
- Market research and analytics teams: collect structured rental inventory, pricing, location, amenity, and rating signals for market intelligence, benchmark studies, and operational reporting.
- Product and content teams: build and refresh housing datasets for directory pages, search experiences, localized market views, and editorial or comparison content.
- Developers and data engineering teams: feed normalized listing records into downstream systems, enrichment pipelines, warehouses, and monitoring workflows without custom manual cleanup.
- Lead generation and enrichment teams: identify public property records, management brands, contact options, and listing attributes that can support prospecting or account enrichment.
- Monitoring and competitive tracking teams: run repeatable collections by geography and filter set to watch pricing movement, availability patterns, and listing mix over time.
Common Use Cases
- Market intelligence: monitor public rental supply, asking prices, renter ratings, special offers, and geographic coverage across target markets.
- Lead generation: build targeted lists of properties or operators based on location, property type, pet policy, short-term availability, or owner-listed inventory.
- Competitive monitoring: track how listing volume, pricing, amenities, and promotional signals change across cities, neighborhoods, or ZIP codes.
- Catalog and directory building: populate internal housing databases with structured public listing records for search, lookup, or operational review.
- Data enrichment: append current public listing attributes to CRM, BI, research, or analytics datasets.
- Recurring reporting: schedule periodic runs to support dashboards, alerts, market snapshots, and historical comparisons.
- Targeted inventory review: narrow public listings by budget, square footage, bedroom count, bathroom threshold, housing type, or move-in timing.
Quick Start
- Enter one or more locations to search, such as cities, neighborhoods, or ZIP codes.
- For a first validation run, set a small
limitso you can confirm the output shape quickly. - Add only the filters you need, such as price range, bedroom count, property type, or move-in date.
- Run the actor in Apify Console.
- Inspect the first dataset items to confirm the records match your workflow.
- Increase the limit, broaden or tighten filters, and add a schedule once the output is validated.
Input Parameters
Configure the available filters below to define the collection scope.
| Parameter | Type | Description | Default |
|---|---|---|---|
location | array of strings | One or more locations to search. Each value can be a city, neighborhood, ZIP code, or similar place name. This is the required starting point for collection scope. | – |
limit | integer | Maximum number of listings to keep for each searched location. Useful for sampling, validation, or controlled collection size. Minimum: 1. | – |
min_price | integer | Minimum monthly rent to include, in USD. | – |
max_price | integer | Maximum monthly rent to include, in USD. | – |
min_area | integer | Minimum property size to include, in square feet. | – |
max_area | integer | Maximum property size to include, in square feet. | – |
min_bedroom | string | Minimum bedroom threshold. Allowed values: studio, 1, 2, 3, 4+. | – |
max_bedroom | string | Maximum bedroom threshold. Allowed values: studio, 1, 2, 3, 4+. | – |
min_bathroom | string | Minimum bathroom threshold. Allowed values: 1+, 2+, 3+. | – |
property_type | array of strings | Property categories to include. Allowed values: apartments, houses, condos, townhomes. Leave empty to include all available categories. | – |
property_style | string | More specific property style filter. Allowed values: duplex, new_construction, under_50_units. | – |
keyword | string | Free-text keyword for public listing features or leasing details, such as parking, in-unit laundry, or utilities. | – |
housing_type | string | Specialized housing segment. Allowed values: student, senior, military, corporate, none. | – |
short_term_duration | string | Short-term lease filter. Allowed values: all_short_term, 1_2_months, 3_4_months, 5_6_months. Duration is expressed in months. | – |
move_in_date | string | Planned move-in date in ISO format, for example 2026-06-15. | – |
pet_friendly | string | Pet policy filter. Allowed values: dog_friendly, cat_friendly, dog_and_cat_allowed. | – |
min_renter_rating | array of strings | Minimum renter rating threshold. Allowed values: 4, 5. Ratings are on the site’s public rating scale. | – |
is_income_restricted | boolean | When enabled, keeps only public listings marked as income restricted. | – |
is_accepting_online_applications | boolean | When enabled, keeps only listings that publicly indicate online applications are accepted. | – |
has_move_in_specials | boolean | When enabled, keeps only listings with public move-in specials or promotional offers. | – |
is_for_rent_by_owner | boolean | When enabled, keeps only owner-listed rentals. | – |
is_room_for_rent | boolean | When enabled, keeps only room-for-rent listings in shared living arrangements. | – |
proxyConfiguration | object | Optional proxy and connection configuration exposed through the Apify input UI. Default schema value uses Apify Proxy with the RESIDENTIAL group. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
Choosing Inputs
Start with location, because it defines the search universe for every run. If you are exploring a market broadly, keep optional filters light and let the actor capture a wider inventory set. If you need a tightly targeted dataset, add price, area, bedroom, bathroom, property, lease, pet, or listing-status filters to narrow the output to only relevant listings.
Use limit conservatively for the first run so you can validate record quality and field coverage before scaling up. Price and area filters reduce the numeric scope of the dataset, while bedroom, bathroom, property, housing, and pet filters refine the listing mix. move_in_date, short-term duration, specials, and online application filters are especially useful when timing or actionability matters more than broad market discovery.
Example Inputs
Scenario: Broad city discovery with a conservative limit
{"location": ["Austin, TX"],"limit": 25,"property_type": ["apartments"],"min_price": 1200,"max_price": 2600}
Scenario: Pet-friendly urban inventory review
{"location": ["Brooklyn, NY"],"limit": 40,"min_bedroom": "1","pet_friendly": "dog_and_cat_allowed","min_renter_rating": ["4"],"is_accepting_online_applications": true}
Scenario: Short-term, move-in-ready targeted search
{"location": ["San Diego, CA"],"limit": 30,"short_term_duration": "3_4_months","move_in_date": "2026-06-15","property_type": ["apartments", "condos"],"has_move_in_specials": true,"keyword": "washer dryer"}
Output
9.1 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 without post-processing.
This actor currently emits a single public record type: listing records. Each item contains a stable record envelope plus a listing payload with pricing, location, contact, media, attribute, and source-context fields.
9.2 Record envelope (all items)
Operationally, each record should be treated as having the following stable envelope:
- type (string, required): always
listing - id (string, required): maps to the dataset field
listing_id - url (string, required): maps to the dataset field
listing_url
Recommended idempotency key: type + ":" + id
For deduplication or warehouse upserts, use the record type together with the stable listing identifier rather than display fields such as title or price. This envelope makes records easier to merge, deduplicate, and sync across repeated runs even when other listing attributes change over time.
9.3 Examples
Example: listing (type = "listing")
{"fingerprint": "121512a2500773c191b1","listing_id": "yp192jv","title": "Isle House","listing_url": "https://www.apartments.com/isle-house-san-francisco-ca/yp192jv/","source_context": {"source_page_url": "https://www.apartments.com/san-francisco-ca/","page_index": 1,"domain": "apartments.com","extraction_method": "embedded_json","seed": {"id": "0b1599d08a5c","type": "query","value": "San Francisco, CA"}},"location": {"full_address": "39 Bruton St, San Francisco, CA 94130","street_address": "39 Bruton St","country_code": "US","coordinates": {"latitude": 37.81892,"longitude": -122.37231}},"pricing": {"display": "$3,228","amount": 3228.0,"currency": "$","bedroom_options": [{"label": "Studio","price_display": "$3,228","price_amount": 3228.0,"currency": "$","is_starting_at": false},{"label": "1 Bed","price_display": "$3,868+","price_amount": 3868.0,"currency": "$","is_starting_at": true},{"label": "2 Beds","price_display": "$4,733+","price_amount": 4733.0,"currency": "$","is_starting_at": true}],"total_monthly_price": {"label": "Total Monthly Price","detail": "Prices include base rent and required monthly fees of $7. Variable costs based on usage may apply.","required_monthly_fees": {"display": "$7","amount": 7.0,"currency": "$"},"base_rent_options": [{"label": "Studio","price_display": "$3,220","price_amount": 3220.0,"currency": "$","is_starting_at": false},{"label": "1 Bed","price_display": "$3,860+","price_amount": 3860.0,"currency": "$","is_starting_at": true},{"label": "2 Beds","price_display": "$4,725+","price_amount": 4725.0,"currency": "$","is_starting_at": true}],"badge": "New"},"special_offers": ["Specials"]},"contact": {"phone": "6282103053","phone_display": "(628) 210-3053","email_available": true,"contact_options": ["(628) 210-3053","Email"]},"media": {"primary_image": {"url": "https://images1.apartments.com/i2/3VtaaA_2_lFi6-iVG8DsXP-ukNDecPJG0kk6HCt8Wj0/118/isle-house-san-francisco-ca-building-photo.jpg?p=1","title": "Building Photo - Isle House","alt": "Building Photo - Isle House"},"image_count": 23,"virtual_tours": [{"type": "virtual_tour","label": "Virtual Tours","url": "https://www.apartments.com/isle-house-san-francisco-ca/yp192jv/#yp192jv-0-virtualTour"}]},"attributes": {"amenities": ["Pets Allowed","Fitness Center","In Unit Washer & Dryer","High-Speed Internet","Controlled Access","Concierge","Rooftop Deck"],"special_offers": ["Specials"],"property_manager": "Greystar","status_badges": ["New"],"listing_flags": {"is_featured_unit": true,"has_virtual_tour": true,"has_video": false,"accepts_email_inquiry": true}},"source_data": {"property_logo": {"name": "Greystar","image_url": "https://images1.apartments.com/i2/LNwD38tsDr8eC3l32huS6UeVqrQkthbWhjSYBfUe-2U/110/greystar-logo.png"},"source_attributes": {"tracking_key": "dv0gtnl","source_country_code": "US"},"media_links": [{"type": "virtual_tour","label": "Virtual Tours","url": "https://www.apartments.com/isle-house-san-francisco-ca/yp192jv/#yp192jv-0-virtualTour"}],"map_marker": {"listing_id": "yp192jv","group_size_hint": 5,"related_listing_ids": ["yp192jv"],"latitude": 37.81892,"longitude": -122.37231,"marker_size_code": 176,"price_min": 3220,"price_max": 6915,"marker_type_code": 1,"raw_segment": "yp192jv|5|null|37.81892|-122.37231|176|3220|6915|1"},"extraction_strategy": "embedded_json"}}
Field Reference
Record type: listing
- fingerprint (string, required): run-level content fingerprint for the record.
- listing_id (string, required): stable listing identifier from the public listing.
- title (string, optional): listing or property title.
- listing_url (string, required): canonical public listing URL.
- source_context.source_page_url (string, required): public page URL where the record was collected from.
- source_context.page_index (integer, optional): result page index within the source context.
- source_context.domain (string, required): source domain.
- source_context.extraction_method (string, optional): source-provided data format used for normalization.
- source_context.seed.id (string, optional): stable identifier for the input seed behind the record.
- source_context.seed.type (string, optional): seed mode, such as
query. - source_context.seed.value (string, optional): original user-facing seed value.
- location.full_address (string, optional): full public address.
- location.street_address (string, optional): street-address portion of the location.
- location.country_code (string, optional): country code for the listing location.
- location.coordinates.latitude (number, optional): latitude.
- location.coordinates.longitude (number, optional): longitude.
- pricing.display (string, optional): public display rent text.
- pricing.amount (number, optional): parsed numeric rent amount.
- pricing.currency (string, optional): rent currency symbol.
- pricing.bedroom_options (array, optional): bedroom-specific pricing options.
- pricing.bedroom_options[].label (string, optional): bedroom label, for example
Studioor1 Bed. - pricing.bedroom_options[].price_display (string, optional): public display rent for that bedroom option.
- pricing.bedroom_options[].price_amount (number, optional): parsed numeric rent for that bedroom option.
- pricing.bedroom_options[].currency (string, optional): currency symbol for that option.
- pricing.bedroom_options[].is_starting_at (boolean, optional): whether the public price is a starting-from value.
- pricing.total_monthly_price.label (string, optional): label for the total monthly price block.
- pricing.total_monthly_price.detail (string, optional): descriptive detail for total monthly price.
- pricing.total_monthly_price.required_monthly_fees.display (string, optional): display value for required monthly fees.
- pricing.total_monthly_price.required_monthly_fees.amount (number, optional): parsed numeric required monthly fees.
- pricing.total_monthly_price.required_monthly_fees.currency (string, optional): currency symbol for fees.
- pricing.total_monthly_price.base_rent_options (array, optional): base-rent bedroom options.
- pricing.total_monthly_price.base_rent_options[].label (string, optional): bedroom label for base rent.
- pricing.total_monthly_price.base_rent_options[].price_display (string, optional): public base-rent display value.
- pricing.total_monthly_price.base_rent_options[].price_amount (number, optional): parsed numeric base-rent amount.
- pricing.total_monthly_price.base_rent_options[].currency (string, optional): currency symbol for base rent.
- pricing.total_monthly_price.base_rent_options[].is_starting_at (boolean, optional): whether the base-rent value is a starting-from price.
- pricing.total_monthly_price.badge (string, optional): status badge associated with total monthly pricing.
- pricing.special_offers (array of strings, optional): pricing-related offers or promotions.
- contact.phone (string, optional): normalized phone number.
- contact.phone_display (string, optional): phone number as displayed publicly.
- contact.email_available (boolean, optional): whether email contact is publicly indicated.
- contact.contact_options (array of strings, optional): public contact actions or methods.
- media.primary_image.url (string, optional): primary public image URL.
- media.primary_image.title (string, optional): image title.
- media.primary_image.alt (string, optional): image alt text.
- media.image_count (integer, optional): number of public images indicated for the listing.
- media.virtual_tours (array, optional): linked virtual-tour records.
- media.virtual_tours[].type (string, optional): media record type.
- media.virtual_tours[].label (string, optional): media label.
- media.virtual_tours[].url (string, optional): public media URL.
- attributes.amenities (array of strings, optional): public amenity list.
- attributes.special_offers (array of strings, optional): public offer or promotion labels.
- attributes.property_manager (string, optional): public management or operator name.
- attributes.status_badges (array of strings, optional): public badges or status labels.
- attributes.listing_flags.is_featured_unit (boolean, optional): whether the listing is flagged as featured.
- attributes.listing_flags.has_virtual_tour (boolean, optional): whether a virtual tour is indicated.
- attributes.listing_flags.has_video (boolean, optional): whether video is indicated.
- attributes.listing_flags.accepts_email_inquiry (boolean, optional): whether email inquiry is indicated.
- source_data.property_logo.name (string, optional): property-logo or operator name.
- source_data.property_logo.image_url (string, optional): property-logo image URL.
- source_data.source_attributes.tracking_key (string, optional): source-provided public tracking or correlation value.
- source_data.source_attributes.source_country_code (string, optional): source-provided country code.
- source_data.media_links (array, optional): additional media links surfaced with the record.
- source_data.media_links[].type (string, optional): media link type.
- source_data.media_links[].label (string, optional): media link label.
- source_data.media_links[].url (string, optional): public media link URL.
- source_data.map_marker.listing_id (string, optional): listing identifier present in map context.
- source_data.map_marker.group_size_hint (integer, optional): source-provided group-size hint.
- source_data.map_marker.related_listing_ids (array of strings, optional): related listing identifiers in map context.
- source_data.map_marker.latitude (number, optional): map marker latitude.
- source_data.map_marker.longitude (number, optional): map marker longitude.
- source_data.map_marker.marker_size_code (integer, optional): source-provided marker size code.
- source_data.map_marker.price_min (number, optional): minimum public price represented by the marker.
- source_data.map_marker.price_max (number, optional): maximum public price represented by the marker.
- source_data.map_marker.marker_type_code (integer, optional): source-provided marker type code.
- source_data.map_marker.raw_segment (string, optional): raw source segment preserved for traceability.
- source_data.extraction_strategy (string, optional): normalized source-data strategy label.
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, listing availability, or public site changes.
- Optional fields: null-check in downstream code.
- Deduplication: recommend
type + ":" + id. - Freshness: results reflect the publicly available data at run time.
- Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.
Tips For Best Results
- Start with a small
limitto validate the output shape before scaling up. - Use one geography or a small group of similar locations per run when you want cleaner segmentation.
- Leave optional filters empty when the goal is broad market discovery.
- Add filters gradually so you can see how each one affects coverage and result composition.
- Use price, area, bedroom, and bathroom filters together when you need more precise inventory slices.
- Schedule recurring runs for monitoring workflows instead of relying on manual one-off collection.
- Use stable identifiers for deduplication when storing records over time.
How to Run on Apify
- Open the actor in Apify Console.
- Configure the available input fields for the target geography and listing scope.
- Set the maximum number of outputs to collect with
limit. - Click Start and wait for the run to finish.
- Review the dataset and export results in JSON, CSV, Excel, or another supported format.
Scheduling & Automation
Scheduling
Automated Data Collection
You can schedule recurring runs to keep rental listing datasets current without manual re-entry of filters. This is useful for market monitoring, internal reporting, and periodic enrichment workflows.
- Navigate to Schedules in Apify Console
- Create a new schedule (daily, weekly, or custom cron)
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing
Integration Options
- BI dashboards: track pricing, listing volume, rating thresholds, and market movement by location over time.
- Data warehouses: load normalized JSON records into historical tables for reporting, trend analysis, and cross-market comparisons.
- Webhooks: trigger ingestion, validation, alerts, or downstream transformation as soon as each run completes.
- CRM enrichment: append public property and contact attributes to account, partner, or prospect records where appropriate.
- Google Sheets or Excel workflows: review smaller curated result sets manually with non-technical teams.
- ETL and enrichment pipelines: merge listing records with internal reference data, geography data, or portfolio datasets.
Export Formats And Downstream Use
Apify datasets can be exported directly or consumed programmatically by downstream systems, which makes the actor suitable for both manual review and automated delivery.
- 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 broader discovery runs or detail-rich records may take longer.
Limitations
- Availability depends on what Apartments.com publicly exposes at run time.
- Some optional fields may be missing on sparse listings or records with limited public detail.
- Very broad searches may take longer and may require a higher
limitor multiple segmented runs. - Public field availability or naming can change over time as the site evolves.
- Regional differences, listing type differences, and market-specific availability can affect what appears in results.
Troubleshooting
- No results returned: check location spelling, relax filters, and confirm that the target geography has matching public listings.
- Fewer results than expected: broaden filters, raise
limit, or verify that the selected market contains enough matching records. - Some fields are empty: optional fields depend on what each listing publicly provides.
- Run takes longer than expected: reduce scope, lower
limitfor validation, or split large collection goals into smaller location-based runs. - Output changed: compare current records against the field reference and share a small sample if support is needed.
FAQ
What data does this actor collect?
It collects public rental listing records from Apartments.com, including listing identity, URLs, addresses, coordinates, pricing, bedroom-level rent options, contact details, media, amenities, offers, and source context when available.
Can I filter by location, price, size, bedrooms, or other criteria?
Yes. The input schema supports location, result limit, price range, square footage, bedroom and bathroom thresholds, property type, property style, keyword, housing type, lease duration, move-in date, pet policy, renter rating, and several listing-status filters.
Why did I receive fewer results than my limit?
limit is a maximum, not a guarantee. If the selected geography and filters match fewer public listings than the limit, the dataset will contain fewer results.
Can I schedule recurring runs?
Yes. You can create schedules in Apify Console to run the actor daily, weekly, or on a custom cron so your dataset stays current.
How do I avoid duplicates across runs?
Use the recommended idempotency key type + ":" + id, where type is listing and id maps to listing_id.
Can I export the data to CSV, Excel, or JSON?
Yes. Apify datasets can be exported in JSON, CSV, Excel, and other supported formats, or consumed through API-based workflows.
Does this actor collect private data?
No. It is intended for publicly available listing information from Apartments.com.
What should I include when reporting an issue?
Include the input used with sensitive values redacted if needed, the run ID, expected versus actual behavior, and a small output sample when that helps illustrate the issue.
Compliance & Ethics
Responsible Data Collection
This actor collects publicly available rental listing information from https://www.apartments.com for legitimate business purposes, including:
- Real estate research and market analysis
- Operational reporting and listing monitoring
- Data enrichment and directory maintenance
Users are responsible for ensuring that their use of collected data complies with applicable laws, regulations, and contractual obligations. This section is informational and not legal advice.
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 (for example GDPR or CCPA)
Support
For help, use the actor page or the repository Issues section. Include the input used with sensitive values redacted as needed, the run ID, expected versus actual behavior, and a small output sample when useful for diagnosis.