Foreclosed Property Scraper (Cheap)
Pricing
from $3.99 / 1,000 results
Foreclosed Property Scraper (Cheap)
Foreclosed properties list tool that extracts distressed real estate inventory across the US, giving investors direct access to off-market and foreclosure deals.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Data API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Foreclosed Property Scraper

Finding foreclosures the hard way means paying a monthly fee to some niche real estate portal or digging through county records by hand. This scraper skips all of that. Tell it a ZIP code or a state and it pulls back the homes currently in foreclosure (or recently sold off) as clean, structured rows: asking price, full street address, beds and baths, square footage, agent contacts, coordinates, photos, and more. One run gives you a foreclosure dataset you can drop straight into a spreadsheet or a model.
What you get
Every property comes back as one flat row, so the columns line up when you load results into a sheet or database. The fields fall into a few groups:
- Identity and status —
propertyId,listingId,listingSlug,listingStatus,isForeclosure, plus lifecycle flags likeisPending,isContingent,isAuction,isNewListing,isPriceReduced - Price and dates —
askingPrice,salePrice,priceCutAmount,listedDate,soldDate - Property details —
propertyKind,propertySubKind,bedroomCount,bathroomCount,interiorSqft,lotSqft,yearBuilt,garageSpaces,hasMatterport - Location —
streetAddress,cityName,stateName,stateCode,postalCode,lat,lng,countyName,countyFips,streetViewUrl - Media —
coverPhotoUrl,photoCount,photoLinks - Agents and source —
primaryAgentName,primaryAgentEmail,primaryAgentPhones,secondaryAgentName,brandingName,sourceName,openHouses
Quick start
- Press Try for free to open the input form.
- Type a location into at least one of ZIP code, City, or State abbreviation.
- Add any filters you want, such as price range, bedroom count, or property type.
- Set a Total listings cap to control spend, pick a proxy, then press Start.
- When the run finishes, export the data as JSON, CSV, Excel, or XML.

Use cases
- Wholesaling — pull a fresh foreclosure list for one ZIP code and reach out to distressed sellers first
- Comparable sales — export recently sold foreclosures to build a market analysis without retyping anything
- Lead generation — collect listing agent names, emails, and phone numbers for bank-owned homes
- Market monitoring — schedule a daily run to catch new foreclosures the moment they hit your target areas
- Investment screening — filter by price, beds, square footage, and year built to shortlist deals that fit your model
Input
| Field | Type | Required | Description |
|---|---|---|---|
postalCode | string | One of postalCode, cityName, stateCode, or addressLine | Single 5-digit US ZIP code, the tightest location filter. Example 33139. |
stateCode | string | One of postalCode, cityName, stateCode, or addressLine | Two-letter US state code, best paired with another filter. Prefilled FL. |
cityName | string | One of postalCode, cityName, stateCode, or addressLine | Exact city name; pair with stateCode for clean results. Prefilled Miami. |
streetName | string | Optional | Limit results to homes on one named street, e.g. Ocean Drive. |
addressLine | string | Optional | One precise street address line. |
propertyTypes | array of strings | No | Keep only chosen property categories, e.g. single_family, condo. |
featureKeywords | array of strings | No | Filter by amenities such as pool, waterfront, central_air. |
bedsMin / bedsMax | integer | No | Lowest and highest bedroom counts to allow. |
bathsMin / bathsMax | integer | No | Lowest and highest bathroom counts to allow. |
listPriceMin / listPriceMax | integer | No | Asking price range in USD. |
soldPriceMin / soldPriceMax | integer | No | Sold price range in USD. |
soldDateFrom / soldDateTo | string | No | Closed-sale date window, written YYYY-MM-DD. |
sqftMin / sqftMax | integer | No | Interior living area range in square feet. |
lotSqftMin / lotSqftMax | integer | No | Lot size range in square feet. |
yearBuiltFrom / yearBuiltTo | integer | No | Construction year range. |
hoaFeeMax | integer | No | Largest monthly HOA fee to allow. |
excludeHoa | boolean | No | Return only homes with no HOA fee. Default false. |
openHouseFrom / openHouseTo | string | No | Open-house date window, written YYYY-MM-DD. |
pageSize | integer | No | Listings fetched per request. Default 150. |
startOffset | integer | No | Position where pagination begins. Default 0. |
resultsLimit | integer | No | Hard cap on total listings collected. Default 3000. |
runTimeoutSeconds | integer | No | Whole-run time budget in seconds. Default 360. |
requestTimeoutSeconds | integer | No | Per-request time budget in seconds. Default 45. |
proxyConfiguration | object | No | Proxies used for requests. Defaults to US datacenter. |
Example input
{"stateCode": "FL","cityName": "Miami","propertyTypes": ["single_family", "multi_family"],"listPriceMax": 750000,"bedsMin": 2,"resultsLimit": 200,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyCountry": "US"}}
Output
Each foreclosed home becomes one flat JSON row. Every declared field is present on a normal row, and unavailable values come back as null or empty so your dataset stays rectangular.
Example output
{"listingAttribution": true,"propertyId": "9482736150","listingId": "2967451308","listingSlug": "742-Evergreen-Ter_Miami_FL_33139_M94827-36150","listingStatus": "for_sale","askingPrice": 389000,"salePrice": null,"priceCutAmount": 15000,"listedDate": "2026-05-18","soldDate": "","propertyKind": "single_family","propertySubKind": "","bedroomCount": 3,"bathroomCount": "2","interiorSqft": 1640,"lotSqft": 5200,"yearBuilt": 1998,"garageSpaces": 2,"streetAddress": "742 Evergreen Terrace","cityName": "Miami","stateName": "Florida","stateCode": "FL","postalCode": "33139","lat": 25.7907,"lng": -80.1300,"countyName": "Miami-Dade County","countyFips": "12086","streetViewUrl": "https://maps.googleapis.com/maps/api/streetview?location=25.7907,-80.1300","coverPhotoUrl": "https://ap.rdcpix.com/example/cover-2x.jpg","photoCount": 24,"photoLinks": ["https://ap.rdcpix.com/example/photo-1.jpg","https://ap.rdcpix.com/example/photo-2.jpg"],"hasMatterport": false,"isComingSoon": false,"isNewListing": true,"isPriceReduced": true,"isForeclosure": true,"isNewConstruction": false,"isPending": false,"isContingent": false,"isAuction": false,"isFractionallyOwned": false,"sourceId": "MIAMI","sourceName": "Miami Association of Realtors","sourceType": "mls","sourceListingId": "A11234567","showContactAgent": true,"marketType": "for_sale","leadType": "advantage","isVaEligible": false,"productList": ["co_broke"],"productBrandName": "essentials","primaryAgentType": "seller","primaryAgentName": "Maria Alvarez","primaryAgentEmail": "maria.alvarez@example.com","primaryAgentOffice": "Coastal Realty Group","primaryAgentPhones": ["3055550142"],"secondaryAgentType": null,"secondaryAgentName": null,"secondaryAgentEmail": null,"secondaryAgentOffice": null,"secondaryAgentPhones": [],"brandingName": "Coastal Realty Group","searchPromotions": [],"communityPromotions": [],"openHouses": [{"start_date": "2026-06-07T17:00:00Z","end_date": "2026-06-07T20:00:00Z","description": "Saturday open house","time_zone": "America/New_York"}],"collectedAt": "2026-06-29T12:00:00.000000+00:00","errorMessage": null}
Output fields
| Field | Type | Description |
|---|---|---|
listingAttribution | boolean | Source attribution flag from the listing feed |
propertyId | string | Stable internal identifier for the property |
listingId | string | Identifier of the specific listing |
listingSlug | string | URL slug for the listing |
listingStatus | string | Current state, such as for_sale or sold |
askingPrice | integer | Current listed asking price in USD |
salePrice | integer | Final closing price in USD, on sold homes only |
priceCutAmount | integer | How far the asking price has been reduced, in USD |
listedDate | string | ISO 8601 date the listing went live |
soldDate | string | ISO 8601 date the sale closed, when applicable |
propertyKind | string | Top-level property type, e.g. single_family |
propertySubKind | string | Finer property classification |
bedroomCount | integer | Number of bedrooms |
bathroomCount | string | Consolidated bathroom count |
interiorSqft | integer | Interior living area in square feet |
lotSqft | integer | Outdoor lot size in square feet |
yearBuilt | integer | Year the home was built |
garageSpaces | integer | Number of garage spaces |
streetAddress | string | Full street address line |
cityName | string | City the property sits in |
stateName | string | Full state name |
stateCode | string | Two-letter US state code |
postalCode | string | ZIP or postal code |
lat | number | Latitude of the property |
lng | number | Longitude of the property |
countyName | string | County the property falls under |
countyFips | string | County FIPS code |
streetViewUrl | string | Link to a street-level map preview |
coverPhotoUrl | string | Direct link to the headline photo |
photoCount | integer | How many photos accompany the listing |
photoLinks | array | Direct image URLs for the property |
hasMatterport | boolean | True when a Matterport 3D tour is attached |
isComingSoon | boolean | True when marked coming soon |
isNewListing | boolean | True when flagged as a new listing |
isPriceReduced | boolean | True when the price recently dropped |
isForeclosure | boolean | True for active foreclosure listings |
isNewConstruction | boolean | True when newly built |
isPending | boolean | True when the sale is pending |
isContingent | boolean | True when the sale is contingent |
isAuction | boolean | True when sold at auction |
isFractionallyOwned | boolean | True when ownership is fractional |
sourceId | string | Identifier of the originating feed |
sourceName | string | Name of the originating feed, e.g. the local MLS |
sourceType | string | Type of the originating feed |
sourceListingId | string | Listing ID in the source feed |
showContactAgent | boolean | Whether a contact-an-agent action is offered |
marketType | string | Lead market classification |
leadType | string | Lead type for the listing |
isVaEligible | boolean | True when flagged Veterans United eligible |
productList | array | Distribution products attached to the listing |
productBrandName | string | Brand name tied to the products |
primaryAgentType | string | Type of the primary representative |
primaryAgentName | string | Name of the primary representative |
primaryAgentEmail | string | Email for the primary representative |
primaryAgentOffice | string | Office handling the primary representative |
primaryAgentPhones | array | Phone numbers for the primary representative |
secondaryAgentType | string | Type of the secondary representative |
secondaryAgentName | string | Name of the secondary representative |
secondaryAgentEmail | string | Email for the secondary representative |
secondaryAgentOffice | string | Office handling the secondary representative |
secondaryAgentPhones | array | Phone numbers for the secondary representative |
brandingName | string | Affiliated agent branding label |
searchPromotions | array | Search-level promotions attached to the listing |
communityPromotions | array | Community-level promotions attached to the listing |
openHouses | array | Scheduled open house entries with times and notes |
collectedAt | string | ISO 8601 timestamp of when the row was captured |
errorMessage | string | Reason a row failed; null on success |
Tips for best results
- Always set a location. Give the scraper at least one of
postalCode,cityName,stateCode, oraddressLine, or it has nothing to search against. - Start small. Drop
resultsLimitto 50 or so on your first run to confirm the fields match your pipeline before pulling thousands. - Combine
cityNamewithstateCode. A city on its own can match across several states; pairing the two keeps results tight. - Switch proxy tiers if requests start failing. US datacenter clears most runs; move to residential if you hit repeated errors.
- Raise
requestTimeoutSecondstoward 60 to 90 on slower proxies, and giverunTimeoutSecondsmore headroom for large states. - Use the sold-date filters for comps. Set
soldDateFromandsoldDateToto gather recently closed foreclosures for a market analysis.
How can I use foreclosure property data?
How can I use the Foreclosed Property Scraper to build a wholesaling lead list?
Enter a target ZIP code or city and the scraper returns every active foreclosure there, each with the street address, asking price, beds and baths, and the listing agent's name, email, and phone. Sort by priceCutAmount or listedDate to surface motivated sellers, then export the rows straight into your CRM.
How can I find recently sold foreclosures for a comparable market analysis?
Set soldDateFrom and soldDateTo to the window you want and the scraper pulls closed foreclosure sales with salePrice, interiorSqft, yearBuilt, and location fields. Group the results by neighborhood or ZIP to price your own offers against what actually traded.
How can I scrape bank-owned home listings across a whole state?
Pass a stateCode such as FL, raise resultsLimit, and the scraper paginates through the available inventory and hands back one row per home. Filter by propertyTypes, price range, or bedroom count to keep only the distressed deals that match your buy box.
How can I monitor new foreclosures automatically?
Save your filters and schedule the run on Apify to repeat daily. Each run captures collectedAt and the lifecycle flags like isNewListing and isForeclosure, so you can diff against yesterday's dataset and flag fresh distressed listings as they appear.
Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Support
Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.