# Land.com Scraper | All-In-One (`fatihtahta/land-com-scraper`) Actor

Extract structured Land.com property listings and agent profiles with contacts, pricing, acreage, locations, media, and broker data. Built for enterprise-grade land intelligence, lead enrichment, market analysis, and automated real estate data pipelines.

- **URL**: https://apify.com/fatihtahta/land-com-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 18 total users, 5 monthly users, 100.0% runs succeeded, 4 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?

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 Scraper

**Slug:** `fatihtahta/land-com-scraper`

### Overview

Land.com Scraper collects structured public data from land and rural property listings on [Land.com](https://www.land.com), including listing identifiers, titles, descriptions, pricing, acreage, location details, broker information, media, and other property attributes. It can also be used for directory-style agent searches when you want seller, broker, or agent discovery instead of listing inventory. [Land.com](https://www.land.com) is a widely used marketplace for land, ranch, farm, recreational, and rural property listings, which makes it a valuable source for market visibility and property discovery. The actor turns that public information into consistent JSON records you can reuse across analysis, reporting, enrichment, and monitoring workflows. This helps teams automate repetitive collection work, reduce manual copy-paste, and keep datasets fresh with less effort.

### Why Use This Actor

- **Market research and analytics:** Track listing volume, pricing, acreage, status changes, and regional inventory patterns for specific markets or property categories.
- **Product and content teams:** Identify listing themes, featured property types, and content trends to inform landing pages, editorial calendars, and marketplace strategy.
- **Developers and data engineers:** Feed structured listing data into ETL jobs, dashboards, internal catalogs, and downstream APIs without building a custom ingestion flow.
- **Lead generation and enrichment:** Find relevant listings, brokers, and market activity to support prospecting, qualification, and CRM enrichment workflows.
- **Monitoring and competitive tracking:** Watch targeted geographies, fresh listings, price reductions, and brokerage presence over time to spot changes quickly.

### Input Parameters

Provide any combination of queries and filters. Leave optional fields empty for broader coverage.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `location` | `string` | Starting search area for listings. Enter a city, county, state, ZIP code, or similar place name. | – |
| `property_type` | `string[]` | Property categories to include. Allowed values: `ranch`, `homesite`, `farm`, `recreational`, `timberland`, `horse`, `waterfront`, `beachfront`, `lakefront`, `riverfront`, `commercial`, `hunting`, `undeveloped`. | `[]` |
| `sale_type` | `string[]` | Listing sale formats to include. Allowed values: `sale`, `auction`. | `["sale", "auction"]` |
| `listing_status` | `string[]` | Listing stages to include. Allowed values: `available`, `pending`, `sold`, `off_market`. | `["available", "pending"]` |
| `publication_date` | `string` | Limit results to recently published listings. Allowed values: `past_24_hours`, `past_7_days`, `past_30_days`, `past_60_days`. | – |
| `keyword` | `string` | Keyword or phrase to match, such as `cabin`, `hunting land`, or `owner financing`. | – |
| `owner_financing` | `boolean` | When `true`, keeps only listings that mention owner financing. | `false` |
| `nineral_rights` | `boolean` | When `true`, keeps only listings that mention mineral rights. | `false` |
| `price_reduction_days` | `string` | Limit results to listings with recent price reductions. Allowed values: `past_3_days`, `past_7_days`, `past_30_days`, `past_60_days`, `past_90_days`. | – |
| `have_media` | `string[]` | Require specific media types on the listing. Allowed values: `virtual_tour`, `video`, `custom_map`. | `[]` |
| `activites` | `string` | Focus on a specific activity-oriented use case. Allowed values: `aquatic_sporting`, `aviation`, `beach`, `boating`, `camping`, `canoeing_kayaking`, `conservation`, `fishing`, `golfing`, `horseback_riding`, `hunting`, `off_roading`, `rving`, `skiing`. | – |
| `hoa` | `string` | HOA preference for the property. Allowed values: `no`, `yes_mandatory`, `yes_voluntary`. | – |
| `housing_type` | `string` | Housing type to target on the property. Allowed values: `barndominium`, `cabin`, `cottage`, `guest_house`, `lake_house`, `mobile_home`, `tiny_home`. | – |
| `geography` | `string` | Geographic setting to target. Allowed values: `beachfront`, `desert`, `island`, `lakefront`, `mountain`, `off_grid`, `resort`, `riverfront`, `rural`. | – |
| `land_usage` | `string` | Intended land-use category. Allowed values: `homestead`, `hobby_farm`, `orchard`, `pasture`, `poultry_farm`, `vineyard`. | – |
| `sort_by` | `string` | Sort order for results. Allowed values: `default`, `acres_small_to_large`, `acres_large_to_small`, `newest`, `price_low_to_high`, `price_high_to_low`, `price_per_acre_low_to_high`, `price_per_acre_high_to_low`, `recently_updated`. | `default` |
| `residence` | `string` | Whether to include listings with a residence, without one, or either. Allowed values: `either`, `yes`, `no`. | `either` |
| `min_bedroom` | `string` | Minimum bedroom count. Allowed values: `1_plus`, `2_plus`, `3_plus`, `4_plus`, `5_plus`. | – |
| `min_bathroom` | `string` | Minimum bathroom count. Allowed values: `1_plus`, `2_plus`, `3_plus`, `4_plus`, `5_plus`. | – |
| `min_price` | `integer` | Minimum listing price to include. | – |
| `max_price` | `integer` | Maximum listing price to include. | – |
| `min_acre` | `integer` | Minimum parcel size in acres. | – |
| `max_acre` | `integer` | Maximum parcel size in acres. | – |
| `min_area` | `integer` | Minimum building area in square feet. | – |
| `max_area` | `integer` | Maximum building area in square feet. | – |
| `agents_search` | `boolean` | Switches the run to agent and brokerage directory results instead of property listings. | `false` |
| `agents_location` | `string` | City, county, or state to use for agent directory searches. Required when `agents_search` is `true`. | – |
| `agents_type` | `string` | Agent or seller profile type to include. Allowed values: `all`, `real_estate_broker`, `real_estate_agent`, `land_auctioneer`, `property_owner`, `land_retailer`. | `all` |
| `maximize_coverage` | `boolean` | Expands collection to capture more matching listings from a given search. | `true` |
| `limit` | `integer` | Maximum number of records to save per search input. Useful for testing, sampling, or controlling dataset size. | – |

### Input selection tips

- Use a broad `location` by itself when you want a wide market view, early-stage discovery, or a larger inventory sample for analysis.
- Add narrower filters such as `property_type`, `listing_status`, `publication_date`, `keyword`, or price and acreage ranges when you already know the segment you want to track.
- Leave `maximize_coverage` enabled when your goal is broader collection across a market. Turn it off only when you want a tighter, more direct result set for review or sampling.
- Start with a smaller `limit` for testing, QA, or schema validation. Increase the limit once your search settings are returning the right type of records.
- Use `agents_search` only when you want broker, agent, auctioneer, owner, or retailer directory results rather than property listings.

### When to use agent scraping

Use agent scraping when your goal is to understand who is active in a market, not just which properties are listed there. It is useful for brokerage research, lead enrichment, territory mapping, partner discovery, and tracking which firms or agents have an active presence in a specific state, county, or city.

To run an agent-focused search, enable `agents_search`, set `agents_location`, and optionally narrow the results with `agents_type`. This mode is a good fit when you want contact and company details, market presence signals, or broker-level inventory context instead of individual listing records.

### Example Inputs

**Scenario: Broad location-based inventory search**

```json
{
  "location": "Montana",
  "property_type": ["ranch", "recreational"],
  "sale_type": ["sale"],
  "listing_status": ["available"],
  "sort_by": "newest",
  "limit": 250
}
```

**Scenario: Fresh owner-financed listings with media**

```json
{
  "location": "Arizona",
  "keyword": "off grid",
  "owner_financing": true,
  "publication_date": "past_7_days",
  "have_media": ["video", "custom_map"],
  "geography": "desert",
  "limit": 150
}
```

**Scenario: Agent directory search**

```json
{
  "agents_search": true,
  "agents_location": "Texas",
  "agents_type": "real_estate_broker",
  "maximize_coverage": true,
  "limit": 100
}
```

### Common Workflows

- **Monitor new ranch listings in Montana:** Set `location` to `Montana`, choose `property_type` as `ranch`, use `listing_status` such as `available`, and sort by `newest`.
- **Track recent price reductions in a target state:** Use a state-level `location` with `price_reduction_days` and optional price or acreage filters to monitor listings with fresh pricing changes.
- **Find owner-financed rural land:** Combine `location`, `owner_financing`, and optional filters like `geography`, `land_usage`, or `keyword` to focus on alternative purchase opportunities.
- **Search brokers in Texas:** Enable `agents_search`, set `agents_location` to `Texas`, and optionally narrow with `agents_type` for broker or agent-specific discovery.
- **Compare recreational versus hunting inventory:** Run separate searches for the same location using `property_type` values such as `recreational` and `hunting` to compare supply and pricing patterns.
- **Validate a search before scaling up:** Start with your target filters and a smaller `limit` to confirm the dataset shape, then raise the limit for broader collection.

### Output

#### 6.1 Output destination

The actor writes normalized real estate records to the default Apify dataset. Property searches produce `property_listing` rows. Agent-directory searches produce `agent` rows.

#### 6.2 Record envelope (all items)

Every record includes a stable record envelope:

- **record\_type** *(string, required)*: Record category. Current values: `property_listing`, `agent`.
- **record\_id** *(string, required)*: Stable Land.com identifier preserved as a string.
- **source\_context** *(object, required)*: Source, URL, page, and seed context for audit and attribution.
- **entity** *(object, required)*: Human-readable title, description, and canonical URL.

Recommended idempotency key: `record_type + ":" + record_id`

Use this key for deduplication and upserts when the same record appears in multiple runs, search inputs, or refresh cycles.

#### 6.3 Examples

**Example: property listing (`record_type = "property_listing"`)**

```json
{
  "record_type": "property_listing",
  "record_id": "24122645",
  "source_context": {
    "source_name": "Land.com",
    "source_domain": "land.com",
    "source_url": "https://www.land.com/Texas/all-land",
    "listing_url": "https://www.land.com/property/example-listing/24122645",
    "seed": {
      "id": "3149885e16f6",
      "type": "query",
      "value": "example-state | min_price=1000000 | max_price=1250000"
    },
    "page_index": 0
  },
  "entity": {
    "title": "Example Ranch Listing",
    "description": "This example property description shows the typical shape of listing text returned by the actor.",
    "url": "https://www.land.com/property/example-listing/24122645"
  },
  "listing": {
    "listing_id": "24122645",
    "canonical_url": "https://www.land.com/property/example-listing/24122645"
  },
  "pricing": {
    "amount": 1037000,
    "display_price": "$1,037,000",
    "currency": "USD",
    "price_change": {
      "amount": 0,
      "ratio": 0
    },
    "price_per_acre": 18205.76
  },
  "location": {
    "street_address": "123 Example Ranch Road",
    "city": "Example City",
    "county": "Example County",
    "state": "Example State",
    "postal_code": "12345",
    "latitude": 38.221,
    "longitude": -120.553
  },
  "property": {
    "acres": 56.96,
    "home_sqft": 1800,
    "bedrooms": 3,
    "bathrooms": 2,
    "half_bathrooms": 0
  },
  "media": {
    "primary_image_url": "https://assets.land.com/resizedimages/500/600/l/80/w/1-5610824400",
    "thumbnail_url": "https://assets.land.com/resizedimages/500/600/l/80/w/1-5610824400",
    "image_urls": [
      "https://assets.land.com/resizedimages/500/600/l/80/w/1-5610824400"
    ],
    "image_count": 55,
    "has_video": false,
    "has_virtual_tour": false,
    "has_custom_map": false,
    "has_exterior_matterport": false
  },
  "contact_details": {
    "name": "Example Land Brokerage",
    "contact_url": "https://www.land.com/member/example-land-brokerage/8876"
  },
  "relationships": {
    "agent": {
      "name": "Example Land Brokerage",
      "company": "Example Land Brokerage",
      "company_logo_url": "https://assets.land.com/resizedimages/70/0/h/80/w/1-3759924082",
      "profile_url": "https://www.land.com/member/example-land-brokerage/8876"
    }
  },
  "attributes": {
    "property_types": [
      "Ranches",
      "Recreational Property",
      "Horse Property"
    ],
    "property_type_code": 262,
    "listing_level": 30,
    "listing_level_label": "Signature Partner",
    "status_code": 2,
    "has_house": true
  }
}
```

**Example: agent (`record_type = "agent"`)**

```json
{
  "record_type": "agent",
  "record_id": "174024",
  "source_context": {
    "source_name": "Land.com",
    "source_domain": "land.com",
    "source_url": "https://www.land.com/api/seller/search/0/example-state/page-0/sort-order-0/sub-type-0/",
    "profile_url": "https://www.land.com/member/example-land-group/174024",
    "seed": {
      "id": "102980d317d6",
      "type": "agents",
      "value": "example-state"
    },
    "page_index": 0
  },
  "entity": {
    "title": "Example Land Group",
    "description": "This example profile description shows the typical shape of public agent or brokerage profile text.",
    "url": "https://www.land.com/member/example-land-group/174024",
    "external_ids": {
      "agent_id": "174024"
    }
  },
  "agent": {
    "id": "174024",
    "contact_name": "Example Land Group",
    "company": "Example Land Group",
    "website": "https://www.examplelandgroup.com/",
    "profile_url": "https://www.land.com/member/example-land-group/174024",
    "account_type": 41,
    "account_sub_type_id": 5,
    "is_active": true,
    "is_free": false,
    "is_seller": false,
    "land_star_win_count": 5,
    "description_sections": [
      "This example profile description shows the typical shape of public agent or brokerage profile text.",
      "It may include market coverage, service areas, experience, and a summary of how the company presents itself on its public profile."
    ]
  },
  "brokerage": {
    "name": "Example Land Group",
    "website": "https://www.examplelandgroup.com/",
    "license_number": "TX-12345"
  },
  "location": {
    "street_address": "123 Example Avenue",
    "city": "Example City",
    "state": "EX",
    "postal_code": "12345",
    "seo_text": "in Example City, EX"
  },
  "contact_details": {
    "phone": "(123) 456-7890",
    "phones": {
      "preferred": "(123) 456-7890",
      "office": "(123) 555-0100",
      "cell": "(123) 555-0199",
      "tracking": "(123) 456-7890"
    }
  },
  "media": {
    "portrait_url": "https://assets.land.com/resizedimages/500/600/l/80/w/1-3773023884",
    "company_logo_url": "https://assets.land.com/resizedimages/70/0/h/80/w/1-2703746095"
  },
  "metrics": {
    "listing_stats": {
      "active_price_min": 53625,
      "active_price_max": 9950000,
      "active_acreage_min": 0.1,
      "active_acreage_max": 800,
      "active_listing_count": 116,
      "all_time_listing_count": 0
    }
  },
  "attributes": {
    "alc_certified": false,
    "alc_advanced_certified": false,
    "badge_id": 2703746022,
    "listing_count": 0,
    "courtesy_listing_count": 0,
    "tier_listing_count": 0,
    "upgrade_listing_count": 0,
    "total_rows": 0,
    "sms_notifications": false,
    "opt_in_lead_targeting": true
  }
}
```

### Field reference

#### Property listing fields (`record_type = "property_listing"`)

- **record\_id** *(string, required)*: Stable Land.com listing identifier.
- **entity.title / entity.description / entity.url**: Main display identity and canonical URL.
- **source\_context.listing\_url**: Public listing audit URL.
- **listing**: Listing identifiers, canonical URL, status fields, MLS ID, price-change details, and listing history.
- **pricing**: Asking price, displayed price text, currency, and price-per-acre values.
- **location**: Address, city, county, state, postal code, region, coordinates, and boundary data when available.
- **property**: Acreage, residence size, bedroom and bathroom counts, parcel ID, property types, amenities, and directions.
- **media**: Primary image, thumbnail, gallery URLs, image counts, tours, maps, and media availability flags.
- **contact\_details**: Public listing-contact name, phone, email, website, and contact URL when available.
- **relationships.agent**: Primary listing agent or brokerage contact attached to the listing.
- **availability**: Listing status and availability windows when provided.
- **metrics**: Source-reported counts and event-derived counters for listing activity.
- **attributes**: Source-specific labels, listing tiers, status codes, marketing badges, breadcrumbs, map overlays, and other meaningful source-provided values.

#### Agent fields (`record_type = "agent"`)

- **record\_id** *(string, required)*: Stable Land.com profile identifier.
- **entity.title / entity.description / entity.url**: Main profile identity and canonical URL.
- **source\_context.profile\_url**: Public profile audit URL.
- **agent**: Contact name, company, website, profile URL, license number, account-type codes, activity flags, LandStar count, and description sections.
- **location**: Public profile address, city, state, postal code, and display location text.
- **contact\_details**: Public phone numbers and named phone channels.
- **media**: Portrait and company logo URLs.
- **metrics.listing\_stats**: Source-provided active and historical inventory ranges and counts.
- **attributes**: Profile badges, listing-count fields, notification flags, lead-targeting flags, and other source-provided profile attributes.

### Output usage guidance

- Use the dataset to power market dashboards that track listing volume, pricing, acreage, and status by geography or property category.
- Enrich CRM or lead pipelines with listing context, broker details, and market activity for outreach, qualification, or account research.
- Schedule recurring runs to monitor new inventory, price changes, and listing movement over time.
- Compare recurring datasets using `record_type + ":" + record_id` to detect new records, removed records, or field-level changes across runs.
- Export results to spreadsheets, BI tools, or reporting systems for ad hoc analysis and stakeholder reporting.

### Data guarantees & handling

- **Best-effort extraction:** fields may vary by region, session, availability, and UI experiments.
- **Optional fields:** null-check in downstream code.
- **Deduplication:** recommend `record_type + ":" + record_id`.

### How to Run on Apify

1. Open the actor in Apify Console.
2. Configure your search parameters, such as location, property type, listing status, keyword, or agent search mode.
3. Set the maximum number of outputs you want to collect with the `limit` field.
4. Click **Start** and wait for the run to finish.
5. Download the dataset in JSON, CSV, Excel, or another supported format.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

You can schedule recurring runs to keep your property or agent dataset current without manual restarts. This is useful for monitoring listing freshness, pricing changes, and regional inventory over time.

- Navigate to **Schedules** in Apify Console
- Create a new schedule (daily, weekly, or custom cron)
- Configure input parameters
- Enable notifications for run completion
- Optional: add webhooks for automated processing

#### Integration Options

- **Webhooks:** Trigger downstream actions when a run completes
- **Zapier:** Connect to 5,000+ apps without coding
- **Make (Integromat):** Build multi-step automation workflows
- **Google Sheets:** Export results to a spreadsheet
- **Slack/Discord:** Receive notifications and summaries
- **Email:** Send automated reports via email

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~2–3 minutes
- **Medium runs (1,000–5,000 outputs):** ~5–15 minutes
- **Large runs (5,000+ outputs):** ~15–30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record.

### FAQ

**What is the difference between listing search and agent search?**\
Listing search returns property listing records based on location and listing filters. Agent search is used for directory-style discovery of brokers, agents, auctioneers, owners, or retailers in a selected area.

**How should I choose `limit`?**\
Use a smaller `limit` when testing inputs or validating output shape. Use a larger `limit` when you are ready to collect a deeper dataset for analysis, monitoring, or export.

**What happens if some optional fields are missing?**\
Some records may not include every optional field. Downstream systems should treat optional values as nullable and only rely on fields that are present.

**How should I deduplicate records?**\
Use `record_type + ":" + record_id` as the recommended idempotency key for deduplication, upserts, and change tracking across recurring runs.

**When should I use broader versus narrower filters?**\
Start broad when exploring a market or building a larger inventory view. Use narrower filters when you want more targeted results for a defined property type, pricing band, geography, or buying criteria.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available land and rural property listing information, and where applicable public agent or brokerage directory information, from <https://www.land.com> for legitimate business purposes. Common use cases include:

- **Real estate** research and market analysis
- **Lead qualification and enrichment**
- **Listing and competitive monitoring**

Users are responsible for ensuring their collection and use of data complies with applicable laws, regulations, and contractual obligations. This section is informational and not legal advice.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site’s terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable (e.g., GDPR, CCPA)

### Support

For help, use the actor page’s Issues tab or support channel on Apify. Include the input you used with sensitive values redacted, the run ID, a short note on expected versus actual behavior, and optionally a small output sample so the issue can be reproduced quickly.

# Actor input Schema

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

Enter a city, county, state, ZIP code, or similar place name to start a Land.com search. Use this when you want the actor to build the search for you based on location.

## `property_type` (type: `array`):

Select one or more property types to narrow the results. If you choose multiple options, the actor searches each type so you can compare inventory across categories.

## `sale_type` (type: `array`):

Select the listing types you want included in location-based results. Keeping both options selected gives you the broadest view.

## `listing_status` (type: `array`):

Select one or more listing statuses to include in the results. Keeping Available and Pending selected preserves the standard browsing view.

## `publication_date` (type: `string`):

Choose how recently a listing must have been published to be included. This helps surface fresh opportunities without manually sorting through older results.

## `keyword` (type: `string`):

Enter a word or phrase to narrow results to listings that match that term on Land.com. Useful for targeting features such as cabins, hunting land, or owner financing.

## `owner_financing` (type: `boolean`):

Enable this to limit results to properties that mention owner financing on Land.com.

## `nineral_rights` (type: `boolean`):

Enable this to keep only properties that mention mineral rights in the listing details.

## `price_reduction_days` (type: `string`):

Choose how recently a listing must have had a price reduction to appear in the results.

## `have_media` (type: `array`):

Select one or more media types to include only listings that offer that content on Land.com.

## `activites` (type: `string`):

Choose an activity category to focus the search on listings aligned with that use.

## `hoa` (type: `string`):

Choose whether results should include properties with no HOA, mandatory HOA, or voluntary HOA.

## `housing_type` (type: `string`):

Select a housing type to keep the search aligned with the kind of residence or structure you want on the property.

## `geography` (type: `string`):

Select the landscape or setting you want the property to match.

## `land_usage` (type: `string`):

Select a land-use category to focus results on properties that fit that purpose.

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

Select how Land.com should sort the results, such as newest listings, lowest price, or largest acreage first.

## `residence` (type: `string`):

Select whether you want properties with a residence, without a residence, or either.

## `min_bedroom` (type: `string`):

Choose the fewest bedrooms a property must have to appear in the results.

## `min_bathroom` (type: `string`):

Choose the fewest bathrooms a property must have to appear in the results.

## `min_price` (type: `integer`):

Enter the lowest listing price you want included in the search results.

## `max_price` (type: `integer`):

Enter the highest listing price you want included in the search results.

## `min_acre` (type: `integer`):

Enter the smallest parcel size, in acres, that should be included in the results.

## `max_acre` (type: `integer`):

Enter the largest parcel size, in acres, that should be included in the results.

## `min_area` (type: `integer`):

Enter the smallest building area, in square feet, that a listing must have to be included.

## `max_area` (type: `integer`):

Enter the largest building area, in square feet, that a listing can have to be included.

## `agents_search` (type: `boolean`):

When enabled, the actor ignores the standard listing query-builder filters and builds requests from the agent search flow instead.

## `agents_location` (type: `string`):

Enter a city, county, or state for the agent scraping flow. This field is used when agent search mode is enabled.

## `agents_type` (type: `string`):

Select which seller profile type to request from Land.com's broker directory. Leave it on All for the default mixed results.

## `maximize_coverage` (type: `boolean`):

Enable this to cast a wider net from each starting point and capture more matching listings. Leave it off when you want tighter, more direct results.

## `limit` (type: `integer`):

Choose the maximum number of listings to save for each start URL or location search. Smaller limits are useful for testing; larger limits give deeper coverage.

## Actor input object example

```json
{
  "property_type": [],
  "sale_type": [
    "sale",
    "auction"
  ],
  "listing_status": [
    "available",
    "pending"
  ],
  "owner_financing": false,
  "nineral_rights": false,
  "have_media": [],
  "sort_by": "default",
  "residence": "either",
  "agents_search": false,
  "agents_type": "all",
  "maximize_coverage": true,
  "limit": 100
}
```

# Actor output Schema

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

Normalized Land.com property\_listing and agent records saved by this run.

# 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 = {
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/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 = { "limit": 100 }

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

```

## MCP server setup

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