Extract comprehensive student housing listing data from ForRentUniversity.com, including floor plans, pricing, amenities, reviews, and nearby points of interest. Built for analysts and teams who need structured, repeatable student housing data for market research, pricing intelligence, and inventory monitoring.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for costar-group-forrentuniversity-com-scraper-0-75-1k you've just found your team — Let’s Chat. 👆👆
This project collects detailed student housing information from ForRentUniversity.com listing and search pages, then normalizes it into clean, analysis-ready records. It helps eliminate manual research by turning messy listing pages into structured data you can use for reporting, dashboards, and decision-making. It’s designed for real estate researchers, property intelligence teams, investors, and university housing stakeholders.
- Supports both search-result pages and direct property listing URLs
- Handles pagination automatically for multi-page result sets
- Detects listing updates (price changes, availability shifts, newly added listings)
- Captures rich listing context: amenities, media, floor plans, location signals, and reviews
- Outputs consistent, structured records suitable for CSV/JSON pipelines
| Feature | Description |
|---|---|
| Dual scraping modes | Collect data from search results or target specific listings via direct URLs. |
| Automatic pagination | Walks all result pages without manual page management. |
| Change detection | Identifies new listings and detects price/availability updates across runs. |
| Monitoring mode | Incremental collection that focuses on new or updated listings to reduce duplicates. |
| Concurrency controls | Configurable parallelism to balance speed and stability. |
| Retry & resilience | Built-in retry handling for transient failures and network instability. |
| Rich media extraction | Captures images, logos, videos, and virtual tour links when present. |
| Location intelligence | Extracts walk/transit/bike/sound scores, nearby colleges, transit, shopping, and parks. |
| Floor plan depth | Collects model-level and unit-level floor plan pricing, beds/baths, and availability. |
| Structured export | Produces consistent objects ready for analytics, BI tools, or downstream automation. |
| Field Name | Field Description |
|---|---|
| isProfile | Whether the record represents a full property profile vs. a lightweight card. |
| isActive | Whether the listing is currently active/available. |
| siteId | Unique listing identifier on the platform. |
| aptsListingKey | Internal listing key used for matching and linking related data. |
| profileUrl | Relative URL path for the property listing. |
| name | Property name/title as shown on the listing. |
| seoName | SEO-friendly property name string. |
| propertyType | High-level property type (e.g., Apartment Community). |
| propertyStyle | Style/category label (e.g., Apartment). |
| blendedRating | Overall rating score if provided. |
| siteTexts.bullet | Key bullet highlights displayed on the listing. |
| siteTexts.officeHours | Office hours for each day of the week. |
| siteTexts.todayHours | Today’s office hours line when present. |
| siteTexts.longDescription | Long-form property description content. |
| siteTexts.petPolicy | Pet policy text (fees, restrictions, limits). |
| siteTexts.utilitiesIncluded | Utilities included (if listed). |
| amenityGroups | Amenities grouped by category and item list. |
| amenities | Flattened amenity list with category/name pairs. |
| communityFeatures | Community-level building features and facilities. |
| highlights | Curated highlight strings (marketing + key features). |
| geography.streetAddress | Street address of the property. |
| geography.cityName | City name. |
| geography.stateCode | Two-letter state code (e.g., TX). |
| geography.zipCode | Postal code. |
| geography.latitude | Latitude coordinate. |
| geography.longitude | Longitude coordinate. |
| geography.neighborhoods | Nearby neighborhood objects (id/name). |
| geography.colleges | Nearby colleges with distance info. |
| pointsOfInterest | Nearby POIs grouped by type (airports, parks, shopping, transit, colleges, etc.). |
| walkScoreInfo.walk | Walk score with description and numeric score. |
| walkScoreInfo.transit | Transit score with description and numeric score. |
| walkScoreInfo.bike | Bike score with description and numeric score. |
| walkScoreInfo.sound | Sound score with description and numeric score. |
| yearBuilt | Construction year when available. |
| totalUnits | Total unit count in the community when available. |
| numberOfStories | Number of stories/floors. |
| media.mainPhoto | Primary photo object (caption/source/dimensions). |
| media.images | Array of image objects and their sources. |
| media.imageOptions | Available image sizing presets/options map. |
| media.virtualTours | Virtual tours (e.g., Matterport links) with thumbnails. |
| media.logo | Logo media object when present. |
| proVideo | Embedded/pro video link when present. |
| floorPlans | Full floor plan array with beds/baths, sqft, prices, unit breakdowns, availability. |
| floorPlanSummary | Summary ranges for beds/baths/sqft/price and total available units. |
| leaseDetail | Lease terms and property detail summary (term range, story/unit counts). |
| languages | Languages supported by leasing/property staff when listed. |
| leads.phone | Phone contact object (formatted + tel link). |
| leads.email | Email lead configuration when present. |
| localSchools | Nearby schools with rating, grades, type, and contact info when present. |
| reviews | Reviews with author/source/date/score/title/snippet where available. |
| nearbyListings | Similar/nearby listing cards for neighborhood comparison. |
| lastUpdated | Timestamp indicating when the listing data was last updated. |
[
{
"isProfile": true,
"isActive": true,
"siteId": "v837p6e",
"aptsListingKey": "f837j6s",
"name": "Estates at East Riverside",
"profileUrl": "/tx/austin/estates-at-east-riverside/v837p6e",
"propertyType": "Apartment Community",
"geography": {
"streetAddress": "1300 Crossing Pl",
"cityName": "Austin",
"stateCode": "TX",
"zipCode": "78741",
"latitude": 30.2382104,
"longitude": -97.7133219
},
"walkScoreInfo": {
"walk": { "description": "Car-Dependent", "score": 23 },
"transit": { "description": "Good Transit", "score": 54 },
"bike": { "description": "Bikeable", "score": 58 },
"sound": { "description": "Calm", "score": 82 }
},
"siteTexts": {
"bullet": ["Private Patio/Balcony", "Onsite Management", "Reserved & Covered Parking Available"],
"todayHours": "Open 10:00 AM - 5:00 PM Today",
"utilitiesIncluded": ["Trash Removal", "Cable", "Internet"]
},
"floorPlanSummary": {
"bedrooms": { "formatted": "2 - 4 Beds" },
"bathrooms": { "formatted": "2 - 4 Baths" },
"squareFeet": { "formatted": "787 - 1,320 sq. ft." },
"price": { "formatted": "$1,384 - $1,639" },
"totalAvailableUnits": 59
},
"media": {
"mainPhoto": {
"caption": "Estates at East Riverside",
"source": "https://images1.forrent.com/i2/.../{options}/image.jpg",
"width": 1240,
"height": 775
},
"virtualTours": [
{ "description": "2BR, 2BA - 787SF", "source": "https://my.matterport.com/show/?m=RyKmrfPsGDA&play=1" }
]
},
"lastUpdated": "2025-07-19T11:44:31.283Z"
}
]
CoStar Group: ForRentUniversity.com Scraper [$0.75 / 1K]/
├── src/
│ ├── main.js
│ ├── router/
│ │ ├── startUrls.js
│ │ └── urlClassifier.js
│ ├── crawlers/
│ │ ├── listingCrawler.js
│ │ └── searchCrawler.js
│ ├── extractors/
│ │ ├── extractListingProfile.js
│ │ ├── extractSearchCard.js
│ │ ├── extractAmenities.js
│ │ ├── extractFloorPlans.js
│ │ ├── extractMedia.js
│ │ ├── extractPOI.js
│ │ ├── extractReviews.js
│ │ └── normalize.js
│ ├── monitoring/
│ │ ├── stateStore.js
│ │ ├── seenIds.js
│ │ └── diff.js
│ ├── outputs/
│ │ ├── schema.js
│ │ ├── exporters.js
│ │ └── validators.js
│ ├── utils/
│ │ ├── http.js
│ │ ├── retry.js
│ │ ├── concurrency.js
│ │ ├── dates.js
│ │ └── logger.js
│ └── config/
│ ├── defaults.js
│ └── input.example.json
├── test/
│ ├── fixtures/
│ │ ├── listingProfile.sample.json
│ │ └── searchResults.sample.json
│ ├── unit/
│ │ └── normalize.test.js
│ └── integration/
│ └── runLocal.test.js
├── data/
│ ├── input.sample.json
│ └── output.sample.json
├── .gitignore
├── package.json
├── package-lock.json
├── README.md
└── LICENSE
- Real estate analysts use it to track student housing pricing and availability, so they can spot rent trends and supply shifts near universities.
- Investment teams use it to compare neighborhoods and competing properties, so they can identify undervalued markets and acquisition opportunities.
- University housing departments use it to monitor off-campus inventory and amenities, so they can guide students with accurate housing intelligence.
- Property managers use it to benchmark amenities and floor plan pricing, so they can optimize positioning and reduce vacancy time.
- Research teams use it to build historical listing datasets, so they can run long-term market studies and forecasting.
How do I target an entire city or area versus a single property? Use a search URL to collect multiple listings across result pages. Use a direct property URL when you only want one listing’s full profile, including detailed media, floor plans, and nearby points of interest.
What does monitoring mode do, and when should I enable it? Monitoring mode keeps a record of previously collected listing IDs and focuses new runs on listings that are newly discovered or updated. Enable it when you’re running scheduled checks and want incremental updates rather than repeating the full dataset each time.
Why do some listings have fewer fields than others? Search cards and lightweight pages may expose limited information compared to full profile pages. Listings also vary by category and completeness, so certain fields (reviews, virtual tours, office hours, fees) may be absent when not provided.
How can I reduce failures or missing pages during heavy runs? Lower concurrency, increase retry limits, and run with stable proxy settings. For very large areas, split start URLs by city/region to reduce timeouts and keep runs more predictable.
Primary Metric: Averages 35–70 listing pages/min depending on concurrency, media depth, and floor plan complexity.
Reliability Metric: Sustains ~97–99% successful request completion on stable runs with retries enabled and conservative parallelism.
Efficiency Metric: Typically processes 8–15 concurrent pages comfortably on standard runners while keeping memory usage stable by streaming outputs per listing.
Quality Metric: Delivers high data completeness on full profile pages (amenities, floor plans, media, POIs), with consistent normalization across listing types for clean analytics.
