Stessa Investment Properties Scraper - Rental Data
Pricing
from $5.00 / 1,000 property scrapeds
Stessa Investment Properties Scraper - Rental Data
Scrape Stessa's investment-property marketplace (formerly Roofstock) for 37k+ turnkey single-family listings. Extract Roofstock Neighborhood Score, rent estimate with low/high/confidence, HOA, MLS number, listing-agent contact, photo array and CBSA metro code. Daily delta feed.
Pricing
from $5.00 / 1,000 property scrapeds
Rating
0.0
(0)
Developer
Growth Installations
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape Stessa's investment-property marketplace (formerly Roofstock) for 37k+ turnkey single-family listings. Extract Roofstock Neighborhood Score, rent estimate with low/high/confidence, HOA, MLS number, listing-agent contact, photo array and CBSA metro code. Daily delta feed.
Built for single-family rental investors, turnkey rental operators, prop-tech analytics teams, buy-box advisors and syndicators, real estate agents prospecting listings by market.
What this stessa.com scraper extracts
Every run produces one row per record, with change annotations against your last snapshot, with the following fields:
- property_id (string), gridV3 identifier (URL-safe)
- internal_id (string), Numeric supply id
- address (string), Full street address, city, state, zip
- city (string)
- state (string)
- postal_code (string)
- latitude (number)
- longitude (number)
- cbsa_code (string), CBSA metro area code
- list_price (number)
- beds (integer)
- baths (number)
- sqft (integer)
- lot_size (number)
- year_built (integer)
- property_type (string)
- parking_spaces (integer)
- has_garage (boolean)
- has_pool (boolean)
- has_hoa (boolean)
- neighborhood_score (integer), Roofstock's 1-5 Neighborhood Score
- roofstock_rent (number), Roofstock's monthly rent estimate
- roofstock_rent_low (number)
- roofstock_rent_high (number)
- roofstock_rent_confidence (string), Confidence level for the rent estimate
- gross_yield (number)
- cap_rate (number)
- cash_on_cash (number)
- price_per_sqft (number)
- monthly_hoa (number)
- seller_provided_rent (number)
- seller_annual_insurance (number)
- seller_provided_tax_rate (number)
- listing_agent_name (string)
- listing_agent_phone (string)
- listing_agent_email (string)
- listing_agent_license (string)
- listing_agent_company_name (string)
- listing_agent_company_phone (string)
- listing_agent_company_email (string)
- mls_source_name (string)
- mls_source_number (string)
- mls_source_last_updated (string)
- on_market_timestamp (string)
- status (string)
- public_remarks (string), Full property description
- photos (array), Array of photo URLs (up to 40)
- listing_url (string), Canonical Stessa detail URL
- redfin_url (string)
- zillow_zpid (string)
- main_image_url (string)
Quick start
- Click Try for free.
- Leave the input at defaults, or paste the recommended input from lower on this page.
- Click Start. The default run finishes in under a minute with a small sample.
- Open the Dataset tab to inspect the shape.
- Once you like the output, click Schedule and pick a cadence. Daily is typical.
How a run works
- Scan, walks stessa.com from the seed URL, paginating through list pages.
- Fetch, visits each detail page and extracts the fields listed above.
- Diff, compares each record against the snapshot in your named key-value store, labelling it
new,changedorunchanged. - Persist, the new snapshot is saved for the next run.
What is a delta feed and why does it save money?
A delta feed only pays for what changed since your last run. Instead of re-scraping every record each night, this scraper compares against your stored snapshot and only fully processes rows that added, changed or first appeared. Enable onlyChanged to skip unchanged rows entirely (they are billed at a discounted rate).
What differentiates this scraper?
Roofstock merged into Stessa in 2025. This scraper is the only way to programmatically access Roofstock's proprietary Neighborhood Score (1-5) and Roofstock rent estimate (with low/high/confidence range) alongside standard MLS listing data, HOA cost, listing agent contact (respecting the source's display flags), full photo array of up to 40 images, Zillow ZPID and Redfin URL cross-links. No MLS aggregator publishes the Roofstock proprietary fields; no Stessa-native scraper exists.
Common use cases
- Weekly buy-box screening across 40+ US markets, filtered by yield, Neighborhood Score, or price band
- Price-change and cap-rate drift tracking on a daily schedule
- New-listing alerts filtered by CBSA metro or rent estimate
- Listing-agent prospecting lists (with display-flag compliance)
- Photo enrichment for underwriting and comparable analysis
How to interpret the fields
What does Neighborhood Score mean?
Stessa's proprietary 1-5 rating for the block group the property sits in. Weights demographics, school quality, rental demand and crime data. A 4 or 5 typically means investor-friendly (stable rents, high tenant retention). A 1 or 2 flags markets with volatile occupancy or elevated eviction risk. Use as a first-pass buy-box filter; not a fair-lending signal.
What does Gross yield mean?
Annual rent divided by purchase price, expressed as a decimal (0.077 means 7.7%). Ignores expenses and financing. A quick "how much rent does this asset produce" ratio. Compare across markets before diving into full pro-forma.
What does Cap rate mean?
Net operating income divided by purchase price. Accounts for taxes, insurance, HOA, PM, vacancy and repairs but not mortgage. Investors typically want 5%+ cap rate on Stessa-class SFR turnkey; sub-3% often signals overpriced-for-cashflow (or high-appreciation market).
What does Cash on cash mean?
Year-1 cash flow divided by cash invested (down payment + closing). Includes mortgage. A leveraged buyer's most-cited metric. Negative means the property loses money year one; positive means it pays for itself.
What does Rent estimate (low / high / confidence) mean?
Stessa's automated valuation model for monthly rent, with a range and a confidence level (Low, Medium, High). Low-confidence estimates typically mean sparse comps for the block group. Verify against the sale/rent comps tables when confidence is Low.
How this compares to alternative scrapers
Stessa scraper vs Zillow scraper
Every record from this actor includes zillow_zpid. Pass those ZPIDs into a Zillow scraper to cross-check Stessa's rent estimate against Zillow's Rent Zestimate. Zillow does not publish Neighborhood Score or cap rate; Stessa does not publish Zestimate. Use both together for triangulated valuation.
Stessa scraper vs Redfin scraper
Every record from this actor includes redfin_url. Redfin's public property pages publish Redfin Estimate (AVM), price history, walk/transit/bike scores and full school breakdowns. Stessa does not. Feed the redfin_url list into a Redfin scraper for those enrichments.
Stessa scraper vs the MLS export
Direct MLS access requires broker credentials, quotas and NDAs. This scraper is public-marketplace-only, which means no MLS agreement is required, but also that some fields (like historical sold archives) are not exposed. For volume MLS access, IDX or RETS feeds via a broker are the alternative.
How much does it cost to scrape stessa.com?
Pay-per-event pricing:
- Actor start: $0.00500 per GB of memory, one event per run.
- Property scraped: $0.00800 per record delivered to the dataset.
- Property checked, unchanged: $0.00150 per row when
onlyChangedis on and the row was unchanged. Roughly 19% the cost of a full record.
There are no per-request charges and no page-count charges. Costs come only from records you actually receive. A scheduled monitor in delta mode typically costs cents per day; a first-time full crawl is the expensive case that the delta model is designed to avoid on subsequent runs.
Concrete cost examples
Rule-of-thumb cost per run (assumes primary event only, no delta discount):
- 100 records = about $0.80 in records + one actor-start fee
- 500 records = about $4.00
- 1,000 records = about $8.00
- 10,000 records = about $80.00
With delta mode + onlyChanged: true, a daily monitor of 1,000 properties where 5% change costs roughly $1.83 per run (50 full charges + 950 delta-priced skips).
Common questions
Does this scraper need a Stessa account?
No. All listing data is scraped from public marketplace pages at stessa.com/investment-properties. You do not need credentials.
Is scraping Stessa legal?
Reading public marketplace pages that are not gated behind login and respecting robots.txt is broadly permitted. Stessa's robots.txt allows /investment-properties. Listing agent contact fields are additionally gated by each MLS source's per-field display flags, which this scraper respects. You are responsible for downstream compliance (TCPA, CAN-SPAM, state privacy laws) when using agent contact data.
Why does the actor say 'Roofstock' if this is a Stessa scraper?
Roofstock acquired / merged into Stessa in 2025 and the marketplace is now served under stessa.com. Same inventory, same fields, new URL. The actor name is Stessa-first because that is where the data lives today.
What is the Stessa marketplace inventory count?
Over 1 million listings across 40+ US metros as of last snapshot. Includes active for-sale properties across single-family, condo, townhouse, and multi-family.
What is a Neighborhood Score?
Stessa (formerly Roofstock) proprietary 1-5 rating for the block group the property sits in. Weights demographics, school quality, and rental demand. Preserved in the merger. Only on Stessa, no other MLS aggregator returns it.
What is the rent estimate?
A Stessa-computed monthly rent for the property, with a low/high range and a confidence level (Low, Medium, High). Field name in the API response is roofstockRent (legacy). Separate from seller-provided rent (which is disclosed if the current owner has a tenant).
Can I use this data for underwriting?
Yes. Enable includeInvestmentCalc to also get Stessa's full year-1 pro-forma (mortgage, insurance, tax, HOA, PM, leasing, vacancy, repairs, NOI, net cash flow) per property. Combined with base fields you have a complete underwriting-input row.
How does this compare to a Zillow or Redfin scraper?
Every record includes zillow_zpid and redfin_url. Use those as join keys to feed into the companion Zillow or Redfin enrichment scrapers for cross-source AVM comparison. Only Stessa returns Neighborhood Score and Roofstock rent estimate.
Can I filter by CBSA metro area?
Yes. The scraper returns the CBSA code per property. Filter downstream to isolate a metro. Stessa covers 40+ US markets.
Is listing agent contact info always included?
Only when the MLS source's display flags permit. Each MLS has different rules on whether agent name, phone, email, license can be republished. This scraper respects those flags and blanks out fields the source forbids.
How much does it cost to scrape 1000 Stessa properties?
See the cost examples section below. Base scrape (no comps, no calc, no photos) is about $8 per 1,000 records. With includeInvestmentCalc enabled it is closer to $20 per 1,000.
Does this scraper need an account with stessa.com?
No. The scraper reads only public pages. You do not need credentials.
Why do I need to enable Apify Proxy?
Most sites at scale trigger rate limits or challenges against datacenter IPs. Apify Proxy (residential recommended) handles this. The default input keeps useApifyProxy: true.
Why does the state store need a name?
Delta mode compares each run against the previous snapshot. Apify wipes the default (unnamed) key-value store on every run, which would erase the snapshot. A NAMED store (stateStoreName: "stessa-scraper-state") persists across runs.
Can I run in delta mode without paying for unchanged rows?
Yes. Set onlyChanged: true. Unchanged rows are billed at the discounted record-checked rate; changed rows at the full property rate. New rows are always full price.
Recommended daily-schedule input
{"maxItems": 3,"onlyChanged": false,"useApifyProxy": true,"proxyConfiguration": {"useApifyProxy": true}}
For a full-catalogue first run, raise maxItems to 0 (no cap) and leave onlyChanged: false. For daily monitoring, set onlyChanged: true and keep maxItems at 0.
Turn it into a live alert with Schedules and Webhooks
Combine this scraper with an Apify Schedule and a Webhook to get "new listing in my buy box" alerts without writing code.
- Configure the input with your buy-box filters (yield floor, price ceiling, markets, etc).
- Create a Schedule (Actor page, right rail, Schedule) at your cadence. Daily 06:00 UTC is typical.
- Add a Webhook (Integrations tab on this actor):
- Event:
ACTOR.RUN.SUCCEEDED - URL: your Slack / Discord / Zapier / n8n endpoint
- Payload template: pass
resource.defaultDatasetIdso the receiver can pull only the delta rows
- Event:
For Slack, wrap the payload in a text field and push through an incoming webhook. For Zapier or n8n, use the "Webhook by Apify" trigger and map dataset fields to your downstream tool of choice.
Pair this with onlyChanged: true and the actor becomes a pure alert feed. Delta-priced rows keep the bill flat on quiet days.
Related scrapers from this publisher
See other actors under growth-installations for related consumer-intelligence scrapers.
Video walkthrough
Video walkthrough placeholder. Add a YouTube URL to readme.video_url in the yaml to auto-embed once one is published.
Notes and limits
- Keep concurrency modest to stay polite to stessa.com. Default is 5.
- Field schemas can shift when the target site restyles. If a field starts returning
null, report it and it will be patched. - The default input is engineered to complete in under 5 minutes so the platform's daily automated test passes and the actor does not get flagged for maintenance.
Legal
This actor reads only public marketplace pages, with no circumvention of access controls. Stessa's robots.txt permits crawling of /investment-properties. Listing agent contact fields are gated by each MLS source's display flags and are blanked when the source forbids republication. You are responsible for compliance with applicable law, MLS terms of service, and any downstream do-not-contact regulations (TCPA, CAN-SPAM, state privacy laws) when using agent contact data.