# LandWatch Scraper \[$0.9💰] | Farmland | Hunting Land | Acres (`ahmed_jasarevic/land-scraper`) Actor

Scrape rural land listings from LandWatch and LandAndFarm (the Land.com network): price, price per acre, acreage, GPS, property type, price history, broker contact, photos. Export as JSON, CSV, Excel. Pay per result.

- **URL**: https://apify.com/ahmed\_jasarevic/land-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.88 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LandWatch & LandAndFarm Land Scraper - Extract Rural Land Listings, Farmland Prices & Land Broker Data

Scrape rural land listings from **LandWatch** and **LandAndFarm** (the Land.com network, owned by CoStar Group) - extract price, price per acre, acreage, GPS coordinates, property type, price history, photos, and broker contact details for farmland market research, land investment tracking, and rural property databases.

### Rural Land Data Use Cases: Farmland, Hunting, Ranch & Investment

- **Farmland price tracking** - monitor farmland for sale and cropland values by state, county, and price per acre
- **Hunting land & recreational property data** - collect recreational land listings for hunting, lake, and timber property research
- **Ranch land market research** - analyze ranch for sale listings, pasture land values, and rural property trends
- **Building rural land databases** - assemble structured land listings data with price history for appraisals and comparable sales analysis
- **Land broker lead generation** - extract broker contact details (name, company, phone, email, website, license number) from listing detail pages
- **Land investment monitoring** - track land price changes over time with automatic scheduling and price history

### How the LandWatch and LandAndFarm Scraper Works

This Actor searches LandWatch and LandAndFarm exactly like a human visitor would - no official API required - and converts each listing into a clean JSON record. Start from any search URL (e.g. `https://www.landwatch.com/texas-land-for-sale`), set a result cap, and the Actor paginates through search results and extracts every listed property. When `fetchDetails` is enabled, it also opens each listing's detail page to enrich the record with price history, parcel/MLS IDs, amenities, and full broker contact information.

Uses residential proxy rotation by default for reliable access to both marketplaces, and runs 24 extraction requests concurrently inside a single Apify run.

### Real Pricing - No Surprises

The Actor is billed **pay-per-result**, aligned with the actual data you get:

| Event | Price |
|---|---|
| Search result listing | $0.0009 (FREE plan: first 10 listings free) |
| Detail page enrichment (`fetchDetails`) | $0.0005 per listing |
| Actor start | $0.00005 |

Real examples:

- **1,000 listings, details off** -> **$0.90** per run
- **1,000 listings, details on** -> **$1.40** per run (price history + broker contacts included)
- **10,000 listings, details on** (max cap) -> **$14.00** per run

That is 10x cheaper than the $0.0045+ per-property pricing of typical Land.com network scrapers.

### Land Scraper Input Parameters

All input fields come from the Actor's input schema:

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `startUrls` | Array (URL editor) | Yes | - | LandWatch search URLs (e.g. `https://www.landwatch.com/texas-land-for-sale`) or LandAndFarm search URLs (e.g. `https://www.landandfarm.com/search/lots-in-south-carolina-for-sale/`). Single listing URLs also work. |
| `maxItems` | Integer | No | 100 | Maximum results to extract (1-10,000). |
| `fetchDetails` | Boolean | No | `true` | Fetch each listing's detail page for price history, broker contacts, parcel/MLS IDs, amenities. Adds the $0.0005 detail event per listing. |
| `proxy` | Object | No | `{ "useApifyProxy": true }` | Proxy configuration. Defaults to Apify residential proxy. |

> **Tip:** leave `fetchDetails` off for cheap, broad market sweeps; turn it on when you need price history or broker contacts.

### Land Listing Data You Get

Every extracted record includes the search-result fields, enriched with detail-page data when `fetchDetails` is on. Key fields (full list in the output schema):

- **Location**: `address`, `city`, `county`, `state`, `stateCode`, `zip`, `latitude`, `longitude`
- **Pricing**: `price`, `priceDisplay`, `shortPrice`, `pricePerAcre`, `priceChangeAmount`, `priceChangePercentage`
- **Property**: `acres`, `acresDisplay`, `propertyTypes`, `propertyTypesLabel`, `status`, `statusCode`, `beds`, `baths`, `homesqft`, `hasHouse`, `description`
- **Details (with `fetchDetails`)**: `priceHistory` (date, price, priceDelta, acres, eventTitle), `parcelId`, `mlsId`, `mlsName`, `salesPrice`, `salesDate`, `amenities`
- **Media & links**: `thumbnailUrl`, `photoUrls`, `imageCount`, `videoUrl`, `virtualTourUrl`, `externalLink`
- **Broker / agent**: `broker.name`, `broker.company`, `broker.phone`, `broker.email`, `broker.website`, `broker.licenseNumber`, `broker.profileUrl`
- **Meta**: `source` (landwatch / landandfarm), `listingId`, `propertyId`, `url`, `listingDate`, `lastUpdated`

### Example Input: Scrape Texas Land for Sale

```json
{
  "startUrls": [
    { "url": "https://www.landwatch.com/texas-land-for-sale" }
  ],
  "maxItems": 100,
  "fetchDetails": true
}
```

### Example Output: One Rural Land Listing

Real example of one dataset item (trimmed):

```json
{
    "source": "landwatch",
    "title": "Sisterdale Farms",
    "url": "https://www.landwatch.com/kendall-county-texas-farms-and-ranches-for-sale/pid/425766087",
    "price": 19400000,
    "priceDisplay": "$19,400,000",
    "pricePerAcre": 62580.65,
    "acres": 310,
    "address": "Sisterdale",
    "city": "Boerne",
    "county": "Kendall County",
    "state": "Texas",
    "stateCode": "TX",
    "latitude": 29.9,
    "longitude": -98.7,
    "propertyTypes": ["Farms and Ranches", "Recreational Property"],
    "status": "Active",
    "broker": {
        "name": "Louie Swope",
        "company": "West & Swope Ranches",
        "phone": "(830) 376-7259",
        "website": "https://westandswoperanches.com"
    },
    "priceHistory": [
        { "date": "2026-02-18", "price": 21500000, "eventTitle": "Listed for Sale" },
        { "date": "2026-09-17", "price": 19400000, "priceDelta": -9.77, "eventTitle": "Price" }
    ],
    "photoUrls": ["https://assets.landwatch.com/resizedimages/1920/0/h/80/5513431857"]
}
```

With `fetchDetails` enabled the record is further enriched with `parcelId`, `mlsId`, `mlsName`, `salesPrice`, `salesDate`, `amenities`, the broker's `email` and `licenseNumber`, and the full photo set.

### Automate Land Market Monitoring With Schedules & APIs

The Actor runs on Apify's serverless platform, so every run produces a paginated dataset you can export as **JSON, CSV, XML, or Excel** - or stream into your own systems:

- **REST API** - every Apify Actor is callable via the Apify API with just a token
- **Webhooks** - notify your app (or Zapier / Make / n8n) the moment a run finishes
- **Schedules** - recommended: **weekly** farmland price monitoring, **monthly** market sweeps, or **daily** only if you track specific listings for price changes

Scheduled runs keep your rural land database current and make price-change tracking (`priceChangeAmount`, `priceHistory`) genuinely useful.

### Related Land and Real Estate Data Actors

- **[azzouzana/landwatch-scraper](https://apify.com/azzouzana/landwatch-scraper)** - the most-used LandWatch-only scraper on the Store (61 users); anchor of the LandWatch topic cluster. Pairs well for cross-checking LandWatch data.
- **[memo23/land-search-cheerio-ppr](https://apify.com/memo23/land-search-cheerio-ppr)** - cheaper Land.com network search scraping (92 users); strongest keyword overlap in this cluster.
- **[zen-studio/land-com-scraper-pro](https://apify.com/zen-studio/land-com-scraper-pro)** - full Land.com network property extraction with 80+ fields; the closest feature-comparable competitor.
- **[crawlerbros/us-land-scraper](https://apify.com/crawlerbros/us-land-scraper)** - searches LandWatch, LandFlip, and LotFlip for US land; broad coverage of the same land-for-sale topic.
- **[ahmed\_jasarevic/domain-com-au-property-scraper](https://apify.com/ahmed_jasarevic/domain-com-au-property-scraper)** - by the same developer; scrapes Australian real estate listings (price, beds/baths, land size, geo coords) if you also work with the AU property market.

### Frequently Asked Questions

#### Why use this Actor instead of the official LandWatch API?

There is **no official public LandWatch API** - LandWatch does not expose a documented programmatic interface for its listings. This Actor reads the same public search pages a human visitor sees and returns them as clean, structured JSON. Same for LandAndFarm. No API key, no rate-limit negotiations, no login required.

#### What are the alternatives to this Actor (or to LandWatch itself)?

For LandWatch/Land.com data: `azzouzana/landwatch-scraper`, `memo23/land-search-cheerio-ppr`, `zen-studio/land-com-scraper-pro`, `crawlerbros/us-land-scraper`. If you're looking for other land marketplaces entirely: LandFlip, LandHub, LandSearch, and Land.com are the main US alternatives to the LandWatch/LandAndFarm network for rural and recreational land listings.

#### Is LandWatch the same as LandAndFarm? What is the Land.com network?

LandWatch (founded 2002, Seattle) and LandAndFarm are both part of the **Land.com network**, owned by **CoStar Group** since 2017. LandWatch covers land for sale across the US with a strong auction section, while LandAndFarm focuses on farms, ranches, and agricultural property. This Actor covers **both marketplaces in a single run** - one input, one dataset.

#### Can I scrape land for sale by state?

Yes. Use state-level search URLs, e.g. `https://www.landwatch.com/texas-land-for-sale`, `https://www.landwatch.com/iowa-land-for-sale`, or county-level URLs like `https://www.landwatch.com/kendall-county-texas-farms-and-ranches-for-sale/`. Each URL is treated as its own search and combined with any cap you set.

#### How much is farmland per acre in 2026?

For market context: the USDA's 2026 Land Values summary put average US farm real estate at **$4,500/acre** (+3.4% YoY), cropland at **$6,020/acre** (first time above $6,000), and pasture at **$2,000/acre**, with Iowa cropland leading at **$10,700/acre**. Use this Actor to track asking prices (and `pricePerAcre`) on actual current listings for your target counties - much more current than annual reports.

#### What does the detail event actually add?

With `fetchDetails: true`, each listing gets its **price history**, **parcel ID**, **MLS ID**, **sales price/date**, **amenities**, and the full **broker record** (name, company, phone, email, website, license number). This is what powers comparable-sale analysis and broker lead lists. It costs $0.0005 per listing on top of the $0.0009 result event.

#### Can I get land broker and agent contacts?

Yes - with `fetchDetails: true`, the output includes `broker.name`, `broker.company`, `broker.phone`, `broker.email`, `broker.website`, `broker.licenseNumber`, and `broker.profileUrl` from the listing detail page. Use responsibly and in line with the source sites' terms.

### Competitive Positioning

Compared with the other LandWatch/Land.com scrapers on the Store (verified from their published pricing as of September 2026):

| Capability | This Actor | azzouzana/landwatch-scraper | memo23/land-search-cheerio-ppr | zen-studio/land-com-scraper-pro |
|---|---|---|---|---|
| Price per full result | **$0.0009 + $0.0005 details** | $0.001 | $0.00225 + $0.001 | $0.00449/property |
| Marketplaces covered | **LandWatch + LandAndFarm** | LandWatch only | Land.com network search | Land.com network |
| Detail-page enrichment (price history, broker) | **Yes - $0.0005** | - | - | Included at higher price |
| Free preview | **10 listings on FREE plan** | - | - | - |

Pricing figures taken from each Actor's Store pricing page; `$0.0009` result + `$0.0005` detail events make this Actor the most cost-efficient option for full detail-enriched land data.

### SEO Keywords

land for sale, land listings data, farmland for sale, farmland prices, farmland price per acre, hunting land for sale, recreational property data, ranch land for sale, ranch property data, land investment tracking, land market research, rural land database, rural property data, land sale comps, comparable land sales, land price history, land broker leads, broker contact data, landwatch api alternative, landandfarm alternative, texas land for sale, montana ranches for sale, iowa farmland, cropland values, waterfront property listings

### For AI Agents & LLM Apps

This Actor is callable from any LLM application via the Apify MCP server or the Apify API.

- **Purpose**: returns one JSON item per rural land listing from LandWatch and LandAndFarm, with price, price per acre, acreage, GPS coordinates, property type, price history, photos, and broker contact data.
- **Minimal working input**:

```json
{
  "startUrls": [{ "url": "https://www.landwatch.com/texas-land-for-sale" }],
  "maxItems": 10,
  "fetchDetails": false
}
```

- **Variant - detail mode** (for price history + broker contacts):

```json
{
  "startUrls": [{ "url": "https://www.landwatch.com/iowa-land-for-sale" }],
  "maxItems": 10,
  "fetchDetails": true
}
```

- **Output fields**: `source`, `listingId`, `title`, `url`, `price`, `pricePerAcre`, `acres`, `city`, `county`, `state`, `stateCode`, `zip`, `latitude`, `longitude`, `propertyTypes`, `status`, `description`, `broker` (name/company/phone/email/website/licenseNumber), `priceHistory[]`, `photoUrls[]`, `parcelId`, `mlsId`, `listingDate`, `lastUpdated`.
- **Behaviors an agent should know**:
  - Only `landwatch.com` and `landandfarm.com` URLs are supported - other domains (e.g. land.com hub pages) will not extract.
  - `maxItems` is an absolute cap (1-10,000, default 100). Set it explicitly - an unset cap still runs 100.
  - `fetchDetails` defaults to `true` and roughly **doubles billed events** (adds the $0.0005 detail event per listing plus extra requests). Set it to `false` for cheap breadth.
  - For state-wide sweeps, use `{state}-land-for-sale` URLs; filtering to a sub-category (e.g. hunting property) works via `{state}-land-for-sale/hunting-property`.
  - Single listing URLs produce one item with that listing's data.
- **Billing**: pay-per-result - $0.0009 per listing item + $0.0005 per detail-enriched listing + $0.00005 run start. A 100-item run with details costs ~$0.14.

### Legal & Compliance Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by** LandWatch, LandAndFarm, Land.com, or CoStar Group. It accesses **only publicly available listing pages** on LandWatch and LandAndFarm - no login bypass, no CAPTCHA solving, no access to non-public data.

Users are responsible for complying with the source websites' Terms of Service and with applicable data-protection law when using extracted data, including the [GDPR](https://gdpr-info.eu/) and the [CCPA](https://oag.ca.gov/privacy/ccpa) where they apply. Because output can include personal contact data (broker/agent names, emails, phone numbers), you must not use it for unsolicited commercial outreach that would violate laws such as CAN-SPAM or the TCPA. Check the source sites' terms before republishing or reselling listing data.

# Actor input Schema

## `startUrls` (type: `array`):

LandWatch or LandAndFarm search pages to scrape, e.g. https://www.landwatch.com/texas-land-for-sale or https://www.landandfarm.com/search/lots-in-south-carolina-for-sale/. You can also paste a single listing URL to scrape just that property.

## `maxItems` (type: `integer`):

Maximum number of listings to scrape per run.

## `fetchDetails` (type: `boolean`):

Enrich each listing with the detail API: price history, parcel ID, MLS ID, amenities, broker contact info and full photo set. Adds valuable data but roughly doubles the number of API calls, so disabling it makes runs about 2x faster.

## `proxy` (type: `object`):

Select proxies to be used by your crawler. Enabled by default — rotating proxies allow high concurrency and fast, safe large runs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.landwatch.com/texas-land-for-sale"
    }
  ],
  "maxItems": 100,
  "fetchDetails": true,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.landwatch.com/texas-land-for-sale"
        }
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/land-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.landwatch.com/texas-land-for-sale" }],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/land-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.landwatch.com/texas-land-for-sale"
    }
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call ahmed_jasarevic/land-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/land-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/iHtAFhBEHtyfrFBiz/builds/bg3jfoRxDo7SKy4e4/openapi.json
