Turn Apartments.com listings into rental market insights with Apify

Collect Apartments.com listings at scale with Apify, then use ChatGPT to compare nearby properties in an interactive market report.

A nearby apartment may advertise a higher rent and still be the cheaper option.

Suppose one property lists a one-bedroom apartment for $1,445 and offers one month free. Another charges $1,525 but offers eight weeks free. The second appears more expensive on Apartments.com, yet its discount makes it cheaper over a 12-month lease.

Now scale that comparison across dozens of properties with different apartment sizes, credits, lease terms, and unit-specific specials. The listings are public, but the real cost of renting is difficult to see.

In this tutorial, you’ll use Apify and ChatGPT to assess Edison Austin against 100 one-bedroom listings across Austin, Texas. ChatGPT will turn the listing data collected by Apify into an interactive report that compares rent after specials, identifies nearby competitors, and tests whether changing Edison’s offer would improve its market position.

What will this analysis help you decide?

A property doesn’t compete on rent alone. Renters also consider floor plan size, location, and specials, which can make an apartment with a higher advertised rent the better deal. For a property manager, the challenge is understanding how Edison Austin compares once you account for those differences.

The report will help answer four questions:

  • Is Edison’s one-bedroom rent competitive for its area?
  • Which nearby properties offer renters better value after specials?
  • Does Edison’s larger floor plan justify its higher rent?
  • Would a different special make Edison more competitive?

Anyone can browse these listings on Apartments.com. The challenge is comparing them at scale and on equal terms. A renter might compare only three or four apartments. A property manager needs to compare dozens of properties, translate every special into a 12-month cost, and decide whether to keep the current offer, adjust it, or examine a competitor more closely.

Edison Austin property page on Apartments.com.
Edison Austin property page on Apartments.com.
💡
In this tutorial, comps are nearby properties used for comparison, while concessions are offers such as free rent or a one-time credit. Estimated effective rent is the asking rent after a concession is spread across a 12-month lease.

Should Edison change its offer?

Edison Austin is the property you’re evaluating. Its advertised rent for a one-bedroom apartment starts at $1,445, and its listing offers one month free.

You’re not trying to explain the entire Austin rental market. You’re only using current listings to answer one focused question:

Should Edison keep its current rent and special, or would a different offer make it more competitive?

Answering that question requires more than collecting advertised rents alone. You’ll need to:

  • Collect comparable one-bedroom listings across Austin.
  • Capture their rents, sizes, locations, availability, and specials.
  • Convert different specials into the same 12-month measure.
  • Test whether changing Edison’s offer actually helps its position.
  • Identify the properties that compete most directly with Edison.
Edison Austin one-bedroom pricing and floor plan.
Edison Austin one-bedroom pricing and floor plan.

How to build the rental report

To follow along, you’ll need a ChatGPT plan with developer mode access and an Apify account. Inside ChatGPT, you’ll use the Apify plugin to run the memo23/apartments-cheerio-ppe Actor and extract listings from Apartments.com.

Step 1: Connect Apify to ChatGPT

Apify provides a Model Context Protocol (MCP) server that lets ChatGPT interact directly with your Apify account. Once connected as a plugin, it allows ChatGPT to inspect Actors in Apify Store, start a run, and retrieve the results with your permission.

Here’s how to set up the connection:

  • Click your ChatGPT profile icon and select Settings.
  • Select Security and login.
  • Find Developer mode and turn it on.
  • Close Settings and return to Plugins.
  • Click the + icon to create a new plugin.
  • Name the plugin Apify and add a short description.
  • Under Connection, enter https://mcp.apify.com as the MCP server URL.
  • Select OAuth as the authentication method.
  • Click Create.
  • ChatGPT will open an Apify authorization page. Review the requested access and click Allow access.
  • Once you return to ChatGPT, confirm that the Apify plugin is connected and is visible.

Developer mode carries an elevated risk because it allows ChatGPT to connect to unverified MCP servers. Make sure the server URL is exactly https://mcp.apify.com before authorizing access.

Apify MCP server configuration
Configure the Apify MCP server with Actors and tools for easy integration with MCP clients
Apify plugin selected in ChatGPT Work.
Apify plugin selected in ChatGPT Work.

Step 2: Test the Actor with five properties

An Apify Actor is a serverless cloud program that performs a specific task. For this project, you need one that can collect Apartments.com listings and visit individual property pages to gather more details.

You’ll use the memo23/apartments-cheerio-ppe Actor. It supports both search pages and individual property pages, and its output returns the information needed for this report:

  • One-bedroom floor plans and unit rents
  • Square footage and availability
  • Property names, addresses, and coordinates
  • The original text used to describe rent specials

Before fetching the full dataset, test the Actor with five properties to confirm that the Actor returns the required fields before you spend time and money on a larger run.

Paste the following prompt into the ChatGPT conversation where you enabled the Apify plugin:

@Apify run `memo23/apartments-cheerio-ppe` exactly once.

Use this Actor input:

{
  "startUrls": [
    "https://www.apartments.com/stassney-at-soco-austin-tx/qre0qpw/",
    "https://www.apartments.com/eightyone10-blue-goose-manor-tx/14zyb76/",
    "https://www.apartments.com/the-watson-austin-tx/s286zb6/",
    "https://www.apartments.com/ellwood-at-lake-travis-austin-tx/4v6169l/",
    "https://www.apartments.com/edison-austin-austin-tx/40n18nj/"
  ],
  "moreResults": false,
  "includeMoreDetails": true,
  "enrichEmails": false,
  "qualifyByPayment": false,
  "removeDuplicates": true,
  "maxItems": 5,
  "maxConcurrency": 5,
  "minConcurrency": 1,
  "maxRequestRetries": 3
}

Use 1,024 MB of memory and a 600-second timeout.

Start only one run. If the initial wait ends before the Actor finishes, check the status of that same run. Do not start another run.

After the run reaches a final status:

1. Report the run ID, dataset ID, status, and total item count.
2. Fetch exactly five raw items from the dataset.
3. Identify the JSON paths containing:
   - Property name, address, and URL
   - Coordinates
   - One-bedroom floor plans
   - Unit-level advertised rent
   - Square footage
   - Availability
   - Rent special text

Do not perform any market analysis yet.

The instruction to check the same run is important. If ChatGPT stops waiting, it doesn’t necessarily mean the Actor has stopped. Starting another run could collect the same properties twice and cause an unnecessary extra charge.

Setting includeMoreDetails to true tells the Actor to visit each property page, where most floor plan, unit, availability, and rent-special information is stored.

Proceed to the next step when the run returns five items and the raw data contains usable values for every category above. If a category is missing, inspect the Actor input and output before starting the larger scrape.

Apify logo
Try Apify today
Get $5 monthly usage and try any tool for free
Get web data
Successful five-property Apify test run.
Successful five-property Apify test run.

Step 3: Collect Austin listings

Now that you’ve confirmed the Actor returns the fields you need, replace the five property URLs with an Apartments.com search page. The URL below is already filtered to show one-bedroom apartments in Austin.

Two settings control the size of the collection:

  • moreResults tells the Actor to continue beyond the first page of results.
  • maxItems limits the output to 100 listings.

One hundred listings provide enough data for a useful comparison without making this project unnecessarily large.

Paste this prompt into the same ChatGPT conversation:

@Apify, run `memo23/apartments-cheerio-ppe` using this Actor input:

{
  "startUrls": [
    "https://www.apartments.com/austin-tx/1-bedrooms/"
  ],
  "moreResults": true,
  "includeMoreDetails": true,
  "enrichEmails": false,
  "qualifyByPayment": false,
  "removeDuplicates": true,
  "maxItems": 100,
  "maxConcurrency": 5,
  "minConcurrency": 1,
  "maxRequestRetries": 3
}

Use 1,024 MB of memory and a 1,800-second timeout.

Start exactly one Actor run. If ChatGPT stops waiting before the run finishes, check the status of that same run. Do not start a replacement run.

After the run reaches a final status:

1. Return the run ID, dataset ID, status, duration, and total item count.
2. Report the number of successful and failed requests.
3. Fetch the dataset items and confirm:
   - No more than 100 properties were collected.
   - Every property has a URL.
   - The property URLs are unique.
4. Count how many properties contain usable data for:
   - Coordinates
   - Floor plans
   - One-bedroom floor plans
   - Unit rents
   - Square footage
   - Availability
   - `moveInSpecialText`
5. Present the coverage counts in a table.

Do not analyze the market yet.

It’s normal to see more than 100 requests in your Apify console because the Actor visits both the search results and individual property pages to collect 100 listings.

SUCCEEDED status only means the run finished. The checks in the prompt confirm whether the listings contain the information needed for the analysis. An empty rent special field often means the property had no advertised offer when the data was collected.

Successful collection of 100 Austin listings.
Successful collection of 100 Austin listings.

Step 4: Standardize the listings and calculate effective rent

Rent specials are rarely written the same way. One property may advertise “one month free,” while another offers “up to eight weeks free” or a “$2,000 credit on select homes.” Some listings simply say, “Special available. Call for details.”

ChatGPT can read this language and separate the value of an offer from its conditions. Code then handles the calculations. This keeps every rent, distance, median, percentile, and ranking consistent across the dataset.

For this analysis, you’ll spread each offer across 12 months:

Estimated effective rent = asking rent × (1 − free weeks ÷ 52) − one time credit ÷ 12

This gives you a consistent way to compare offers. It’s not a promise of what a renter will pay. The actual discount may depend on the unit, lease length, application date, or renter eligibility.

Paste the following prompt into ChatGPT:

@Apify

Retrieve all 100 dataset items from the existing completed Actor run `IC75i1GVEJABY7G0y` for `memo23/apartments-cheerio-ppe`.

Do not start or rerun the Actor. Use only the dataset attached to this run.

Use code to:

1. Calculate straight-line distance from Edison Austin in miles using the Haversine formula.
2. Exclude Edison, then select the 11 closest properties with valid one-bedroom rent, square footage, and coordinates.
3. Mark them as the selected comp set. If fewer than 11 qualify, report that instead of using incomplete properties.
4. Return the selected property names and briefly explain why each qualified.

Then calculate:

- Edison’s asking-rent percentile across all properties with valid rent, defined as the percentage with asking rent less than or equal to Edison’s
- Median asking rent and estimated effective rent for the selected comps
- Edison’s estimated effective-rent rank among Edison and the comps, with rank 1 as the lowest
- Edison’s estimated effective rent per square foot
- Selected comps with a lower estimated effective rent than Edison, ordered by distance
- Counts of quantified offers, offers needing verification, and properties with no public offer

Return a downloadable CSV containing the analyzed data, distance, and selected-comp fields, along with a short summary table.

Treat the selected properties as a data-based provisional comp set. Do not build the final report yet.

The full dataset gives you a broad view of Austin’s one-bedroom rental market, but the 100 properties are not all equally relevant to Edison. A property across the city may help establish a general price benchmark without being a direct competitor.

This prompt narrows the comparison to the 11 closest properties with usable data on rent, size, and location. This gives you a practical starting point for comparing Edison with nearby alternatives. It is still a provisional comp set, so a property manager should review it and account for factors the data may not capture, such as property quality, renter profile, and each community’s positioning.

The final report therefore uses the full dataset for broader market context and the 11 selected comps for a closer look at Edison’s direct competition.

Edison Austin rental comparison summary in ChatGPT.
Edison Austin rental comparison summary in ChatGPT.

Step 5: Turn the analysis into an interactive report

You now have a clean dataset, a provisional comp set, and the calculations needed to evaluate Edison. The final step is to turn that analysis into a report that a property manager can quickly scan and explore.

You’ll use a slide format instead of a long dashboard. Each slide answers one question, moving from the recommendation to the supporting evidence and then to scenarios the reader can test.

Attach the CSV from Step 4 and use this prompt:

@Apify Build a self-contained interactive eight-slide report from the attached Austin rental data for a property manager evaluating Edison Austin.

Use code for all calculations. Use only the attached data, treat it as a point-in-time snapshot, and do not fetch or invent information.

Design:

- Show one slide per screen.
- Support on-screen buttons, arrow keys, and swipe gestures.
- Use warm pastel colors without green.
- Use large type, short titles, plain language, and minimal labels.
- Highlight Edison consistently.
- Add tooltips where useful.
- Preserve original offer text, caveats, and listing links.
- Use “estimated effective rent” consistently.
- Make the report responsive on desktop and mobile.

Slides:

1. Recommendation  
State whether Edison should hold or change its $1,445 asking rent, whether its special should remain, be clarified, or be adjusted, and the main competitive risks.

2. Rent after specials  
Use an interactive dumbbell chart to compare asking and estimated effective rent for Edison and the 11 selected comps.

3. Nearby competition  
Plot distance from Edison against estimated effective rent. Clearly identify nearby properties that cost less.

4. Test Edison’s offer  
Let readers test zero to 12 free-rent weeks while Edison’s asking rent remains $1,445. Update its estimated effective rent and rank among the 12 properties.

Formula:

estimated effective rent = asking rent × (1 − free weeks ÷ 52) − one-time credit ÷ 12

5. Rent and apartment size  
Compare average one-bedroom square footage with estimated effective rent. Highlight Edison and the selected comps.

6. Offer confidence  
Group properties into quantified offers, offers needing verification, and no public offer observed. Let readers inspect the original offer, interpreted discount, conditions, confidence, and estimated effective rent.

7. Watchlist  
Choose the three comps that deserve the most attention based on distance, effective rent, apartment size, and offer strength. Explain why each matters, recommend a data-supported next step, and link to its listing.

8. Test another property  
Let readers enter a property name, asking rent, average one-bedroom square footage, free-rent weeks, and one-time credit. Update its:

- Estimated effective rent
- Rank against the selected comps
- Austin asking-rent percentile
- Estimated effective rent per square foot
- Position on the value chart

Verify every figure and test all navigation, controls, tooltips, and links.

If ChatGPT Sites is available, create and check a reviewable version before publishing it. Return the site URL and a standalone HTML file with all data, styles, and scripts embedded.
Completed interactive Edison Austin rental report.
Completed interactive Edison Austin rental report.

What the Edison Austin report reveals

Each slide answers a different part of the pricing decision: how Edison compares after specials, which nearby properties create the most pressure, and whether changing its rent or offer would improve its position.

1. Should Edison change its rent or special?

The report recommends holding Edison’s $1,445 asking rent and clarifying the terms of its current offer. With one month free, its estimated effective rent falls to $1,325, which is $73 below the median of the selected comps.

Recommendation to hold Edison’s rent and clarify its special.
Recommendation to hold Edison’s rent and clarify its special.

2. How much do specials change the price renters see?

The dumbbell chart compares each property’s asking rent with its estimated effective rent. It shows how a property can advertise a higher rent and still become the cheaper option after utilizing its special.

Asking rent versus estimated effective rent.
Asking rent versus estimated effective rent.

3. Which nearby properties create the most pressure?

After including their advertised discounts, Carson Crossing has an estimated effective rent of $783, while Urban East falls to $815. Both are within two miles of Edison, making them the most promising nearby competitors to investigate.

Nearby properties creating the strongest competitive pressure.
Nearby properties creating the strongest competitive pressure.

4. Would a larger special improve Edison’s position?

The offer simulator shows how Edison’s estimated effective rent and position among the selected comps would change with anywhere from zero to 12 weeks free. A larger special would make Edison more competitive on price, but since it’s already below the comp median, it might not need to give away more rent.

Interactive simulator for testing Edison’s rental special.
Interactive simulator for testing Edison’s rental special.

5. Does Edison’s apartment size support its price?

Edison’s one-bedroom layouts average 931 square feet. The value chart shows that Edison compares favorably by combining larger apartments with an estimated effective rent below the median of the selected comps.

Edison’s space and price position among comps.
Edison’s space and price position among comps.

6. How much of the offer data can be trusted?

Of the 100 properties collected, 64 had offers that could be converted into estimated discounts, 19 advertised specials that still needed verification, and 17 showed no public offer. Keeping these groups separate prevents vague promotions from being treated as exact savings.

Breakdown of quantifiable and unverified rental offers.
Breakdown of quantifiable and unverified rental offers.

7. Which competitors require follow-up?

The watchlist highlights the three properties that deserve the most attention and explains why. Carson Crossing and Urban East stand out because they are close to Edison and advertise unusually large discounts. Their terms should be verified before Edison considers changing its own offer.

Three properties on Edison’s competitive watchlist.
Three properties on Edison’s competitive watchlist.

8. How would another property compare?

The final slide lets you enter another property’s rent, apartment size, free-rent period, and additional credit. It then calculates its estimated effective rent, market percentile, position among the selected comps, and rent per square foot using the same method applied to Edison.

Interactive benchmark for testing another property.
Interactive benchmark for testing another property.

Conclusion

Advertised rent rarely tells the whole story. You now have a repeatable workflow for comparing properties using the factors that shape a renter’s choice: specials, apartment size, location, and nearby alternatives.

To apply the same process to another market, create an Apify account, run the memo23/apartments-cheerio-ppe Actor through ChatGPT, and replace the Austin search URL with the market you want to study. This gives you a clearer view of how a property truly competes, not just what it advertises.

Apify logo
Largest marketplace of tools for AI
Thousands of Actors to automate your business. Get real-time web data, track competitors, generate leads, monitor social media, and integrate your apps and agents.
On this page

Publish and earn on Apify Store

The largest marketplace of tools for AI

Start here