# Land.com Scraper 🌾 (`shahidirfan/land-com-scraper`) Actor

Extract land and property listings from Land.com, including prices, acreage, locations, property details, images, agent contacts, and listing URLs. Find profitable land deals, track real estate prices, identify investment opportunities, and generate qualified property leads. Start scraping today!

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

## Pricing

from $0.80 / 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

### What does Land.com Scraper do?

Land.com Scraper collects farms, ranches, hunting land, timberland, and other rural property listings from Land.com. Paste any Land.com search URL or enter a location and filters, and the Actor returns structured listing data with prices, acreage, addresses, coordinates, broker contacts, listing dates, and photo links. Results go to an Apify dataset that you can download or connect to another workflow.

The Actor follows pagination automatically, skips duplicate listings, and stops at the result limit you set. It is built for land investors, rural appraisers, brokers, agricultural analysts, and research teams that need current market data without copying listings by hand.

### Why use Land.com Scraper?

- **Collect current land listings** - Pull active farms, ranches, recreational land, and acreage properties from any public Land.com search page.
- **Use the filters you already know** - Paste a filtered URL from Land.com and every price, acreage, house, county, sort, and page setting is carried into the run.
- **Get contactable records** - Each listing includes the broker name, company, phone number, profile link, primary photo, and gallery photo URLs when Land.com publishes them.
- **Export and automate** - Download JSON, CSV, Excel, XML, or HTML, or read the dataset through the Apify API, schedules, webhooks, Make, or Zapier.
- **Run at scale** - Collect up to 5,000 listings per run when you raise the page limit, and schedule repeat runs for market monitoring.

### What data can you extract from Land.com?

| Field | Description |
|-------|-------------|
| `id` | Land.com listing identifier |
| `title` | Listing title |
| `url` | Direct listing page URL |
| `price` | Asking price in USD |
| `price_display` | Formatted asking price |
| `price_per_acre` | Asking price divided by acreage |
| `acres` | Property size in acres |
| `acres_display` | Formatted acreage |
| `property_type` | Land categories listed for the property |
| `address` | Street address when published |
| `city` | City |
| `county` | County |
| `state` | State name |
| `state_abbreviation` | Two-letter state code |
| `zip` | Postal code |
| `latitude` | Property latitude |
| `longitude` | Property longitude |
| `bedrooms` | Bedroom count when a house is present |
| `bathrooms` | Bathroom count when a house is present |
| `half_bathrooms` | Half bathroom count |
| `square_feet` | Building size in square feet |
| `has_house` | Whether the property includes a house |
| `description` | Listing summary |
| `broker_name` | Listing broker |
| `broker_company` | Brokerage company |
| `broker_phone` | Published broker phone number |
| `broker_url` | Broker profile URL |
| `thumbnail_url` | Primary listing photo |
| `image_urls` | Gallery photo URLs |
| `image_count` | Number of listing photos |
| `status_code` | Land.com listing status code |
| `listing_level` | Listing promotion level |
| `listed_date` | Date the listing was added |
| `updated_date` | Date the listing was last updated |
| `on_market_date` | Date the property went on market |
| `auction_date` | Scheduled auction date |
| `lake` | Named lake or water feature |
| `is_diamond` | Diamond promotion flag |
| `is_gold` | Gold promotion flag |
| `is_platinum` | Platinum promotion flag |
| `is_showcase` | Showcase promotion flag |
| `source` | Source website |
| `scraped_at` | ISO timestamp for when the listing was collected |

Empty fields are removed from each record, so the dataset only contains values that Land.com actually published.

### How to use Land.com Scraper

1. Open the Actor on Apify Store.
2. Paste a Land.com search URL, or leave the URL empty and enter a location.
3. Set optional filters, the result limit, and the page limit.
4. Leave the proxy disabled for the default run, or enable a proxy if Land.com blocks your network.
5. Run the Actor.
6. Download the dataset or connect it to your workflow.

#### URL or location: which one is used?

A supplied `start_url` has priority. When a URL is present, the Actor uses that URL and ignores the location, property type, and filter fields. This lets you keep every filter you built on Land.com.

When `start_url` is empty, the Actor builds a search from `location`, `property_type`, and the optional filters.

#### Supported Land.com URL patterns

| Search type | Example URL |
|-------------|-------------|
| State and property type | `https://www.land.com/Texas/farms/` |
| County | `https://www.land.com/Edwards-County-TX/all-land/` |
| City | `https://www.land.com/Cazenovia-NY/all-land/` |
| Price and acreage filters | `https://www.land.com/Texas/all-land/under-200000/over-20-acres/` |
| Map area | `https://www.land.com/New-York/all-land/bounds-40.336-n80.737-45.192-n72.294/` |
| Later page | `https://www.land.com/Texas/farms/page-2/` |

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `start_url` | String | No | - | Any Land.com search or results URL. Takes priority over location and filters. |
| `location` | String | No | `Texas` | State, county, or city used when no URL is supplied. |
| `property_type` | String | No | `farms` | Land category used when building a search from the location. |
| `price_min` | Integer | No | - | Minimum price in USD. Used only without a URL. |
| `price_max` | Integer | No | - | Maximum price in USD. Used only without a URL. |
| `acres_min` | Number | No | - | Minimum acreage. Used only without a URL. |
| `acres_max` | Number | No | - | Maximum acreage. Used only without a URL. |
| `has_house` | String | No | `any` | `any`, `yes`, or `no`. Used only without a URL. |
| `sort_by` | String | No | `relevance` | `relevance`, `newest`, `price_low`, `price_high`, `acres_low`, or `acres_high`. Used only without a URL. |
| `results_wanted` | Integer | No | `20` | Maximum number of listings to save. |
| `max_pages` | Integer | No | `10` | Safety limit on result pages to fetch. Land.com shows 25 listings per page. |
| `proxyConfiguration` | Object | No | No proxy | Optional proxy settings. Enable Apify residential proxy from the United States if your network is blocked. |

### Usage Examples

#### Basic state search

Collect the first 20 farm listings in Texas:

```json
{
  "start_url": "https://www.land.com/Texas/farms/",
  "results_wanted": 20
}
```

#### Location and filters

Build a search for ranches in New York between 500,000 and 2,000,000 USD with at least 15 acres:

```json
{
  "location": "New York",
  "property_type": "ranches",
  "price_min": 500000,
  "price_max": 2000000,
  "acres_min": 15,
  "sort_by": "newest",
  "results_wanted": 100
}
```

#### Filtered URL with pagination

Use a Land.com URL that already contains price, acreage, house, and sort filters. The Actor follows the page segments:

```json
{
  "start_url": "https://www.land.com/Texas/all-land/under-200000/over-20-acres/",
  "results_wanted": 250,
  "max_pages": 10
}
```

#### County search

Paste a county results page to collect every listing in that county:

```json
{
  "start_url": "https://www.land.com/Madison-County-MS/all-land/",
  "results_wanted": 500
}
```

### Sample Output

```json
{
  "id": 21191274,
  "title": "Two Creeks Ranch",
  "url": "https://www.land.com/property/758-acres-in-medina-county-texas/21191274/",
  "price": 19612500,
  "price_display": "$19,612,500",
  "price_per_acre": 25874.01,
  "acres": 758,
  "acres_display": "758 acres",
  "property_type": "Farms, Recreational Property, Hunting Land",
  "city": "Hondo",
  "county": "Medina County",
  "state": "Texas",
  "state_abbreviation": "TX",
  "zip": "78861",
  "latitude": 29.365185,
  "longitude": -99.147,
  "has_house": false,
  "description": "Texas Oasis Awaits! Ranch with Lodges, Party Barn, Skeet Range and More!",
  "broker_name": "Howard W. Hood",
  "broker_company": "Hood Real Estate Inc",
  "broker_phone": "(830) 326-5993",
  "broker_url": "https://www.land.com/member/howard-w-hood/39718/",
  "thumbnail_url": "https://assets.land.com/resizedimages/600/0/h/80/w/1-5285496750",
  "image_urls": [
    "https://assets.land.com/resizedimages/600/0/h/80/w/1-5285496750",
    "https://assets.land.com/resizedimages/600/0/h/80/w/1-5285496751",
    "https://assets.land.com/resizedimages/600/0/h/80/w/1-5285496752"
  ],
  "image_count": 125,
  "status_code": 1,
  "listing_level": "Signature Partner",
  "listed_date": "2024-08-12T16:40:48.763Z",
  "updated_date": "2024-10-28T12:31:11.980Z",
  "lake": "Private Lake",
  "is_diamond": true,
  "is_gold": false,
  "is_platinum": false,
  "is_showcase": false,
  "source": "land.com",
  "scraped_at": "2026-10-25T16:30:00.000Z"
}
```

The sample shortens `image_urls` to three links. Real records include the full gallery.

### Tips for Best Results

- Start with a small `results_wanted` value to check the dataset shape before scheduling a large run.
- Use the Land.com website to build filters, then copy the URL into `start_url`. This avoids guessing filter names.
- Keep `max_pages` at 10 or higher when you request more than 250 listings, because each page contains 25 records.
- The Actor runs without a proxy by default. If Land.com blocks your network, enable Apify residential proxy from the United States or supply your own proxy URL.
- Land.com changes listings often. Schedule daily or weekly runs when you need current inventory.
- Some fields are missing because Land.com does not publish them for every listing. Empty values are removed rather than saved as null.
- If a run returns no listings, check the URL filters first, then test with a broader state search.

### Integrations

- **Google Sheets** - Send new listings to a spreadsheet for review or sharing.
- **Webhooks** - Trigger downstream workflows after a run finishes.
- **Make or Zapier** - Connect listings to CRM, email, or reporting tools.
- **Apify API** - Read datasets from your own application or data warehouse.
- **Schedules** - Refresh land inventory on a daily, weekly, or custom interval.

### Frequently Asked Questions

#### Can I export Land.com listings to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, HTML, and other supported formats.

#### Can I scrape a filtered Land.com search?

Yes. Paste the filtered results URL from your browser into `start_url`. Price, acreage, county, house, status, sort, and page settings in the URL are preserved.

#### Does the Actor follow pagination?

Yes. It follows the next result page until it reaches `results_wanted` or `max_pages`.

#### How many listings are on one Land.com page?

Land.com shows 25 listings per page. A request for 100 listings normally needs four pages.

#### Does the Actor collect broker phone numbers?

Yes, when Land.com publishes a phone number for the listing broker. The dataset also includes the broker name, company, and profile URL.

#### Why are some fields missing from a record?

Land.com does not publish every field for every property. Empty values are removed from the dataset instead of being saved as null.

#### Can I run this Actor on a schedule?

Yes. Create a schedule in Apify Console and use the same input for each run.

#### Why did the Actor fail with HTTP 403?

Land.com may block your network or proxy IP. Enable Apify residential proxy from the United States, or supply your own proxy URL, then run again. The Actor rotates proxy sessions automatically, but a proxy pool that Land.com has rate-limited can still be refused.

#### Do I need a Land.com account?

No. The Actor collects public listing data and does not require a Land.com login.

#### Can I use several search URLs in one run?

This Actor accepts one `start_url` per run. To collect several markets, create a task for each URL or run the Actor multiple times with different input.

#### Is it legal to scrape Land.com?

Scraping public data can be legal, but you are responsible for complying with applicable laws, Land.com terms, and privacy rules. Use the data responsibly and do not collect private or restricted information.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is designed for legitimate collection of publicly available listing data. It is not affiliated with, endorsed by, or sponsored by Land.com or CoStar Group. Users are responsible for how they use the data and for complying with applicable laws and website terms.

# Actor input Schema

## `start_url` (type: `string`):

Any Land.com search or results URL. Takes priority over location and filters. Example: https://www.land.com/Texas/farms/

## `location` (type: `string`):

State, county, or city to search when no URL is supplied. Example: Texas, New York, Madison County MS.

## `property_type` (type: `string`):

Land category used when building a search from the location.

## `price_min` (type: `integer`):

Lowest listing price used when building a search from the location.

## `price_max` (type: `integer`):

Highest listing price used when building a search from the location.

## `acres_min` (type: `number`):

Smallest acreage used when building a search from the location.

## `acres_max` (type: `number`):

Largest acreage used when building a search from the location.

## `has_house` (type: `string`):

Filter by whether the property has a house.

## `sort_by` (type: `string`):

Result order used when building a search from the location.

## `results_wanted` (type: `integer`):

Maximum number of listings to save.

## `max_pages` (type: `integer`):

Safety limit on the number of result pages to fetch.

## `proxyConfiguration` (type: `object`):

Optional. Leave disabled for the default run. Enable Apify residential proxy from the United States if Land.com blocks your network.

## Actor input object example

```json
{
  "location": "Texas",
  "property_type": "farms",
  "has_house": "any",
  "sort_by": "relevance",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "location": "Texas"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/land-com-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 = { "location": "Texas" }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/land-com-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 '{
  "location": "Texas"
}' |
apify call shahidirfan/land-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/land-com-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/ghmCGrmqX7hoCyNcs/builds/gv9ZiixjIVFsisNxG/openapi.json
