# Landsearch Property Search Scraper (`alexist/landsearch-property-search-scraper`) Actor

Scrape rural and agricultural property listings from Landsearch.com with precision. This scraper collects prices, locations, images, status, and 15+ fields per property — perfect for real estate investors, property researchers, and market analysts.

- **URL**: https://apify.com/alexist/landsearch-property-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Landsearch Property Search Scraper: Extract Land Listings at Scale

***

### What Is Landsearch.com?

Landsearch.com is a specialized real estate platform dedicated to land and rural property listings. It aggregates thousands of agricultural, recreational, and rural property sales across regions with geographic filtering, allowing users to search by boundaries, zoom levels, and property tags. Manually collecting and organizing property data from Landsearch is inefficient — the **Landsearch Property Search Scraper** automates extraction, transforming raw listings into structured datasets ready for analysis and integration.

***

### Overview

The **Landsearch Property Scraper** extracts property detail listings from Landsearch search results, capturing comprehensive information on each property. It is designed for:

- **Real estate investors** monitoring market availability and pricing trends
- **Property researchers** building datasets for valuation models
- **Market analysts** tracking rural land supply by region
- **Data aggregators** feeding property data into comparative tools

Key features include geographic boundary filtering, configurable item limits, and error tolerance for interrupted or failed URLs.

***

### Input Format

The scraper accepts a JSON configuration that targets specific Landsearch search result pages:

```json
{
  "urls": [
    "https://www.landsearch.com/rural/filter/bounds=-83.212126+33.772782+-81.375309+35.582051,center=-82.293718+34.682358,tag=rural,zoom=8.16"
  ],
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
```

| Field | Description |
|---|---|
| `urls` | Array of Landsearch property search result URLs. Each URL includes geographic bounds, center coordinates, property tags (e.g., `rural`), and zoom level. |
| `max_items_per_url` | Maximum number of properties to extract per URL (recommended: 50–300 depending on your needs). |
| `ignore_url_failures` | Boolean. If `true`, the scraper continues if some URLs fail; if `false`, it stops on the first error. Set to `true` for large batch runs. |

**How to construct URLs:**

- Navigate to Landsearch.com and apply filters (geographic bounds, property type, region)
- Copy the resulting URL from your browser
- The URL will contain encoded bounds (lat/long coordinates), center point, tag (property category), and zoom level
- Paste directly into the `urls` array

***

### Output Format

**Sample output**

```json
{
  "id": 5417215,
  "path": "/properties/cheek-rd-gray-court-sc-29645/5417215",
  "size": 5.09,
  "image": {
    "id": 174846601,
    "path": "/listings/4VqvZ/small/gray-court-sc-174846601.jpg"
  },
  "price": 184999,
  "title": "5 Acres of Land for Sale in Gray Court, South Carolina",
  "format": "sale",
  "status": "active",
  "context": {
    "key": "3yd-NYSMLS-11878507",
    "center": [
      -82.099513,
      34.646061
    ],
    "source": "listhub",
    "precision": "high"
  },
  "location": {
    "locality": {
      "name": "Gray Court",
      "slug": "gray-court-sc"
    },
    "territory": {
      "abbr": "SC",
      "name": "South Carolina",
      "slug": "south-carolina"
    },
    "postal_code": {
      "name": "29645"
    },
    "subterritory": {
      "name": "Laurens",
      "slug": "laurens-county-sc",
      "label": "County"
    }
  },
  "promoted": false,
  "listed_at": "2026-07-10 00:00:00+00:00",
  "structure": false,
  "total_images": 18,
  "total_videos": 0,
  "from_url": "https://www.landsearch.com/rural/gray-court-sc"
}
```

Each property scraped returns a structured record with 15 core fields:

#### Property Identification

| Field | Meaning |
|---|---|
| `ID` | Unique identifier for the property listing on Landsearch |
| `Path` | URL slug or path component of the listing detail page |
| `Title` | Property title or listing headline as displayed |
| `Format` | Property format or listing type (e.g., land sale, acreage) |

#### Property Details & Media

| Field | Meaning |
|---|---|
| `Size` | Land area measurement (typically in acres or square feet) |
| `Image` | Primary property image URL or cover photo |
| `Total Images` | Count of total images available for the property |
| `Total Videos` | Count of any video media linked to the listing |

#### Pricing & Availability

| Field | Meaning |
|---|---|
| `Price` | Listing price or asking price of the property |
| `Status` | Current listing status (active, pending, sold, off-market) |
| `Listed At` | Date the property was listed or last updated |

#### Location & Classification

| Field | Meaning |
|---|---|
| `Location` | Geographic location or address of the property |
| `Context` | Property context or regional classification (rural, suburban, agricultural) |

#### Marketing & Visibility

| Field | Meaning |
|---|---|
| `Promoted` | Boolean flag indicating if the listing has paid promotion or featured status |
| `Structure` | Property structure information (e.g., presence of buildings, barns, homes) |

***

### How to Use

1. **Build search URLs** — Go to Landsearch.com and apply filters (geographic bounds, property tags, zoom level). Copy the resulting filtered search URL.

2. **Configure input** — Paste URLs into the `urls` array. Set `max_items_per_url` based on your data volume needs (50–300 recommended).

3. **Enable failure tolerance** — Set `ignore_url_failures: true` to avoid interruptions in multi-URL batches.

4. **Start the scraper** — Run the actor and monitor progress in the activity log.

5. **Export results** — Download data as JSON, CSV, or Excel for GIS mapping, financial models, or database import.

**Best practices:**

- Use narrow geographic bounds to capture focused markets
- Test with a single URL and small `max_items_per_url` before large runs
- Store URLs with their filters documented so runs are reproducible
- Schedule recurring scrapes to track price changes over time

***

### Use Cases & Business Value

- **Investment analysis:** Build datasets of available properties to identify deals and market gaps
- **Competitive intelligence:** Monitor competitor listings and pricing strategies
- **Valuation modeling:** Collect comparable sales data to refine property valuations
- **Market research:** Track supply trends across regions or property types
- **Lead generation:** Extract contact and listing details for outreach campaigns

The **Landsearch Property Scraper** transforms hours of manual browsing into minutes, delivering clean, structured data ready for spreadsheets, GIS tools, or downstream analysis.

***

### Conclusion

The **Landsearch Property Search Scraper** is an efficient solution for anyone needing large-scale rural and land property data. With 15+ fields per listing and flexible geographic filtering, it enables investors, researchers, and analysts to act faster on market opportunities. Start scraping today and unlock the full potential of Landsearch data.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.landsearch.com/rural/filter/bounds=-83.212126+33.772782+-81.375309+35.582051,center=-82.293718+34.682358,tag=rural,zoom=8.16"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 300
}
```

# 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 = {
    "urls": [
        "https://www.landsearch.com/rural/filter/bounds=-83.212126+33.772782+-81.375309+35.582051,center=-82.293718+34.682358,tag=rural,zoom=8.16"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 300
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/landsearch-property-search-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 = {
    "urls": ["https://www.landsearch.com/rural/filter/bounds=-83.212126+33.772782+-81.375309+35.582051,center=-82.293718+34.682358,tag=rural,zoom=8.16"],
    "ignore_url_failures": True,
    "max_items_per_url": 300,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/landsearch-property-search-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.landsearch.com/rural/filter/bounds=-83.212126+33.772782+-81.375309+35.582051,center=-82.293718+34.682358,tag=rural,zoom=8.16"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 300
}' |
apify call alexist/landsearch-property-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=alexist/landsearch-property-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/dpGzv4C6ctpQWQVZc/builds/IPzsIr4qpdwfzDC4P/openapi.json
