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.

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.

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
Apifyand add a short description. - Under Connection, enter
https://mcp.apify.comas 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.


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.

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:
moreResultstells the Actor to continue beyond the first page of results.maxItemslimits 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.
A 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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.