# Land Com Property Extractor (`kawsar/land-com-property-extractor`) Actor

Land.com property scraper that extracts land and home listings from any Land.com search URL, with price, acreage, address, broker and images exported to JSON, CSV or Excel.

- **URL**: https://apify.com/kawsar/land-com-property-extractor.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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?

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

## Land.com Property Extractor

Extract land and property listings from any Land.com search or results page. Paste a Land.com URL for a state, county, city, or map area, and this actor collects every listing on the page, follows the pagination for you, and returns clean structured data you can open in a spreadsheet or feed into your own tools.

For each property you get the price, acreage, full address, beds, baths, building size, cover image, listing description, and the listing broker's name, company, and profile link. Export the results as JSON, CSV, or Excel, or pull them through the Apify API.

### Why use this actor

Land.com lists rural land, farms, ranches, and homes with acreage across the United States. The site is built for browsing one listing at a time, which makes it slow to gather data for research or outreach. This actor turns any search into a downloadable dataset in a single run, so you can sort, filter, compare, and dedupe hundreds of listings at once instead of copying them by hand.

### Features

- Reads any Land.com search URL: state pages, county pages, city pages, map-bounds searches, and filtered results such as all-land, ranches, or homes with acreage.
- Handles pagination automatically. You set a maximum, it stops there.
- Captures both raw land and homes with acreage, and labels each by listing type.
- Returns 20+ fields per listing, including price, acreage, location, broker, and image.
- Accepts a batch of URLs in one run, so you can pull several markets at once.
- Exports to JSON, CSV, Excel, HTML, or RSS, and is reachable through the Apify API and scheduler.
- No login, cookies, or account setup required.

### Use cases

- Build comps and pricing sheets for land in a target county or price band.
- Track new rural, farm, and acreage listings in areas you follow.
- Collect broker and brokerage contacts for outreach and CRM import.
- Feed a land-investing, valuation, or GIS pipeline with structured listing data.
- Monitor inventory and price movement in a region over time by scheduling repeat runs.

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `searchUrls` | array of strings | Yes | | One or more Land.com search or results URLs. |
| `maxItems` | integer | No | 100 | Maximum listings to collect across all URLs (1 to 1000). |
| `requestTimeoutSecs` | integer | No | 45 | Per-request timeout in seconds (10 to 120). |

#### Example input

```json
{
    "searchUrls": [
        "https://www.land.com/New-York/all-land/",
        "https://www.land.com/Texas/ranches-for-sale/"
    ],
    "maxItems": 100,
    "requestTimeoutSecs": 45
}
```

#### Supported URL types

Any public Land.com results page works. Common patterns:

| Search type | Example URL |
|-------------|-------------|
| All land in a state | `https://www.land.com/New-York/all-land/` |
| Ranches in a state | `https://www.land.com/Texas/ranches-for-sale/` |
| County search | `https://www.land.com/Madison-County-NY/land/` |
| City search | `https://www.land.com/Cazenovia-NY/land/` |
| Map-bounds search | `https://www.land.com/New-York/all-land/bounds-40.336-n80.737-45.192-n72.294/` |

To build a map-bounds URL, open Land.com, frame the area you want on the map, and copy the URL from your browser. If a URL already ends in a `/page-2/` segment, the actor strips it and starts from the first page.

### Output

Each listing becomes one dataset record.

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | Land.com listing id |
| `listingType` | string | Schema type, such as SingleFamilyResidence or Residence |
| `listingTier` | string | Placement tier of the listing card |
| `propertyUrl` | string | Link to the listing detail page |
| `listingTitle` | string | Headline given to the listing |
| `addressName` | string | Address as shown on the card |
| `listingDescription` | string | Listing blurb |
| `price` | number | Price as a number |
| `priceText` | string | Price as shown, such as `$995,000` |
| `currency` | string | Currency code, USD |
| `acres` | number | Lot size in acres |
| `sizeText` | string | Lot size as shown |
| `beds` | number | Bedroom count, when the listing is a home |
| `baths` | number | Bathroom count, when the listing is a home |
| `sqft` | number | Building size in square feet, when available |
| `streetAddress` | string | Street line |
| `city` | string | City |
| `state` | string | State code |
| `zipCode` | string | ZIP code |
| `county` | string | County, when shown on the card |
| `addressText` | string | Full address line |
| `coverImage` | string | Cover photo URL |
| `brokerId` | string | Broker id |
| `brokerName` | string | Broker or agent name |
| `brokerCompany` | string | Brokerage name |
| `brokerUrl` | string | Broker profile URL |
| `sourceUrl` | string | The search URL this record came from |
| `scrapedAt` | string | UTC timestamp of the run |

#### Example output

```json
{
    "listingId": "25261543",
    "listingType": "SingleFamilyResidence",
    "listingTier": "diamond",
    "propertyUrl": "https://www.land.com/property/11.51-acres-in-madison-county-new-york/25261543/",
    "listingTitle": "Hilltop Equine Estate",
    "addressName": "5857 East Lake Road, Cazenovia, NY, 13035",
    "listingDescription": "Stunning hilltop equine estate offering panoramic views and exceptional construction quality throughout.",
    "price": 995000,
    "priceText": "$995,000",
    "currency": "USD",
    "acres": 11.5,
    "sizeText": "11.5 acres",
    "beds": 4,
    "baths": 3,
    "sqft": 3600,
    "streetAddress": "5857 East Lake Road",
    "city": "Cazenovia",
    "state": "NY",
    "zipCode": "13035",
    "county": "Madison County",
    "addressText": "5857 East Lake Road, Cazenovia, NY, 13035, Madison County",
    "coverImage": "https://assets.land.com/resizedimages/0/601/w/80/1-5795089817",
    "brokerId": "42537",
    "brokerName": "Allen Olmsted",
    "brokerCompany": "Canaan Realty",
    "brokerUrl": "https://www.land.com/member/allen-olmsted/42537/",
    "sourceUrl": "https://www.land.com/New-York/all-land/",
    "scrapedAt": "2026-08-31T05:00:00+00:00"
}
```

### How to use

1. Open Land.com and build the search you want. Filter by state, county, price, or acreage, or draw an area on the map.
2. Copy the URL from your browser.
3. Paste it into `searchUrls`. Add more URLs to run several searches in one job.
4. Set `maxItems` and start the run.
5. When it finishes, download the dataset as JSON, CSV, or Excel, or read it through the API.

### Notes and limits

- Works on public Land.com search pages. No login is needed.
- Land.com shows 25 listings per page, and the actor pages through results until it reaches `maxItems`.
- Some cover photos load only after a visitor scrolls, so `coverImage` can be empty on lower cards. Price, acreage, location, and broker details still come through.
- County appears when Land.com prints it on the card. City, state, and ZIP come from the listing address and are present far more often.
- Field values reflect what Land.com publishes at run time. Listings change, so schedule repeat runs if you need fresh data.

### Frequently asked questions

**Do I need an account or password for Land.com?**
No. The actor reads public search pages only.

**Can I scrape more than one state or county at once?**
Yes. Add every search URL to `searchUrls` and the actor processes them in order up to your `maxItems` total.

**How many listings can I get per run?**
Up to 1000 per run through `maxItems`. For larger jobs, split searches across several runs or narrow each URL by county or price.

**What formats can I export?**
JSON, CSV, Excel, HTML table, and RSS, plus direct API access to the dataset.

**Does it return the broker contact?**
It returns the broker name, brokerage, id, and profile URL as shown on the listing card. Open the profile URL for the broker's public page.

### Disclaimer

This actor collects publicly available information from Land.com search pages. Use the data in line with Land.com's terms and any laws that apply to you. You are responsible for how you use what you collect.

# Actor input Schema

## `searchUrls` (type: `array`):

One or more Land.com search or results pages to extract listings from. Paste a full Land.com results URL for any state, county, city, map-bounds or filtered search (all land, ranches, homes with acreage, price or acreage ranges). Pagination is handled automatically.

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

Maximum number of property listings to collect across all search URLs.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.land.com/New-York/all-land/",
    "https://www.land.com/Texas/ranches-for-sale/"
  ],
  "maxItems": 100,
  "requestTimeoutSecs": 45
}
```

# Actor output Schema

## `properties` (type: `string`):

Extracted Land.com land and property listings with prices, acreage, location, broker details and images.

# 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 = {
    "searchUrls": [
        "https://www.land.com/New-York/all-land/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/land-com-property-extractor").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 = { "searchUrls": ["https://www.land.com/New-York/all-land/"] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/land-com-property-extractor").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 '{
  "searchUrls": [
    "https://www.land.com/New-York/all-land/"
  ]
}' |
apify call kawsar/land-com-property-extractor --silent --output-dataset

```

## MCP server setup

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

```

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/LJtRatz7gfGurta75/builds/fo90wwUiGgGaQ5Du0/openapi.json
