Auction.com Scraper - Foreclosures, Auctions & Property Data
Pricing
from $1.00 / 1,000 results
Auction.com Scraper - Foreclosures, Auctions & Property Data
From $1/1K. Extract foreclosure, REO, short-sale, and auction listings from Auction.com in minutes. Search by location and property filters or paste any Auction.com URL. Get 45+ structured fields, including auction dates, bids, estimated values, occupancy status, coordinates, and photos.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
5
Monthly active users
20 hours ago
Last modified
Categories
Share
Auction.com Scraper: Foreclosure, Bank-Owned and Private-Seller Auction Listings
Auction.com Scraper turns Auction.com into structured real estate auction data. Search foreclosure, bank-owned, short-sale and private-seller listings by state, city, ZIP, property type, asset type, beds, baths, square footage, price and auction format, or paste one or more Auction.com search links straight from the site. Every listing comes back with dozens of structured fields including auction dates, starting bid, valuation estimates, occupancy and photos, and you can export to JSON, CSV or Excel, or pull results straight into your app through the API.
Why This Scraper?
- Two ways to build a search. Filter by state, city, ZIP, property type, asset type, beds, baths, square footage, price and auction format, or paste one or more Auction.com search links and reuse work you already did on the site.
- A wide field set per listing. Address, coordinates, property facts, auction window, starting bid, valuation and rental estimates, occupancy, financing and buyer-premium flags, plus the complete source object under
rawfor anything not surfaced flat. - Optional full-detail pass. Turn on
fetchDetailsfor the complete photo gallery, financing preference, deposit and earnest-money minimums, leaseback terms and days-to-close per listing, billed only for listings that actually come back, not for every candidate checked. A pasted single-listing detail link always fetches full detail, regardless of this setting. - Resumable runs.
resumeFromRunIdcollects only the listings a previous run doesn't already have, so you can pick up where an earlier run left off without paying twice. Long runs also checkpoint their own progress, so a platform migration never restarts a run from zero. - Built for schedules. Incremental mode remembers the previous run of the same search itself, so a recurring daily or weekly run returns only new and updated listings, and duplicates are suppressed and not billed.
- One input controls volume.
maxListingsis the sole cap on how many listings a run collects. Page walking itself has no artificial ceiling, so a capped run still sees the most relevant part of the catalogue first. - Multi-state and multi-URL in one run, with automatic de-duplication across searches.
Use Cases
- Real estate investors: filter foreclosure and bank-owned inventory by state, price range and property type to build a shortlist of deals.
- Wholesalers and flippers: run the same search on a schedule with incremental mode to catch new listings and price or status changes as soon as they post.
- Market researchers and analysts: build historical datasets of starting bids, valuation estimates and auction outcomes across states and asset types.
- PropTech and lead-gen products: feed structured auction listings into your own app, CRM or alerting tool through the API.
- Due diligence teams: pull full auction terms, financing preference and occupancy details for a shortlist of properties with
fetchDetails.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
listingId | "00000001" |
url | "https://www.auction.com/details/123-sample-st-city-st-00000001" |
address | "123 Sample St, Springfield, ST 00000" |
city / state / zip | "Springfield" / "ST" / "00000" |
county | "Sample County" |
latitude / longitude | 38.0000 / -90.0000 |
propertyTypeGroup | "SINGLE_FAMILY" |
assetType | "BANK_OWNED" |
listingStatusGroup | "ACTIVE" |
bedrooms / bathrooms | 3 / 2 |
squareFootage | 1800 |
lotSize | 0.25 |
yearBuilt | 1995 |
startingBid | 150000 |
estimatedValue | 225000 (valuation estimate) |
rentalEstimate | 1800 (monthly rent estimate) |
auctionType | "ONLINE" |
auctionStartDate / auctionEndDate | "2026-01-01T00:00:00Z" / "2026-01-03T00:00:00Z" |
occupancyStatus | "VACANT" |
financingAvailable / buyerPremiumAvailable | true / false |
isRemoteBidEnabled | true |
primaryPhoto / photoCount | a photo URL / 12 |
raw | the complete source listing object |
Every record also carries marketing tags, open house dates, trustee-sale and financing-broker flags, valuation bands (low/high) and an isHot marker, and the fields above cover only the flat, top-level view. When fetchDetails is on, each listing additionally gets a full photo array, financing preference, inspection and leaseback terms, days-to-close, earnest-money deposit minimum and the raw detail payload under detailRaw. When incremental mode is on, every returned record also carries changeType, changedFields, firstSeenAt and lastSeenAt (see "Resume and recurring updates" below).
How to Use
- Pick a mode:
search(build a query from filters) orurl(paste one or more Auction.com search links). - Fill in the filters for search mode (state, city, ZIP, property type, asset type, beds, baths, square footage, price), or paste your links for URL mode.
- Turn on
fetchDetailsif you want full auction terms per listing, and set Max listings to control run size and cost. - Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search a single state for active listings:
{"mode": "search","states": ["CA"],"listingStatus": "active","maxListings": 200}
Filtered search across two states (condos and townhouses, 3+ beds, under 300k):
{"mode": "search","states": ["TX", "FL"],"propertyTypes": ["condos-townhouses"],"minBeds": 3,"maxPrice": 300000,"sortBy": "price-asc","maxListings": 500}
Bank-owned, online auctions, with full details:
{"mode": "search","states": ["GA"],"assetTypes": ["bank-owned"],"auctionFormats": ["online"],"fetchDetails": true,"maxListings": 100}
Paste Auction.com links (apply filters on the website, then copy the link):
{"mode": "url","urls": ["https://www.auction.com/residential/CA/active_lt/single-family_pt","https://www.auction.com/residential/TX/active_lt"],"maxPages": 3}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/auction-com-scraper").call(run_input={"mode": "search", "states": ["CA"], "maxListings": 100})for listing in client.dataset(run["defaultDatasetId"]).iterate_items():print(listing["address"], listing["startingBid"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/auction-com-scraper').call({ mode: 'search', states: ['CA'], maxListings: 100 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Max pages and Max listings
maxPages bounds how many result pages (100 listings per page) a search walks. Left at its default of 0, it walks the whole catalogue: the run stops on its own once the site's own reported total is reached, a page comes back empty, or a page returns no listing that wasn't already collected. There is no artificial page-number ceiling. maxListings (default 20) is the only cap on how many listings a run actually collects; set it to 0 for no limit. The two are independent: a small maxPages can still stop a run before maxListings is reached, and vice versa.
Resume and recurring updates
There are two different things here, and they solve different problems.
Resume (resumeFromRunId) continues one specific earlier run: paste its run id or dataset id and this run skips every listing already collected there, returning only the remaining new listings. Combine both datasets afterward for the full set. A separate, automatic checkpoint also protects long unlimited runs against a platform migration, resuming the same run from where it stopped without any input needed.
Incremental mode (incrementalMode) is for running the exact same search again and again, for example daily from the Schedules tab. The actor remembers the previous run of that search itself, keyed by a hash of your filters (or by stateKey if you set one), so you never paste a run id. The first run returns everything as NEW. Every later run returns NEW listings, and UPDATED listings with changedFields naming what changed (price, status, auction date, occupancy, and so on). Listings that are unchanged are suppressed and not billed unless you turn on emitUnchanged.
REAPPEARED and EXPIRED are a separate pair, and neither shows up under default settings. EXPIRED is only produced when emitExpired is on and the run fully scans the tracked search: not capped by Max listings or Max pages, not a Resume run, and not interrupted by a platform checkpoint. A listing only becomes eligible to reappear after it has actually been marked EXPIRED this way; if you never turn on emitExpired, a listing that temporarily disappears and comes back later is simply classified as UNCHANGED or UPDATED next time, never REAPPEARED. Turn on emitExpired deliberately if you want that history tracked, and be aware it also returns (and bills) the extra tombstone rows.
Using resumeFromRunId together with incrementalMode for a search that already has saved incremental state stops the run with an error, since the two features would otherwise double-count the same listings; remove one of them or pick a different stateKey to start a separate campaign.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each listing, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (use filters) or url (paste links). |
states | array | none (prefill: ["CA"]) | Two-letter US state codes. Leave empty to search nationwide. |
city | string | (none) | Optional city name to narrow the search. |
zipCodes | array | (none) | Optional 5-digit ZIP codes. |
keyword | string | (none) | Free-text search across street, city, state and ZIP. |
listingStatus | string | active | active (open for bidding) or sold (closed). |
propertyTypes | array | (none, all types) | single-family, condos-townhouses, multi-family, land. |
assetTypes | array | (none, all types) | bank-owned, foreclosures, short-sales, private-seller. |
auctionFormats | array | (none, all formats) | online, in-person, remote-bid. |
minBeds | integer | (none) | Minimum bedrooms. |
maxBeds | integer | (none) | Maximum bedrooms. |
minBaths | integer | (none) | Minimum bathrooms. |
minSqft | integer | (none) | Minimum living area in square feet. |
maxSqft | integer | (none) | Maximum living area in square feet. |
minPrice | integer | (none) | Minimum starting bid in USD. |
maxPrice | integer | (none) | Maximum starting bid in USD. |
sortBy | string | default | Result ordering. |
urls | array | none (prefill: one sample link) | Auction.com search links (URL mode). |
fetchDetails | boolean | false | Fetch the full photo gallery and auction terms per listing. |
maxPages | integer | 0 | Bound on result pages walked per search/link (100 listings per page). 0 walks the whole catalogue and stops on its own; does not cap listing count. |
maxListings | integer | 20 | The sole cap on total listings collected (max 1,000,000). 0 means unlimited. |
resumeFromRunId | string | (none) | ID of a previous run (or dataset) of this actor. Listings already there are skipped. |
incrementalMode | boolean | false | Turn on for recurring monitoring of the same search. |
stateKey | string | (none) | Optional name for a monitoring campaign, or to share state across runs. |
emitUnchanged | boolean | false | Also return (and bill) listings unchanged since the last run. |
emitExpired | boolean | false | Also return (and bill) listings no longer found, once a run fully scans the tracked search. |
proxy | object | Apify datacenter proxy | Connection settings. |
mcpConnectors | array | (none) | Optional: send a summary of each listing to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which items are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"listingId": "00000001","url": "https://www.auction.com/details/123-sample-st-springfield-st-00000001","address": "123 Sample St, Springfield, ST 00000","city": "Springfield","state": "ST","zip": "00000","county": "Sample County","latitude": 38.0,"longitude": -90.0,"propertyTypeGroup": "SINGLE_FAMILY","assetType": "BANK_OWNED","occupancyStatus": "VACANT","listingStatusGroup": "ACTIVE","isHot": false,"bedrooms": 3,"bathrooms": 2,"squareFootage": 1800,"lotSize": 0.25,"yearBuilt": 1995,"startingBid": 150000,"estimatedValue": 225000,"estimatedValueLow": 210000,"estimatedValueHigh": 240000,"auctionType": "ONLINE","auctionStartDate": "2026-01-01T00:00:00Z","auctionEndDate": "2026-01-03T00:00:00Z","financingAvailable": true,"buyerPremiumAvailable": false,"isRemoteBidEnabled": true,"primaryPhoto": "https://example.com/sample-property-photo.jpg","photoCount": 12,"marketingTags": [],"openHouses": [],"scrapedAt": "2026-01-01T00:00:00Z"}
Plan Requirement
This scraper runs on the default Apify datacenter proxy connection and works out of the box for most searches. For large or frequent runs, the residential proxy group gives more headroom against occasional connection failures; pick it under Connection. Turning on fetchDetails adds one extra request per listing, billed only for listings that are actually returned, never for a candidate that gets checked and then suppressed. A pasted single-listing detail link always fetches and bills this extra request, whatever fetchDetails is set to.
FAQ
How much does it cost?
You pay per listing returned, and the detail-enrichment charge is billed only for listings that actually come back in the dataset with detail fetched: search-mode or listing-URL results when Fetch listing details is on, and a pasted single-listing detail link always, since that always fetches full detail regardless of that setting. The Pricing tab shows the current rates. Use Max listings to cap the cost of any run.
Is it legal to scrape Auction.com?
This actor collects only publicly available auction listing data. You are responsible for how you use it: follow Auction.com's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing facts such as price, dates and property details are generally factual, but photos may be subject to third-party rights.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Every run after the first then returns only new and updated listings, and unchanged ones are suppressed and not billed. See "Resume and recurring updates" above for exactly when REAPPEARED and EXPIRED show up, since both need emitExpired turned on ahead of time.
What's the difference between Resume and Incremental mode?
Resume (resumeFromRunId) continues one specific earlier run and is a one-time delta. Incremental mode is for running the same search over and over, for example daily, and tracks its own state without you ever pasting a run id. Using both together on a search that already has saved incremental state is rejected, since it would double-count listings.
Why did my run fail instead of returning an empty dataset?
A run only stops with an error when resumeFromRunId points at an id this account cannot read, or when it is combined with Incremental mode on a search that already has saved state. Everything else, including a search that matches no listings or an upstream request that could not be completed, finishes as a normal run; if nothing was returned, the status message says why, and the run log shows any page that could not be loaded. Try again if it points at a temporary connection issue.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each listing into Notion, Linear or Airtable.
🔗 Want more real estate data?
Pair this actor with these related scrapers from the same team:
| 📇 BizQuest Scraper From $1/1K. Extract business-for-sale, franchise, and asset listings from BizQuest... | 💼 Jobsite UK From $1/1K. Collect UK job listings from Jobsite.co.uk at scale. Search by keyword... |
| 🏨 Caterer.com Scraper Scrape UK hospitality jobs from Caterer.com, including chef, hotel, restaurant, bar, and... | 🛒 Depop Scraper From $1/1K. Scrape Depop search results, listings, shops, and reviews to JSON, CSV, or... |
| 🧩 Propwire Scraper Scrape Propwire.com: 157M+ US MLS & off-market properties with owner names, mailing... | 📱 Clutch Scraper Scrape Clutch company directories and profiles. Get names, ratings, review counts, hourly... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.