LandWatch $1๐Ÿ’ฐ Land, Farm & Ranch Property Listings avatar

LandWatch $1๐Ÿ’ฐ Land, Farm & Ranch Property Listings

Pricing

from $1.00 / 1,000 listing results

Go to Apify Store
LandWatch $1๐Ÿ’ฐ Land, Farm & Ranch Property Listings

LandWatch $1๐Ÿ’ฐ Land, Farm & Ranch Property Listings

From $1/1k. Scrape land, farm, ranch, and rural property listings from LandWatch.com. Search by location, price, acreage filters, or URLs. Returns price, acreage, coordinates, description, amenities, price history, photos, seller name, phone, company, and 90+ fields.

Pricing

from $1.00 / 1,000 listing results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Share

LandWatch Scraper

Extract land, farm, ranch, and rural property listings from landwatch.com at scale. Search by location with price and acreage filters, or paste listing and search URLs, and get a clean structured record for every property: price, acreage, price-per-acre, coordinates, full description, amenities, price history, photo URLs, plus seller name, phone, email, and company. 90+ fields per listing and low cost on every plan.

Why This Scraper?

  • 90+ fields per listing including the full property description, every amenity, complete price history, and all photo URLs, not just a summary card.
  • Seller contact details on each listing: name, phone, email, license number, and company, when published by the listing.
  • Two ways to collect listings: search by location with filters, or paste exact listing/search URLs.
  • Powerful filters for price range, acreage range, bedrooms, property type, and whether a home is included.
  • Geo coordinates (latitude/longitude) on every listing for mapping and analysis.
  • Low cost on the default connection settings, returning 25 listings per result page.
  • Resilient by design with a configurable traffic budget and automatic recovery on connection errors.

Data You Get

Each listing is one dataset record. The table below shows a representative subset (the full record carries 90+ fields).

FieldExample
id26000000
title40 Acre Hill Country Ranch
urlhttps://www.landwatch.com/sample-county-texas-land-for-sale/pid/400000000
price750000
priceDisplay$750,000
acres40
acresDisplay40 Acres
pricePerAcre18750
citySample City
countySample County
stateTexas
stateAbbreviationTX
zip78000
latitude30.2672
longitude-97.7431
propertyTypesLabelFarms and Ranches, House
beds3
baths2
hasHousetrue
descriptionTextBeautiful 40-acre ranch with rolling pasture, a stocked pond...
Amenities["Pond", "Fenced", "Well Water"]
imageCount42
images["https://assets.landwatch.com/.../1-600000000", ...]
brokerNameJane Doe
brokerCompanySample Land Co.
brokerPhone(000) 000-0000
listingEvents[{"date": "2026-01-01", "eventTitle": "Price", "newPrice": 750000}]

How to Use

1. Search a state for land, summary fields only (fastest):

{
"mode": "search",
"locations": ["Texas"],
"fetchDetails": false,
"maxItems": 100
}

2. Search with filters and full detail (description, amenities, seller contact):

{
"mode": "search",
"locations": ["Texas", "Florida"],
"minPrice": 250000,
"maxPrice": 1000000,
"minAcres": 10,
"fetchDetails": true,
"maxItems": 200
}

3. Paste specific listing or search URLs (filters ignored):

{
"mode": "url",
"urls": [
"https://www.landwatch.com/texas-land-for-sale",
"https://www.landwatch.com/sample-county-texas-land-for-sale/pid/400000000"
],
"fetchDetails": true
}

Input Parameters

ParameterTypeDescription
modestringsearch (location + filters) or url (paste URLs).
locationsarrayLocations to search, e.g. "Texas", "Travis County, Texas", or "United States". Search mode only.
propertyTypesarrayKeep only matching types (Recreational, Hunting, Undeveloped, Waterfront, Farms and Ranches, Timberland, Homesite, Commercial).
minPrice / maxPriceintegerPrice range in USD.
minAcres / maxAcresintegerAcreage range.
minBedsintegerMinimum bedrooms (listings with a home).
hasHousebooleanKeep only listings that include a house.
urlsarrayListing or search URLs. URL mode only.
fetchDetailsbooleanOpen each listing page for full detail (default true).
maxItemsintegerThe cap on listings returned in total (default 20; 0 = unlimited). This is the only default limit.
maxPagesintegerOptional bound on result pages walked per search. Leave empty (or 0) to walk every result page; maxItems decides when to stop.
resumeFromRunIdstringOptional: a previous run ID (or dataset ID) from this actor. Listings already collected there are skipped, so the run returns only new ones. Continues ONE interrupted run; for recurring monitoring use incrementalMode.
incrementalModebooleanRecurring monitoring of the same search. Default false. See below.
stateKeystringOptional name for the saved baseline. Auto-derived from the mode, locations/URLs and every filter when left empty.
emitUnchangedbooleanAlso return (and bill) rows that did not change. Default false.
emitExpiredbooleanAlso return (and bill) a synthetic row for listings that disappeared. Default false.
proxyobjectConnection settings. Default works on every plan.
maxResidentialMBintegerOptional traffic budget when using a residential group (0 = unlimited).

Recurring Monitoring (incremental mode)

Turn on incrementalMode when you schedule this actor against the same search repeatedly and only want what changed. The actor remembers what that search returned last time and adds four columns to every row:

ColumnMeaning
changeTypeNEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED.
changedFieldsFor UPDATED, the field names that actually moved.
firstSeenAtWhen this actor first saw the listing on this search.
lastSeenAtThe most recent run that saw it.

The first run returns everything as NEW. Later runs return only NEW, UPDATED and REAPPEARED, so you are not billed again for listings you already have. emitUnchanged and emitExpired add the other two categories back; both are off by default because both return, and bill, extra rows.

Two behaviours worth knowing before you schedule it:

  • Different filters never share a baseline. The saved state is keyed on the mode, the locations or URLs, all seven filters and the fetchDetails setting, so two differently configured searches cannot overwrite each other. Set stateKey yourself only if you want to override that.
  • EXPIRED is only reported after a provably complete run. If a page was refused or came back unreadable, if a listing page could not be read, if a location or URL could not be used, or if maxItems / maxPages / Resume cut the run short, expiry reporting is skipped for that run and the log says why. A partial scan cannot tell "gone" apart from "not reached yet", and wrongly marking a live listing as gone would cost you a row now and another one when it comes back.
  • LandWatch itself stops paging after about 20 pages (~500 listings) per search, whatever the search matches: texas-land-for-sale reports 80,405 matching listings and hands over 500 of them. That is the site's limit, not this actor's, and no input can raise it. The run logs how many the site says it matched, and EXPIRED reporting is skipped for any search bigger than what the site would page through, because otherwise every listing past page 20 would be reported as gone and billed. For expiry reporting, monitor scopes that fit inside that window: single counties or cities, or a state split by filters, rather than a whole state in one search.
  • How many listings one baseline can track. The saved state has a size limit, and the count that fits depends on fetchDetails. Measured on live Texas listings (2026-09-06) from the state this actor actually saved: about 1,000 tracked listings with fetchDetails: true (8,545 compressed bytes per listing, measured over 50) and about 10,000 with fetchDetails: false (760 bytes per listing, measured over 500). Listings with long descriptions and many photos use more. The run warns once the baseline passes 80% of the limit, and refuses to save past it, at which point the next run starts from the older baseline and re-reports the newer listings as NEW, so you pay for them twice. Split a bigger campaign into several scheduled runs, each with its own stateKey.
  • EXPIRED rows carry a null otherListings / soldListings. Those two fields describe other properties near the listing, so they are not kept in the baseline; every other field of the expired listing comes back exactly as it was last seen.

resumeFromRunId and incrementalMode are different features and the actor stops with an explanation if you combine them against a search that already has saved state.

Output Example

Sample shape - values are illustrative placeholders, not from a live listing.

{
"id": "26000000",
"lwPropertyId": "400000000",
"url": "https://www.landwatch.com/sample-county-texas-land-for-sale/pid/400000000",
"title": "40 Acre Hill Country Ranch",
"price": 750000,
"priceDisplay": "$750,000",
"pricePerAcre": 18750,
"acres": 40,
"acresDisplay": "40 Acres",
"beds": 3,
"baths": 2,
"hasHouse": true,
"city": "Sample City",
"county": "Sample County",
"state": "Texas",
"stateAbbreviation": "TX",
"zip": "78000",
"latitude": 30.2672,
"longitude": -97.7431,
"propertyTypesLabel": "Farms and Ranches, House",
"descriptionText": "Beautiful 40-acre ranch with rolling pasture, a stocked pond, and mature oaks...",
"Amenities": ["Pond", "Fenced", "Well Water"],
"imageCount": 42,
"images": ["https://assets.landwatch.com/resizedimages/1600/1200/l/80/1-600000000"],
"brokerName": "Jane Doe",
"brokerCompany": "Sample Land Co.",
"brokerPhone": "(000) 000-0000",
"brokerDetails": {
"contactName": "Jane Doe",
"companyName": "Sample Land Co.",
"email": "agent@example.com",
"licenseNumber": "0000000",
"phoneOffice": "(000) 000-0000"
},
"listingEvents": [
{ "date": "2026-01-01", "eventTitle": "Price", "newPrice": 750000, "priceDelta": -5.0 }
],
"scrapedAt": "2026-01-01T00:00:00+00:00"
}

Export to Your Apps (optional)

Set mcpConnectors to one or more Apify MCP connector IDs to push results straight into tools like Notion (provide notionParentPageUrl). Leave it empty to skip; the dataset is unaffected.

Plan Requirement

This scraper runs on every Apify plan, including the free tier, using the default connection settings. For large jobs or if you see connection errors, enable Apify Proxy or switch to a residential group in the Connection section.