DEV Community

Minexa.ai
Minexa.ai

Posted on

How to scrape real estate listings from OSU's off-campus housing portal

If you have ever needed to pull rental listings from a university housing portal, you already know the problem. The data is right there on the page, but copying it manually across dozens of pages is tedious, and writing a custom scraper for an ASP.NET-based site with dynamic IDs is its own kind of headache.

This tutorial shows how to extract property listings from MyOffCampus, Ohio State University's off-campus housing search tool, using the Minexa.ai Chrome extension — no code required to set it up.


What you will extract

Each listing on MyOffCampus includes:

  • Street address
  • Number of bedrooms and bathrooms
  • Price range (per month)
  • A/C type and pet policy
  • Photo count and image link
  • A direct link to the full property detail page

The portal paginates results and uses ASP.NET control IDs in the DOM, which makes traditional selector-based scrapers brittle. Minexa handles this automatically.


Step-by-step walkthrough

1. Install the extension and open the target page

Install Minexa.ai from the Chrome Web Store, then navigate to:

https://offcampus.osu.edu/myoffcampus/search-housing.aspx

Minexa home page after load

MyOffCampus page loaded

2. Open the Minexa extension popup

Click the extension icon. You will see a prompt asking you to confirm you are on the right page. Click 'I'm on the right page'.

Extension popup

3. Pagination is detected automatically

Minexa scans the page and identifies the pagination pattern. For MyOffCampus, it detects the next-page navigation and lists the pages it will follow. Click Continue.

Pagination detected

4. Choose list-only or list + detail pages

You can scrape just the listing cards, or follow each property link and extract the full detail page too. For this walkthrough, list-only is enough to get address, price, bedrooms, and amenities.

List or detail choice

5. Start the scraping job

Select the simple scraping scenario and confirm. Minexa automatically highlights the repeating container that holds all listing cards.

Container auto-detected

6. Review extracted columns

After clicking 'Create scraper', you can browse all extracted data points using the next/prev navigation. No field selection needed — Minexa surfaces everything it found.

Extracted columns preview

7. Run the job and export

Job list with run button

Scraped data table

Export to Excel, Google Sheets, or JSON when the run finishes.


Video tutorial

Watch the full tutorial


Sample output

Here is what two rows from the extracted JSON look like after cleaning up the prefixes:

[
  {
    "street_address": "399 East 13th Avenue",
    "bedrooms": "5 beds",
    "bathroom_description": "1 full, 0 half baths",
    "price_range": "$445.00 - $550.00",
    "air_conditioning_type": "Central A/C, Pets Allowed",
    "photo_count": "16 Photos",
    "property_link": "search-housing.aspx?property=20227"
  },
  {
    "street_address": "2233 Neil Avenue Unit I",
    "bedrooms": "1 bed",
    "bathroom_description": "1 full, 0 half baths",
    "price_range": "$450.00 - $600.00",
    "air_conditioning_type": "Window A/C",
    "photo_count": "9 Photos",
    "property_link": "search-housing.aspx?property=17341"
  }
]
Enter fullscreen mode Exit fullscreen mode

Each row maps cleanly to one listing card. The property_link field gives you the path to the detail page if you want to run a second pass for full descriptions.


Working with the data in Python

import json

with open('osu_listings.json') as f:
    listings = json.load(f)

for item in listings:
    addr = item.get('street_address')
    price = item.get('price_range')
    beds = item.get('bedrooms')
    print(f"{addr} | {beds} | {price}")
Enter fullscreen mode Exit fullscreen mode

Output:

399 East 13th Avenue | 5 beds | $445.00 - $550.00
2233 Neil Avenue Unit I | 1 bed | $450.00 - $600.00
Enter fullscreen mode Exit fullscreen mode

Scheduling repeat runs

Once the scraper is configured, you can schedule it to run daily or weekly directly from the Minexa interface. This is useful if you want to track which listings appear, disappear, or change price over time without triggering anything manually.

Schedule and summary options


The full setup for this scraper takes under five minutes. Once it is trained on the MyOffCampus listing structure, every future run starts immediately without repeating any configuration steps.

Get the Minexa.ai Chrome extension and run your first extraction today.

Top comments (0)