# LandSearch Scraper (`solidcode/landsearch-scraper`) Actor

\[💰 $0.7 / 1K] Extract US land, farm, ranch, hunting land and rural property listings from LandSearch. Filter by state, county, city or ZIP, acreage, price, land features and home details. Get prices, GPS, photos, price history and agent contacts.

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

## Pricing

from $0.70 / 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/platform/actors/running/actors-in-store#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

## LandSearch Scraper

Pull US land, farm, ranch and rural property listings from LandSearch at scale — asking price, acreage, computed price per acre, GPS coordinates, elevation, land-feature tags, price history, school district, MLS name and number, and verified listing-agent and brokerage contacts on every parcel. Built for land investors, ranch and farm buyers, rural real estate agents, land brokers, timber and hunting-lease operators, and appraisers who need a filterable, spreadsheet-ready land dataset without hand-building search URLs one county at a time.

### Why This Scraper?

- **34 inputs, 30 of them real search filters** — price, acreage, price per acre, property type, listing format, keywords, days on market, bedrooms, bathrooms, home size and year built. Type "Travis County, TX" and the search builds itself; no URL syntax to learn.
- **74 land-feature tags across 7 categories** — terrain & setting (10), current land use (14), buildings on the land (12), utilities & improvements (6), natural features (14), recreational activities (8) and deal type (10). "Off-grid timberland with a creek and mineral rights" is four checkboxes.
- **Price-per-acre filtering on both ends** — set a minimum and maximum $/acre, the classic land-value screen, and get a computed `pricePerAcre` on every single row so you can rank an entire county in one sort.
- **Owner-financing and for-sale-by-owner screens** — `Owner financing available`, `For sale by owner`, `Rent to own`, `Distressed` and `Unrestricted (no zoning limits)` are one-click deal filters, backed by an `isForSaleByOwner` flag on every enriched row.
- **GPS coordinates and elevation on every parcel** — latitude, longitude, a location-precision label and elevation in feet, ready to drop straight into QGIS, Google Earth or any mapping layer.
- **Verified listing-agent and brokerage contacts** — agent name, phone, profile link, brokerage name and brokerage phone, plus the MLS name and MLS number when the listing originated from an MLS.
- **Complete price history per property** — every listing, price-change and status event with date, event label, price and status. Populated on 100% of detail-enriched rows in our 100-property Texas sample.
- **Nationwide US coverage, searchable four ways** — 426,000+ active listings addressable by state ("Texas"), county ("Travis County, TX"), city ("Austin, TX") or ZIP ("76082").
- **7 sort orders, including price and size in both directions** — featured, newest, price high→low, price low→high, size large→small, size small→large and recently updated, so you can capture the top and the bottom of a market in two runs.

### Use Cases

**Land Investment & Acquisition**

- Screen a whole state for parcels under a target price per acre before they circulate
- Surface owner-financed and for-sale-by-owner deals that skip the mainstream portals
- Catch fresh inventory with the "Last 24 hours" listing-age filter
- Rank counties by median $/acre using the computed value on every row

**Agricultural & Ranch Acquisition**

- Find cattle ranches, row-crop farms, dairy, chicken and organic operations by current land use
- Require irrigation, fencing, a water well or water rights before you spend a day touring
- Match acreage bands to a grazing plan with minimum and maximum acres
- Pull pasture, orchard and vineyard parcels in a single filtered run

**Brokerage & Lead Generation**

- Build county-level call lists of listing agents and brokerages with phone numbers
- Identify for-sale-by-owner sellers who are likely to want representation
- Watch competitor listings and how long they sit on market
- Feed new matching listings into your CRM automatically

**Appraisal & Active Comparables**

- Assemble active-listing comp sets by county, acreage band and price per acre
- Track price-change history to measure how far sellers actually move
- Use coordinates and elevation for terrain-adjusted comparisons
- Cross-reference MLS name and MLS number for source verification

**Recreational Land & Hunting Leases**

- Target hunting, fishing, waterfowl and equestrian parcels by activity tag
- Find land that borders public land for expanded access
- Filter for creek, stream, pond, spring or wooded acreage
- Locate cabins, lodges, barns and bunkers already standing for turnkey camps

### Getting Started

#### Simplest — paste a LandSearch URL

```json
{
  "startUrls": ["https://www.landsearch.com/properties/texas"],
  "maxResults": 100
}
```

#### Search by location with a value screen

```json
{
  "searchLocations": ["Travis County, TX", "Bandera County, TX"],
  "minAcres": 20,
  "maxPrice": 750000,
  "maxPricePerAcre": 15000,
  "sortBy": "price_low_high",
  "maxResults": 500
}
```

#### Recreational land with specific features

```json
{
  "searchLocations": ["Missouri"],
  "propertyTypes": ["recreational"],
  "activities": ["hunting", "fishing"],
  "naturalFeatures": ["creek", "wooded"],
  "buildings": ["cabin"],
  "minAcres": 40,
  "maxDaysOnMarket": "30",
  "sortBy": "newest",
  "maxResults": 200
}
```

#### Advanced — owner-financed ranch with a house on it

```json
{
  "searchLocations": ["Kerr County, TX", "Gillespie County, TX"],
  "propertyTypes": ["agricultural", "recreational"],
  "landUses": ["ranch", "cattle-ranch"],
  "dealTypes": ["owner-financing"],
  "utilities": ["water-well", "fenced"],
  "hasHome": "yes",
  "minBedrooms": "3",
  "minBathrooms": "2",
  "minHomeSqft": 1500,
  "minYearBuilt": 1990,
  "minAcres": 50,
  "maxAcres": 500,
  "minPrice": 250000,
  "maxPrice": 3000000,
  "listingFormat": "sales",
  "mustHavePhotos": true,
  "excludePending": true,
  "sortBy": "size_large_small",
  "includePropertyDetails": true,
  "maxResults": 1000
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | array | `["https://www.landsearch.com/properties/texas"]` | Paste LandSearch search pages or single property pages. Filters already in the URL are kept; the filters below do not apply to these. |
| `searchLocations` | array | `[]` | Type a place instead: a state (`Texas`), county (`Travis County, TX`), city (`Austin, TX`) or ZIP (`76082`). Each becomes its own search using the filters below. |

#### Core Search Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `propertyTypes` | array | all types | `residential`, `commercial`, `agricultural`, `recreational`. |
| `listingFormat` | string | `"any"` | `any`, `sales` (for sale only), `leases` (for lease only), `auctions` (auctions only). |
| `minPrice` / `maxPrice` | integer | empty | Asking price range in USD. |
| `minAcres` / `maxAcres` | number | empty | Parcel size range in acres. Decimals accepted (e.g. `0.5`). |
| `minPricePerAcre` / `maxPricePerAcre` | integer | empty | Price-per-acre range in USD — the classic land-value screen. |
| `keywords` | string | empty | Match a word or phrase in the listing description, e.g. `cabin`, `creek frontage`, `owner will carry`. |
| `maxDaysOnMarket` | string | any age | Listed within the last `1`, `3`, `7`, `30`, `90` or `180` days. |
| `sortBy` | string | `"featured"` | `featured`, `newest`, `price_high_low`, `price_low_high`, `size_large_small`, `size_small_large`, `recently_updated`. |

#### Home & Building Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `hasHome` | string | `"any"` | `any`, `yes` (must have a building), `no` (bare land only). |
| `minBedrooms` / `maxBedrooms` | string | empty | `1`–`5`. Minimum reads as "1+ bedrooms", maximum as "up to 1 bedroom". |
| `minBathrooms` | string | empty | `1`–`4`, read as "1+ bathrooms". |
| `minHomeSqft` / `maxHomeSqft` | integer | empty | Building size range in square feet. |
| `minYearBuilt` / `maxYearBuilt` | integer | empty | Year the building was constructed. |

#### Land Feature Filters

Every value below is a real LandSearch tag. Picking options across several boxes narrows the search each time — a property must match **all** of them at once.

| Parameter | Type | Values |
|-----------|------|--------|
| `terrain` | array | Rural, Mountain, Waterfront, Lakefront, Riverfront, Beachfront, Island, Desert, Resort, Off grid |
| `landUses` | array | Ranch, Cattle ranch, Homestead, Hobby farm, Organic farm, Row crop, Dairy farm, Chicken farm, Timberland, Development land, Investment, Industrial, Mixed use, RV lot |
| `buildings` | array | House, Cabin, Cottage, Farm house, A-frame house, Barndominium, Lodge, Tiny home, Mobile home, Barn, Workshop, Bunker |
| `utilities` | array | Water well, Septic system, Solar power, Fenced, Irrigated, Airstrip |
| `naturalFeatures` | array | Creek, Stream, Pond, Spring, Waterfall, Wetland, Wooded, Pasture, Orchard, Vineyard, Cave, Mineral rights, Water rights, Oil |
| `activities` | array | Hunting, Fishing, Waterfowl, Equestrian, Camping, Conservation, Borders public land, Golf course lot |
| `dealTypes` | array | Owner financing available, For sale by owner, Rent to own, Cheap land, Distressed, Vacant, Unrestricted (no zoning limits), New construction, Historic, Sustainable |

#### Listing Quality

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mustHavePhotos` | boolean | `false` | Skip listings with no photos at all. |
| `listingSource` | string | `"any"` | `any`, `mls` (agent-listed only), `non_mls` (often sold directly by the owner). |
| `excludePending` | boolean | `false` | Skip properties that already have an accepted offer. |
| `excludeHoa` | boolean | `false` | Skip properties belonging to a homeowners association. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Total properties to collect across every URL and location. You get exactly this many when that many match — never a rounded-up batch. `0` collects every match, up to 500,000 in one run. |
| `includePropertyDetails` | boolean | `true` | Also collect street address, full description, every photo, price history, land and building features, elevation, school district, MLS number, and agent contacts. Turn off for a fast overview. |

### Output

Every property is one flat row of clean camelCase fields — no ad or tracking payload to strip out.

```json
{
  "id": 5454685,
  "url": "https://www.landsearch.com/properties/2088-eagles-ridge-dr-weatherford-tx-76087/5454685",
  "title": "3 Acres of Land with Home for Sale in Weatherford, Texas",
  "price": 850000,
  "acres": 3.005,
  "pricePerAcre": 282862.0,
  "status": "active",
  "format": "sale",
  "promoted": false,
  "listedAt": "2026-07-31T22:56:46+00:00",
  "daysOnMarket": 1,
  "updatedAt": "2026-08-01T01:34:24Z",
  "address": "2088 Eagles Ridge Dr",
  "city": "Weatherford",
  "county": "Parker",
  "state": "Texas",
  "stateCode": "TX",
  "zip": "76087",
  "region": "North Texas",
  "neighborhood": "Eagles Bluff PH 4",
  "subdivision": "Eagles Bluff PH 4",
  "latitude": 32.650574,
  "longitude": -97.877844,
  "locationPrecision": "high",
  "elevation": 894,
  "propertyTypes": ["Residential"],
  "tags": ["House", "Irrigated", "Septic", "Water well", "Wooded", "Workshop"],
  "bedrooms": 4,
  "bathrooms": 2,
  "fullBathrooms": 2,
  "halfBathrooms": null,
  "homeSqft": 2566,
  "yearBuilt": 2023,
  "schoolDistrict": "Brock ISD",
  "mlsName": "North Texas Real Estate Information Systems",
  "mlsNumber": "21346267",
  "isForSaleByOwner": false,
  "agentName": "Jordan Avery",
  "agentPhone": "(555) 014-2200",
  "agentUrl": "https://www.landsearch.com/agents/jordan-avery",
  "brokerageName": "Hill Country Land Co.",
  "brokeragePhone": "(555) 014-2100",
  "thumbnailUrl": "https://cdn.landsearch.com/listings/4VKMC/large/weatherford-tx-176217902.jpg",
  "totalImages": 40,
  "images": ["https://cdn.landsearch.com/listings/4VKMC/large/weatherford-tx-176217902.jpg"],
  "priceHistory": [
    { "date": "2026-08-01T00:34:11Z", "event": "New listing", "price": 850000, "status": "active" }
  ],
  "attributes": {
    "Lot": { "Vegetation": ["Brush", "Grassed", "Wooded"], "Features": ["Acreage", "Many Trees"] },
    "Structure": { "Water": ["Well"], "Sewer": ["Aerobic Septic"], "Roof": ["Asphalt"] }
  },
  "description": "Nestled within the prestigious gated community of Eagles Bluff, this custom-built estate offers..."
}
```

#### Core Listing

| Field | Type | Description |
|-------|------|-------------|
| `id` | number | LandSearch property ID |
| `url` | string | Direct link to the property page |
| `title` | string | Listing headline, e.g. "3 Acres of Land with Home for Sale in Weatherford, Texas" |
| `price` | number | Asking price in USD |
| `acres` | number | Parcel size in acres |
| `pricePerAcre` | number | Computed price ÷ acres, rounded to cents |
| `status` | string | Listing status, e.g. `active` |
| `format` | string | `sale`, `lease` or `auction` |
| `promoted` | boolean | Whether the listing is a promoted/featured placement |
| `listedAt` | string | First-listed timestamp, ISO 8601 |
| `daysOnMarket` | number | Days since the listing date |
| `updatedAt` | string | Last update timestamp, ISO 8601 |
| `description` | string | Full listing description text |

#### Location & Geography

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Street address |
| `city` | string | City or locality |
| `county` | string | County name |
| `state` | string | Full state name |
| `stateCode` | string | Two-letter state code |
| `zip` | string | ZIP code |
| `region` | string | Named region, e.g. "North Texas" |
| `neighborhood` | string | Neighborhood name |
| `subdivision` | string | Subdivision name |
| `latitude` | number | Latitude in decimal degrees |
| `longitude` | number | Longitude in decimal degrees |
| `locationPrecision` | string | How exactly the coordinates are pinned, e.g. `high` |
| `elevation` | number | Elevation in feet |

#### Land Features & Classification

| Field | Type | Description |
|-------|------|-------------|
| `propertyTypes` | string\[] | Property type names, e.g. `["Agricultural", "Recreational"]` |
| `tags` | string\[] | Land-feature tag names, e.g. `["Wooded", "Water well", "Workshop"]` |
| `attributes` | object | Grouped listing attributes — Lot, Structure, Interior, Exterior and more, exactly as published |

#### Home & Building

| Field | Type | Description |
|-------|------|-------------|
| `bedrooms` | number | Bedroom count |
| `bathrooms` | number | Combined bathroom count |
| `fullBathrooms` | number | Full bathrooms |
| `halfBathrooms` | number | Half bathrooms |
| `homeSqft` | number | Building size in square feet |
| `yearBuilt` | number | Year the building was constructed |
| `schoolDistrict` | string | Assigned school district |

#### Agent, Brokerage & Source

| Field | Type | Description |
|-------|------|-------------|
| `agentName` | string | Listing agent name |
| `agentPhone` | string | Listing agent phone, formatted |
| `agentUrl` | string | Agent profile link |
| `brokerageName` | string | Brokerage or team name |
| `brokeragePhone` | string | Brokerage phone, formatted |
| `mlsName` | string | Originating MLS name |
| `mlsNumber` | string | MLS listing number |
| `sourceUrl` | string | Link to the listing on its originating site |
| `isForSaleByOwner` | boolean | Whether the seller is listing without an agent |

#### Photos & Price History

| Field | Type | Description |
|-------|------|-------------|
| `thumbnailUrl` | string | Primary photo URL |
| `totalImages` | number | Number of photos on the listing |
| `images` | string\[] | Full-size URLs for every photo in the gallery |
| `priceHistory` | object\[] | Every listing and price-change event: `date`, `event`, `price`, `status` |

### Tips for Best Results

- **Start with 20–50 results** to confirm the fields match your needs, then scale up. You are charged for exactly the number you ask for, so a small trial run stays cheap.
- **A single search reaches every matching property.** Texas alone has roughly 53,000 active listings and one run will walk all of them, so you only need to split a state into counties when you want the results grouped that way.
- **Power user: sort deliberately when you cap the run.** `maxResults` takes the first N in whatever order you chose, so `price_low_high` on a 500-result cap gives you the cheapest 500 in the county rather than an arbitrary 500 — and `recently_updated` surfaces the sellers who just moved on price.
- **Land-feature boxes narrow, they never widen.** A property must match every tag you tick across all seven feature categories at once. Add one tag, confirm you still get results, then add the next.
- **`maxPricePerAcre` is the highest-yield first filter.** Pair it with `minAcres` to strip out small suburban house lots that otherwise distort a county's average land value.
- **Turn `includePropertyDetails` off for a fast market survey.** You keep price, acreage, $/acre, coordinates, county and days on market — but street address, description, photo gallery, agent contacts and price history only arrive with it on.
- **Keep URL runs and location runs separate.** Anything in `startUrls` carries its own filters and ignores the filter panel, so mixing the two in one run makes result counts harder to predict.

### Pricing

**From $0.70 per 1,000 results** — undercutting the only other LandSearch actor on the store while shipping 30 search filters it does not have. Bronze, Silver and Gold subscribers pay progressively less; the table shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.084 | $0.080 | $0.075 | $0.070 |
| 1,000 | $0.84 | $0.80 | $0.75 | $0.70 |
| 10,000 | $8.40 | $8.00 | $7.50 | $7.00 |
| 100,000 | $84.00 | $80.00 | $75.00 | $70.00 |

A "result" is one property row in your dataset. **No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.**

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger your own services on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is intended for legitimate land market research, investment analysis, appraisal support and lead generation. You are responsible for complying with applicable laws and LandSearch's Terms of Service. Agent and brokerage contact details are published by the listings themselves — do not use them for spam, harassment, or any unlawful purpose, and honor applicable do-not-call and anti-solicitation rules. Be mindful of fair housing regulations when working with property and location data.

# Actor input Schema

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

Paste LandSearch URLs directly — either a search page (e.g. https://www.landsearch.com/properties/texas) or a single property page (e.g. https://www.landsearch.com/properties/1886-jay-bird-ln-springtown-tx-76082/4041412). Any filters already in the URL are kept — if one of them is misspelled or unsupported it is skipped and named in the log, so watch for that when you hand-edit an address. The filter settings below do NOT apply to these URLs — everything comes from the URL itself.

## `searchLocations` (type: `array`):

Search by typing a place instead of building a URL. Works with a state ('Texas'), a county ('Travis County, TX'), a city ('Austin, TX') or a ZIP code ('76082'). Each location becomes its own search using the filters below.

## `propertyTypes` (type: `array`):

Only show these kinds of land. Leave empty for all types. Selecting several widens the search.

## `listingFormat` (type: `string`):

Include everything, or narrow to properties for sale, for lease, or going to auction.

## `minPrice` (type: `integer`):

Only show properties priced at or above this amount. Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Only show properties priced at or below this amount. Leave empty for no maximum.

## `minAcres` (type: `number`):

Only show properties of at least this many acres. Decimals are fine (e.g. 0.5). Leave empty for no minimum.

## `maxAcres` (type: `number`):

Only show properties up to this many acres. Leave empty for no maximum.

## `minPricePerAcre` (type: `integer`):

Only show properties at or above this price per acre. Useful for filtering out low-value remote parcels.

## `maxPricePerAcre` (type: `integer`):

Only show properties at or below this price per acre. This is the classic land-value filter for finding bargains.

## `keywords` (type: `string`):

Only show listings whose description mentions this word or phrase, for example 'cabin', 'creek frontage' or 'owner will carry'.

## `maxDaysOnMarket` (type: `string`):

Only show properties first listed within this many days. Great for spotting fresh inventory before it moves. Leave empty to include listings of any age.

## `sortBy` (type: `string`):

Order of the results. When you collect fewer properties than your search matches, this decides which ones you get — sort by price or by newest to put the listings you care about at the top.

## `hasHome` (type: `string`):

Whether the land must include a building or residence.

## `minBedrooms` (type: `string`):

Only show properties with a home of at least this many bedrooms. Leave empty for any number of bedrooms.

## `maxBedrooms` (type: `string`):

Only show properties with a home of at most this many bedrooms. Leave empty for any number of bedrooms.

## `minBathrooms` (type: `string`):

Only show properties with a home of at least this many bathrooms. Leave empty for any number of bathrooms.

## `minHomeSqft` (type: `integer`):

Only show properties whose building is at least this many square feet.

## `maxHomeSqft` (type: `integer`):

Only show properties whose building is at most this many square feet.

## `minYearBuilt` (type: `integer`):

Only show properties whose building was built in or after this year.

## `maxYearBuilt` (type: `integer`):

Only show properties whose building was built in or before this year.

## `terrain` (type: `array`):

Only show properties in these kinds of settings. Picking several narrows the search further, so start with one.

## `landUses` (type: `array`):

Only show properties currently used this way.

## `buildings` (type: `array`):

Only show properties with one of these kinds of building on them.

## `utilities` (type: `array`):

Only show properties that already have these in place — a big deal for build-ready land.

## `naturalFeatures` (type: `array`):

Only show properties with these natural features. 'Mineral rights' and 'Oil' matter most to investors.

## `activities` (type: `array`):

Only show properties suited to these activities.

## `dealTypes` (type: `array`):

Only show properties matching these deal characteristics. 'Owner financing' and 'For sale by owner' are the classic off-market investor filters.

## `mustHavePhotos` (type: `boolean`):

Skip listings that have no photos at all.

## `listingSource` (type: `string`):

Whether the listing comes from an MLS (agent-listed) or not. Non-MLS listings are often sold directly by the owner.

## `excludePending` (type: `boolean`):

Skip properties that already have an accepted offer.

## `excludeHoa` (type: `boolean`):

Skip properties belonging to a homeowners association.

## `maxResults` (type: `integer`):

Maximum number of properties to collect across every URL and location. You get exactly this many when that many match — never more, never a rounded-up batch. Set to 0 to collect every property that matches your search (up to 500,000 in a single run, which is more than LandSearch lists nationwide). Tip: start with 10-50 to check the output, then increase.

## `includePropertyDetails` (type: `boolean`):

Also collect the street address, full description, every photo, price history, land and building features, elevation, school district, MLS number, and the listing agent's name and phone number. Turn this off for a fast overview — but note the street address, description, photo gallery, agent contacts and price history are only available with it on.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.landsearch.com/properties/texas"
  ],
  "searchLocations": [],
  "propertyTypes": [],
  "listingFormat": "any",
  "sortBy": "featured",
  "hasHome": "any",
  "terrain": [],
  "landUses": [],
  "buildings": [],
  "utilities": [],
  "naturalFeatures": [],
  "activities": [],
  "dealTypes": [],
  "listingSource": "any",
  "maxResults": 100,
  "includePropertyDetails": true
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of collected properties with price, acreage, price per acre, location and status.

## `land` (type: `string`):

Acreage, price per acre, property types, feature tags and GPS coordinates for every property.

## `homes` (type: `string`):

Bedrooms, bathrooms, home size, year built and school district for properties that include a building.

## `agents` (type: `string`):

Listing agent and brokerage contact details for every property.

# 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": [
        "https://www.landsearch.com/properties/texas"
    ],
    "searchLocations": [],
    "propertyTypes": [],
    "listingFormat": "any",
    "sortBy": "featured",
    "hasHome": "any",
    "terrain": [],
    "landUses": [],
    "buildings": [],
    "utilities": [],
    "naturalFeatures": [],
    "activities": [],
    "dealTypes": [],
    "mustHavePhotos": false,
    "listingSource": "any",
    "excludePending": false,
    "excludeHoa": false,
    "maxResults": 100,
    "includePropertyDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/landsearch-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": ["https://www.landsearch.com/properties/texas"],
    "searchLocations": [],
    "propertyTypes": [],
    "listingFormat": "any",
    "sortBy": "featured",
    "hasHome": "any",
    "terrain": [],
    "landUses": [],
    "buildings": [],
    "utilities": [],
    "naturalFeatures": [],
    "activities": [],
    "dealTypes": [],
    "mustHavePhotos": False,
    "listingSource": "any",
    "excludePending": False,
    "excludeHoa": False,
    "maxResults": 100,
    "includePropertyDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/landsearch-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 '{
  "startUrls": [
    "https://www.landsearch.com/properties/texas"
  ],
  "searchLocations": [],
  "propertyTypes": [],
  "listingFormat": "any",
  "sortBy": "featured",
  "hasHome": "any",
  "terrain": [],
  "landUses": [],
  "buildings": [],
  "utilities": [],
  "naturalFeatures": [],
  "activities": [],
  "dealTypes": [],
  "mustHavePhotos": false,
  "listingSource": "any",
  "excludePending": false,
  "excludeHoa": false,
  "maxResults": 100,
  "includePropertyDetails": true
}' |
apify call solidcode/landsearch-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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