# Loopnet Scraper | Fast & Reliable (`fatihtahta/loopnet-scraper`) Actor

Extract structured commercial real estate listings from Loopnet with property signals, pricing, seller details, media assets and more. Built for enterprise-grade Canada commercial property intelligence, listing monitoring, lead enrichment and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/loopnet-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 1 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Loopnet Scraper

**Slug:** `fatihtahta/loopnet-scraper`

### Overview

Loopnet Scraper collects structured commercial real estate listing records, including property identity, listing URL, deal type, property category, location, pricing, space availability, building details, media, broker or company information, and source-specific listing metadata. [LoopNet](https://www.loopnet.com) is a major public marketplace for commercial property discovery, making its listing data useful for market analysis, lead generation, competitive tracking, and operational reporting. The actor turns publicly available listing information into repeatable JSON records that can be reviewed in Apify or delivered into downstream systems. It is designed for recurring data acquisition workflows where consistent structure, predictable inputs, and automation readiness matter. Results reflect the public data available at run time and should be validated against each user's target geography, filters, and business rules.

### Why Use This Actor

- **Market research and analytics:** collect normalized commercial property data for market intelligence, pricing analysis, availability tracking, and geographic reporting.
- **Product and content teams:** build structured real estate datasets for directories, internal search experiences, editorial research, or content enrichment workflows.
- **Developers and data engineering pipelines:** deliver repeatable JSON output into downstream systems, ETL jobs, warehouses, and data acquisition workflows.
- **Lead generation and enrichment teams:** identify public listing opportunities, broker organizations, locations, property attributes, and availability signals for qualification workflows.
- **Monitoring and competitive tracking teams:** run scheduled collections to observe listing changes, pricing movement, new availability, or segment-level activity over time.

### Common Use Cases

- **Market intelligence:** monitor supply, pricing, availability, quality ratings, locations, property categories, and space-use movement across target markets.
- **Lead generation:** build targeted prospect lists from public commercial property listings, broker organizations, and listing-level opportunity signals.
- **Competitive monitoring:** track active commercial property inventory by geography, deal type, property type, price range, or recent publication window.
- **Catalog and directory building:** populate internal databases with structured public listing records and normalized property attributes.
- **Data enrichment:** add current public listing attributes to CRM, BI, analytics, or asset-management datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, market summaries, or trend analysis.
- **Investment screening:** collect filtered sale or auction listings by property use, tenancy, cap rate, opportunity zone status, building area, land area, or building year.

### Quick Start

1. Choose a `deal_type`: `lease`, `buy`, or `auction`.
2. Enter a `location` such as a city, ZIP code, county, or market name, or leave it empty for a broader search for the selected deal type.
3. Add optional filters such as price range, property type, lease space use, publication date, amenities, cap rate, building area, land area, or keyword.
4. Set a small `limit` for the first validation run, such as 25 or 50 results.
5. Run the actor in Apify Console and inspect the first dataset records to confirm that the output shape and scope match your use case.
6. Increase coverage, add or adjust filters, enable `maximize_coverage` for broad searches, or schedule recurring runs after the output is verified.

### Input Parameters

The actor accepts one search configuration per run: choose a deal type, optionally set a location and filters, then control output volume with `limit`.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `deal_type` | string | Listing workflow to collect. Allowed values: `buy` for properties for sale, `lease` for properties for lease, `auction` for auction listings. Deal-specific filters only apply to compatible workflows. | `lease` |
| `location` | string | One location to search, such as `New York, NY`, `10001`, `Harris County, TX`, or `Los Angeles County, CA`. Leave empty for a broader default search for the selected deal type. | - |
| `price_range_type` | string | Basis used by `min_price` and `max_price`. Allowed values: `total_sale_total_year_lease` for total sale price or annual lease total; `sf_sale_sf_year_lease` for sale price per square foot or lease price per square foot per year. | - |
| `min_price` | integer | Minimum price or rent value to include. Currency is USD where the source listing provides USD pricing. Leave empty for no lower bound. | - |
| `max_price` | integer | Maximum price or rent value to include. Currency is USD where the source listing provides USD pricing. Leave empty for no upper bound. | - |
| `sale_type` | array of strings | For buy searches only. Allowed values: `auctions`, `triple_net`, `exclude_pending_sales`, `distressed`. | `["auctions"]` |
| `publication_date` | string | Listing recency filter. Allowed values: `24_hours`, `3_days`, `7_days`, `14_days`, `90_days`, `365_days`. Leave empty to include listings regardless of publication date. | - |
| `tenancy` | string | For buy and auction searches. Allowed values: `single` for single-tenant listings, `multi` for multi-tenant listings. | - |
| `lease_availability` | array of strings | For lease searches only. Allowed values: `pending_lease`, `available`. | `["available"]` |
| `sublease_space_only` | boolean | For lease searches only. When enabled, results are limited to sublease opportunities. | `false` |
| `space_use_lease` | string | For lease searches only. Allowed values: `office`, `coworking`, `industrial`, `retail`, `restaurant`, `flex`, `medical`, `lab`, `land`. | - |
| `property_use` | string | For buy and auction searches. Allowed values: `vacant_owner` for vacant or owner-user properties, `investment` for investment properties. | - |
| `property_type` | array of strings | For buy and auction searches. Supported values include main categories and subtypes: `office`, `office:industrial_live_work`, `office:loft_creative_space`, `office:medical`, `office:office_live_work_unit`, `office:office_residential`, `office:office_storefront_retail`, `industrial`, `industrial:data_center`, `industrial:distribution`, `industrial:flex`, `industrial:manufacturing`, `industrial:r_and_d`, `industrial:refrigeration_cold_storage`, `industrial:service`, `industrial:showroom`, `industrial:telecom_facility`, `industrial:truck_terminal`, `industrial:warehouse`, `industrial:other_industrial`, `retail`, `retail:bank`, `retail:day_care_facility_nursery`, `retail:drug_store`, `retail:freestanding`, `retail:grocery_convenience_store`, `retail:service_gas_station`, `retail:showroom`, `retail:storefront`, `retail:storefront_retail_office`, `retail:storefront_retail_residential`, `retail:vehicle_related`, `retail:other_retail`, `restaurant`, `shopping_center`, `shopping_center:airport_retail`, `shopping_center:community_center`, `shopping_center:lifestyle_center`, `shopping_center:neighborhood_center`, `shopping_center:outlet_center`, `shopping_center:power_center`, `shopping_center:regional_mall`, `shopping_center:strip_center`, `shopping_center:super_regional_mall`, `shopping_center:theme_festival_center`, `multifamily`, `multifamily:dormitory`, `multifamily:garden`, `multifamily:high_rise`, `multifamily:low_rise`, `multifamily:manufactured_housing_mobile_home`, `multifamily:mid_rise`, `specialty`, `specialty:car_wash`, `specialty:marina`, `specialty:parking`, `specialty:religious_facility`, `specialty:schools`, `specialty:self_storage`, `specialty:other_specialty`, `health_care`, `health_care:assisted_living`, `health_care:congregate_senior_housing`, `health_care:continuing_care_retirement_community`, `health_care:hospital`, `health_care:rehabilitation_center`, `health_care:skilled_nursing_facility`, `hospitality`, `hospitality:bed_and_breakfast`, `hospitality:hostel`, `hospitality:hotel`, `hospitality:serviced_apartment`, `sports_entertainment`, `sports_entertainment:amusement_park`, `sports_entertainment:baseball_field`, `sports_entertainment:casino`, `sports_entertainment:golf_driving_range`, `sports_entertainment:horse_stables`, `sports_entertainment:race_track`, `sports_entertainment:skating_rink`, `sports_entertainment:swimming_pool`, `sports_entertainment:theater_concert_hall`, `lab`, `land`, `land:agricultural`, `land:commercial`, `land:industrial`, `land:residential_multifamily`, `residential_income`. | - |
| `building_amenities` | array of strings | Building-level amenity filters. Allowed values: `24_hour_access`, `bio_tech_lab_space`, `controlled_access`, `concierge`, `conferencing_facility`, `day_care`, `dry_cleaner`, `fitness_center`, `pool`, `restaurant`, `security_system`, `street_parking_only`, `waterfront`, `leed_certified`, `leed_certified_silver`, `leed_certified_gold`, `leed_certified_platinum`, `energy_star_labeled`, `doorman`, `dry_cleaning_service`, `wheelchair_accessible`, `guest_parking`, `view`, `disabled_facilities`, `roof_terrace`, `car_charging_station`, `conference_rooms`, `hearing_impaired_accessible`, `private_bathroom`, `key_fob_entry`, `air_conditioning`, `haussmannian`, `smoke_detector`. | - |
| `space_amenities` | array of strings | Space-level amenity filters. Allowed values: `raised_floor`, `energy_performance_rating_a`, `energy_performance_rating_b`, `energy_performance_rating_c`, `energy_performance_rating_d`, `energy_performance_rating_e`, `air_conditioning`, `balcony`, `bicycle_storage`, `dda_compliant`, `natural_light`, `reception`, `security_system`, `drop_ceiling`, `cctv_closed_circuit_television_monitoring`, `private_restrooms`, `display_window`, `smoke_detector`, `wheelchair_accessible`. | - |
| `keyword` | string | Word or phrase used to refine results by listing text, business use, feature, tenant type, or other search phrase. | - |
| `opportunity_zone` | boolean | For buy and auction searches. When enabled, results are limited to listings marked as being in Opportunity Zones. | `false` |
| `min_cap_rate` | string | For buy and auction searches. Minimum capitalization rate percentage. Allowed values: `0` through `100`. Leave empty for no minimum cap rate. | - |
| `max_cap_rate` | string | For buy and auction searches. Maximum capitalization rate percentage. Allowed values: `0` through `100`. Leave empty for no maximum cap rate. | - |
| `min_building_area` | integer | Minimum building area, measured in square feet. Leave empty for no lower building-area bound. | - |
| `max_building_area` | integer | Maximum building area, measured in square feet. Leave empty for no upper building-area bound. | - |
| `min_building_year` | integer | For buy and auction searches. Earliest building year to include. Leave empty when older buildings should remain eligible. | - |
| `max_building_year` | integer | For buy and auction searches. Latest building year to include. Leave empty when newer buildings should remain eligible. | - |
| `min_land_area` | integer | Minimum land area, measured in acres. Leave empty for no lower land-area bound. | - |
| `max_land_area` | integer | Maximum land area, measured in acres. Leave empty for no upper land-area bound. | - |
| `maximize_coverage` | boolean | For large searches that may exceed the visible result set. Enabled by default for broader collection of matching listings without changing the selected filters; disable for faster exploratory runs. | `true` |
| `limit` | integer | Maximum number of listings to save for the configured search. Minimum value: `1`. Leave empty to collect all available matching results. | - |

### Choosing Inputs

Start with the deal type because it determines which filters are relevant. Use `lease` when collecting available spaces, `buy` when collecting for-sale listings, and `auction` when collecting auction opportunities.

Use `location` to define the market scope. A city, county, ZIP code, or broader market produces a geographically focused dataset; leaving `location` empty keeps the search broader for the selected deal type.

Add filters gradually. Narrow filters such as property type, lease space use, publication date, price range, cap rate, tenancy, amenities, area, building year, and keyword produce more targeted datasets, while broader inputs improve discovery and help you understand available coverage.

Use `limit` to make the first run small and easy to inspect. After confirming that the first records match your expectations, increase `limit`, refine filters, or enable `maximize_coverage` for wider collection.

### Example Inputs

#### Lease Availability In A Specific Market

```json
{
  "deal_type": "lease",
  "location": "Berkeley, CA",
  "space_use_lease": "retail",
  "lease_availability": ["available"],
  "price_range_type": "sf_sale_sf_year_lease",
  "min_price": 20,
  "max_price": 60,
  "limit": 25
}
````

#### Investment Property Screening

```json
{
  "deal_type": "buy",
  "location": "Harris County, TX",
  "property_type": ["industrial", "industrial:warehouse"],
  "property_use": "investment",
  "tenancy": "multi",
  "min_cap_rate": "5",
  "publication_date": "90_days",
  "limit": 50
}
```

#### Recent Auction Monitoring

```json
{
  "deal_type": "auction",
  "location": "Los Angeles County, CA",
  "sale_type": ["auctions"],
  "opportunity_zone": true,
  "publication_date": "14_days",
  "min_building_area": 5000,
  "maximize_coverage": true,
  "limit": 100
}
```

### Output

#### Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, the README documents each shape separately based on the provided Example Output. The provided output describes a listing record.

#### Record Envelope And Stable Identifiers

Each dataset item is a listing record with top-level listing identity, URL, deal type, property classification, location, pricing, metrics, spaces, details, media, people, source details, and a fingerprint.

The recommended idempotency key is `listing_id`; use `url` or `fingerprint` as a fallback when your downstream workflow requires an additional reconciliation key. For deduplication and upserts, store records by `listing_id` and update mutable attributes such as pricing, availability, details, media, and source ranking on repeated runs. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs.

The `fingerprint` field is included as a compact record-level identifier derived from the listing data and can be useful for change detection or secondary deduplication.

#### Examples

##### Example: listing record

```json
{
  "listing_id": "35442690",
  "url": "https://www.loopnet.com/Listing/2539-Telegraph-Ave-Berkeley-CA/35442690/",
  "title": "2539 Telegraph Ave",
  "subtitle": "The Panoramic Berkeley",
  "deal_type": "lease",
  "property_type": "Multifamily",
  "space_use": "Retail",
  "location": {
    "address": "Berkeley, CA 94704",
    "city": "Berkeley",
    "region": "CA",
    "postal_code": "94704",
    "country": "US",
    "coordinates": {
      "latitude": 37.864299,
      "longitude": -122.258103
    }
  },
  "pricing": {
    "price": "$24.00 SF/YR",
    "currency": "USD",
    "rent": {
      "text": "$24.00 SF/YR",
      "amount": 24,
      "min_amount": 24,
      "max_amount": 24,
      "currency": "USD",
      "rate_basis": "per_square_foot",
      "unit": "SF",
      "period": "year"
    },
    "schema_offer": {
      "price": 24,
      "price_currency": "USD",
      "action_type": "RentAction",
      "offer_type": "Offer"
    }
  },
  "metrics": {
    "quality_rating": "4 Star"
  },
  "spaces": {
    "summary": "2,000 - 4,434 SF Retail Space",
    "min_size_sf": 2000,
    "max_size_sf": 4434,
    "unit": "SF",
    "use": "Retail",
    "available_text": "1 Space Available Now",
    "available_count": 1
  },
  "details": {
    "space_summary": "2,000 - 4,434 SF Retail Space",
    "year_built": 2019,
    "highlights": [
      "1 Space Available Now"
    ],
    "schema_name": "2539 Telegraph Ave, Berkeley, CA 94704",
    "schema_description": "4,434 SF Multifamily Building Offered at $24.00 SF/YR in Berkeley, CA 94704"
  },
  "media": {
    "images": [
      "https://images1.loopnet.com/i2/iuu4rh7MaFkUfiNr0IVKWrONR-Z1CzFIEi78AwPjkZE/105/image.jpg",
      "https://images1.loopnet.com/i2/O15HS1VdVOrDdhJcRNtJvEDk8Uf8W0aR0WUUcvxKM-M/115/retail-property-for-lease-2539-telegraph-ave-berkeley-ca-94704.jpg",
      "https://images1.loopnet.com/i2/r9p7fOgBJxHAshDkqBeh8TpihbAGdE-AS19SGOXZ8CI/115/image.jpg",
      "https://images1.loopnet.com/i2/hPIkfF9rGMNK3LnQ3EQJdOJYl0vqLGCLEUTpfRSNccI/115/image.jpg",
      "https://images1.loopnet.com/i2/zwyZNSEWiGfqY9vH6ml0DCrDk0xTXQEs9hyvu5kgqcA/115/image.jpg",
      "https://images1.loopnet.com/i2/gbnaS9DjwHxtlA6EY5H2tszkMAkdKDdOoawy7UeWvJw/115/image.jpg",
      "https://images1.loopnet.com/i2/hvSN5CYyC_6y_r01_dPNfiBlg0s0vNRFqD5VyA7ZfSw/115/image.jpg",
      "https://images1.loopnet.com/i2/whbp-mbDKu7likV5C5kOyBQ4945XHmsqHsh2tBIRWPg/115/image.jpg",
      "https://images1.loopnet.com/i2/Ldq0LTAn3JuzUgnDxEelcNvsA49xiPZmr2br15N9Xqs/115/image.jpg",
      "https://images1.loopnet.com/i2/8U5Xm9fgTMFDA_6kJeObu4IMe9OPDx2crVyViz2gdog/115/image.jpg",
      "https://images1.loopnet.com/i2/J4RoB0bbEBDsjCd3MOEPlAYi0JP3Gj6hiIcT2H0UFyY/115/image.jpg",
      "https://images1.loopnet.com/i2/VI8d9UQQqFUu2DI2HZBhB-x4TPrcjbi0D_MEEAB9gL4/115/image.jpg",
      "https://images1.loopnet.com/i2/7U61u7Db60H-JeCQqEX1KA6ZxKhQeWN3D4QR-Fpdgvc/115/image.jpg",
      "https://images1.loopnet.com/i2/FKlfiKx52AYSplgab48Ox9LJhcLLhVJS_QeqcjssRF0/115/image.jpg",
      "https://images1.loopnet.com/i2/_xObn3dCnV0q6GNZS6iHuWEwEUBD88P0l7SmhcnUEiI/115/image.jpg",
      "https://images1.loopnet.com/i2/7_DbzfXiK-TwI30OPV-aXJpWcUDU0AFsGeRNTVCvWIA/115/image.jpg",
      "https://images1.loopnet.com/i2/3gDaXxexkLUJCE95MLTNzUfVWbXKPBznEaeHHVnkBKg/115/image.jpg"
    ],
    "schema_image": "https://images1.loopnet.com/i2/O15HS1VdVOrDdhJcRNtJvEDk8Uf8W0aR0WUUcvxKM-M/106/retail-property-for-lease-2539-telegraph-ave-berkeley-ca-94704.jpg"
  },
  "people": {
    "companies": [
      "Chromata Real Estate"
    ],
    "schema_offered_by": {
      "name": "John Polyzoides",
      "organization": "Chromata Real Estate"
    }
  },
  "source_details": {
    "loopnet": {
      "property_id": "9275759",
      "listing_type_id": 14,
      "listing_type": "PropertyDirectSpaceForLease",
      "property_type_id": 11,
      "status_id": 1,
      "search_type": "FL",
      "page_rank": 1,
      "position_rank": 1,
      "market_id": "51",
      "exposure_level": "Tier3",
      "result_position": 1
    }
  },
  "fingerprint": "fa8dcaead1635dccee32"
}
```

### Field Reference

#### Listing Record

**listing\_id** *(string, required)*: Stable LoopNet listing identifier.

**url** *(string, required)*: Public listing URL.

**title** *(string, optional)*: Listing title or property address headline.

**subtitle** *(string, optional)*: Secondary listing label or property name.

**deal\_type** *(string, required)*: Listing workflow represented by the record, such as `lease`.

**property\_type** *(string, optional)*: Property category shown for the listing.

**space\_use** *(string, optional)*: Space-use category, when provided.

**location.address** *(string, optional)*: Display address or market-level address.

**location.city** *(string, optional)*: City.

**location.region** *(string, optional)*: State or region code.

**location.postal\_code** *(string, optional)*: Postal code.

**location.country** *(string, optional)*: Country code.

**location.coordinates.latitude** *(number, optional)*: Latitude.

**location.coordinates.longitude** *(number, optional)*: Longitude.

**pricing.price** *(string, optional)*: Display pricing text.

**pricing.currency** *(string, optional)*: Currency code, such as `USD`.

**pricing.rent.text** *(string, optional)*: Display rent text.

**pricing.rent.amount** *(number, optional)*: Parsed rent amount.

**pricing.rent.min\_amount** *(number, optional)*: Parsed minimum rent amount.

**pricing.rent.max\_amount** *(number, optional)*: Parsed maximum rent amount.

**pricing.rent.currency** *(string, optional)*: Rent currency code.

**pricing.rent.rate\_basis** *(string, optional)*: Rent basis, such as `per_square_foot`.

**pricing.rent.unit** *(string, optional)*: Pricing unit, such as `SF`.

**pricing.rent.period** *(string, optional)*: Pricing period, such as `year`.

**pricing.schema\_offer.price** *(number, optional)*: Structured offer price when available.

**pricing.schema\_offer.price\_currency** *(string, optional)*: Structured offer currency.

**pricing.schema\_offer.action\_type** *(string, optional)*: Structured offer action label.

**pricing.schema\_offer.offer\_type** *(string, optional)*: Structured offer type label.

**metrics.quality\_rating** *(string, optional)*: Listing quality rating text.

**spaces.summary** *(string, optional)*: Space availability summary.

**spaces.min\_size\_sf** *(integer, optional)*: Minimum available space size in square feet.

**spaces.max\_size\_sf** *(integer, optional)*: Maximum available space size in square feet.

**spaces.unit** *(string, optional)*: Space size unit, such as `SF`.

**spaces.use** *(string, optional)*: Space-use label.

**spaces.available\_text** *(string, optional)*: Availability display text.

**spaces.available\_count** *(integer, optional)*: Parsed count of available spaces.

**details.space\_summary** *(string, optional)*: Detailed space summary text.

**details.year\_built** *(integer, optional)*: Building year.

**details.highlights** *(array of strings, optional)*: Listing highlights.

**details.schema\_name** *(string, optional)*: Structured listing name.

**details.schema\_description** *(string, optional)*: Structured listing description.

**media.images** *(array of strings, optional)*: Public image URLs associated with the listing.

**media.schema\_image** *(string, optional)*: Primary structured image URL when available.

**people.companies** *(array of strings, optional)*: Companies associated with the listing.

**people.schema\_offered\_by.name** *(string, optional)*: Person listed as offering the property.

**people.schema\_offered\_by.organization** *(string, optional)*: Organization associated with the offering person.

**source\_details.loopnet.property\_id** *(string, optional)*: Source property identifier.

**source\_details.loopnet.listing\_type\_id** *(integer, optional)*: Source listing type identifier.

**source\_details.loopnet.listing\_type** *(string, optional)*: Source listing type label.

**source\_details.loopnet.property\_type\_id** *(integer, optional)*: Source property type identifier.

**source\_details.loopnet.status\_id** *(integer, optional)*: Source status identifier.

**source\_details.loopnet.search\_type** *(string, optional)*: Source search type label.

**source\_details.loopnet.page\_rank** *(integer, optional)*: Page-level rank when available.

**source\_details.loopnet.position\_rank** *(integer, optional)*: Position rank when available.

**source\_details.loopnet.market\_id** *(string, optional)*: Source market identifier.

**source\_details.loopnet.exposure\_level** *(string, optional)*: Source exposure label.

**source\_details.loopnet.result\_position** *(integer, optional)*: Result position within the collected set.

**fingerprint** *(string, required)*: Compact record fingerprint for secondary deduplication or change detection.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, source presentation, or target-side experiments.
- **Optional fields:** null-check optional fields in downstream code, especially pricing, broker information, media, coordinates, ratings, and detailed property attributes.
- **Deduplication:** use `listing_id` as the primary idempotency key; use `url` or `fingerprint` as a secondary key when appropriate.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before increasing collection size.
- Use one geography or market segment per run when you need cleaner reporting and easier comparison.
- Leave optional filters empty when the goal is broad discovery.
- Add filters gradually to understand how each field changes coverage.
- Use `publication_date` for freshness-focused monitoring workflows.
- Enable `maximize_coverage` for broad searches where collection depth matters more than exploratory speed.
- Use `listing_id` and `fingerprint` for deduplication when storing results over time.

### How to Run on Apify

1. Open the Actor in Apify Console.
2. Configure the available input fields for the target scope.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Inspect the dataset preview and download results in JSON, CSV, Excel, or another supported format.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Schedule runs to keep commercial real estate datasets fresh without repeating manual collection steps. Recurring runs are useful for monitoring listing changes, availability, pricing, and new market activity.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **CRM enrichment:** sync public listing, property, location, and broker organization attributes into lead or account records.
- **BI dashboards:** monitor pricing, availability, property types, market coverage, and listing movement over time.
- **Data warehouses:** store recurring listing snapshots for historical analysis, segmentation, and operational reporting.
- **Google Sheets or Airtable:** review smaller market samples, assign qualification workflows, or maintain lightweight research lists.
- **Webhooks:** trigger validation, notification, ingestion, or enrichment workflows after each completed run.
- **Alerts and reporting:** notify teams when new listings, changed availability, or filtered market opportunities appear.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for reporting, analysis, and operational workflows.

- **JSON:** for APIs, applications, and data pipelines.
- **CSV or Excel:** for spreadsheet workflows and manual review.
- **API access:** for automated ingestion into internal systems.
- **BI and warehouses:** for reporting, dashboards, and historical analysis.

### Performance

Run times are estimates and vary by selected filters, result volume, and how much information is returned per record.

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

Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what [LoopNet](https://www.loopnet.com) publicly exposes at run time.
- Some optional fields may be missing on sparse listings or records with limited public detail.
- Very broad searches may take longer or require higher `limit` values.
- Target-side changes can affect field availability, labels, or naming.
- Regional, account, or availability differences may change visible results.
- Filtering can reduce output volume when the selected market has few matching listings.

### Troubleshooting

- **No results returned:** check filters, location spelling, deal type, property category, and whether LoopNet has matching public records for the selected scope.
- **Fewer results than expected:** broaden filters, raise `limit`, disable overly narrow criteria, or verify that the target market contains enough matching records.
- **Some fields are empty:** optional fields depend on what each public listing provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller market segments.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public LoopNet commercial real estate listing data, including listing identity, URL, title, deal type, property type, location, pricing, space availability, building details, media, companies, people, source metadata, and a fingerprint.

#### Can I filter by location, category, date, price, or other criteria?

Yes. Supported filters include deal type, location, price range, sale type, publication date, tenancy, lease availability, sublease-only status, lease space use, property use, property type, amenities, keyword, opportunity zone status, cap rate, building area, building year, land area, and maximum result count.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum, not a guarantee. The run may return fewer records if the selected location, deal type, and filters do not have enough matching public listings at run time.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cadence for monitoring, reporting, and dataset refresh workflows.

#### How do I avoid duplicates across runs?

Use `listing_id` as the primary idempotency key when storing records. You can also use `url` or `fingerprint` as secondary reconciliation keys.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support exports in JSON, CSV, Excel, and other formats available in Apify Console.

#### Does this actor collect private data?

No. The actor is intended to collect publicly available listing information from LoopNet. Users are responsible for using the data in accordance with applicable laws, regulations, and terms.

#### What should I include when reporting an issue?

Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample if it helps explain the issue.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available **commercial real estate listing** information from **https://www.loopnet.com** for legitimate business purposes, including:

- **Commercial real estate** research and market analysis
- **Lead generation and enrichment** for property, broker, and market workflows
- **Monitoring and operational reporting** for pricing, availability, and listing changes

This section is informational and not legal advice. Users are responsible for confirming that their use of collected data complies with applicable requirements.

#### 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, including GDPR and CCPA.

### Support

For help, use the Issues section or the actor page. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when available. Avoid sharing private credentials, personal data, or confidential business information in support requests.

# Actor input Schema

## `deal_type` (type: `string`):

Choose whether to collect properties for sale, for lease, or at auction. Deal-specific filters only affect the listing workflows they support.

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

Enter one location, such as "New York, NY", "NY 10001", "Harris County, TX", or "Los Angeles County, CA". Leave empty when you want a broad default search for the selected deal type.

## `price_range_type` (type: `string`):

Select whether the price range should use total pricing or per-square-foot pricing. The same minimum and maximum price fields are applied according to the selected deal type.

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

Enter the lowest price or rent value to include. Leave empty when there is no lower price requirement.

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

Enter the highest price or rent value to include. Leave empty when there is no upper price requirement.

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

Select one or more sale-type filters to include in for-sale searches. These options only affect properties for sale.

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

Select how recently listings should have been published. Leave empty to include listings regardless of publication date.

## `tenancy` (type: `string`):

Choose whether to focus on single-tenant or multi-tenant listings. This filter applies to properties for sale and auction listings.

## `lease_availability` (type: `array`):

Select one or more availability statuses for lease searches. These options only affect properties for lease.

## `sublease_space_only` (type: `boolean`):

Enable this to collect only sublease space in lease searches. Leave it off to keep direct lease and sublease opportunities eligible.

## `space_use_lease` (type: `string`):

Select the space-use category to include in lease searches. Leave empty to include all supported lease space uses.

## `property_use` (type: `string`):

Choose a property-use profile to focus the dataset. Leave empty to include both vacant or owner-user properties and investment properties. This filter applies to properties for sale and auction listings.

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

Select one or more property types or subtypes to include. Main categories include their supported subcategories, which is useful for broader category-level searches.

## `building_amenities` (type: `array`):

Select one or more building amenities to require in the results. More selected amenities can make the dataset more targeted.

## `space_amenities` (type: `array`):

Select one or more space amenities to require in the results. Leave empty when space-level amenities should not narrow the search.

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

Enter a word or phrase to focus results on relevant listing text. A precise keyword can reduce noise, while leaving it blank keeps the search broader.

## `opportunity_zone` (type: `boolean`):

Enable this to include only listings marked as being in Opportunity Zones. This filter applies to properties for sale and auction listings.

## `min_cap_rate` (type: `string`):

Choose the lowest cap rate percentage to include. Leave empty when there is no minimum cap rate requirement.

## `max_cap_rate` (type: `string`):

Choose the highest cap rate percentage to include. Leave empty when there is no maximum cap rate requirement.

## `min_building_area` (type: `integer`):

Enter the smallest building area to include, in square feet. Leave empty when smaller buildings should remain eligible.

## `max_building_area` (type: `integer`):

Enter the largest building area to include, in square feet. Leave empty when larger buildings should remain eligible.

## `min_building_year` (type: `integer`):

Enter the earliest building year to include. Leave empty when older buildings should remain eligible.

## `max_building_year` (type: `integer`):

Enter the latest building year to include. Leave empty when newer buildings should remain eligible.

## `min_land_area` (type: `integer`):

Enter the smallest land area to include, in acres. Leave empty when smaller sites should remain eligible.

## `max_land_area` (type: `integer`):

Enter the largest land area to include, in acres. Leave empty when larger sites should remain eligible.

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

Keep this enabled for large searches that may exceed the visible-result limit. Turn it off for faster exploratory runs where the first visible set of matching listings is enough.

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

Enter the maximum number of listings to save for the configured location. Leave empty to collect all available matching results.

## Actor input object example

```json
{
  "deal_type": "lease",
  "sale_type": [
    "auctions"
  ],
  "lease_availability": [
    "available"
  ],
  "sublease_space_only": false,
  "opportunity_zone": false,
  "maximize_coverage": true
}
```

# Actor output Schema

## `results` (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 = {};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Loopnet Scraper | Fast & Reliable",
        "description": "Extract structured commercial real estate listings from Loopnet with property signals, pricing, seller details, media assets and more. Built for enterprise-grade Canada commercial property intelligence, listing monitoring, lead enrichment and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "shVVl5gRGJNZZUymb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~loopnet-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-loopnet-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fatihtahta~loopnet-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-loopnet-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fatihtahta~loopnet-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-loopnet-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "deal_type": {
                        "title": "Choose Deal Type",
                        "enum": [
                            "buy",
                            "lease",
                            "auction"
                        ],
                        "type": "string",
                        "description": "Choose whether to collect properties for sale, for lease, or at auction. Deal-specific filters only affect the listing workflows they support.",
                        "default": "lease"
                    },
                    "location": {
                        "title": "Enter Location to Search",
                        "type": "string",
                        "description": "Enter one location, such as \"New York, NY\", \"NY 10001\", \"Harris County, TX\", or \"Los Angeles County, CA\". Leave empty when you want a broad default search for the selected deal type."
                    },
                    "price_range_type": {
                        "title": "Choose Price Range Basis",
                        "enum": [
                            "total_sale_total_year_lease",
                            "sf_sale_sf_year_lease"
                        ],
                        "type": "string",
                        "description": "Select whether the price range should use total pricing or per-square-foot pricing. The same minimum and maximum price fields are applied according to the selected deal type."
                    },
                    "min_price": {
                        "title": "Set Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the lowest price or rent value to include. Leave empty when there is no lower price requirement."
                    },
                    "max_price": {
                        "title": "Set Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the highest price or rent value to include. Leave empty when there is no upper price requirement."
                    },
                    "sale_type": {
                        "title": "Choose Sale Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more sale-type filters to include in for-sale searches. These options only affect properties for sale.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "auctions",
                                "triple_net",
                                "exclude_pending_sales",
                                "distressed"
                            ],
                            "enumTitles": [
                                "Auctions",
                                "Triple Net (NNN)",
                                "Exclude pending sales",
                                "Distressed properties"
                            ]
                        },
                        "default": [
                            "auctions"
                        ]
                    },
                    "publication_date": {
                        "title": "Choose Listing Recency",
                        "enum": [
                            "24_hours",
                            "3_days",
                            "7_days",
                            "14_days",
                            "90_days",
                            "365_days"
                        ],
                        "type": "string",
                        "description": "Select how recently listings should have been published. Leave empty to include listings regardless of publication date."
                    },
                    "tenancy": {
                        "title": "Choose Tenancy Type",
                        "enum": [
                            "single",
                            "multi"
                        ],
                        "type": "string",
                        "description": "Choose whether to focus on single-tenant or multi-tenant listings. This filter applies to properties for sale and auction listings."
                    },
                    "lease_availability": {
                        "title": "Choose Lease Availability",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more availability statuses for lease searches. These options only affect properties for lease.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "pending_lease",
                                "available"
                            ],
                            "enumTitles": [
                                "Pending lease",
                                "Available"
                            ]
                        },
                        "default": [
                            "available"
                        ]
                    },
                    "sublease_space_only": {
                        "title": "Include Only Sublease Space",
                        "type": "boolean",
                        "description": "Enable this to collect only sublease space in lease searches. Leave it off to keep direct lease and sublease opportunities eligible.",
                        "default": false
                    },
                    "space_use_lease": {
                        "title": "Choose Lease Space Use",
                        "enum": [
                            "office",
                            "coworking",
                            "industrial",
                            "retail",
                            "restaurant",
                            "flex",
                            "medical",
                            "lab",
                            "land"
                        ],
                        "type": "string",
                        "description": "Select the space-use category to include in lease searches. Leave empty to include all supported lease space uses."
                    },
                    "property_use": {
                        "title": "Choose Property Use",
                        "enum": [
                            "vacant_owner",
                            "investment"
                        ],
                        "type": "string",
                        "description": "Choose a property-use profile to focus the dataset. Leave empty to include both vacant or owner-user properties and investment properties. This filter applies to properties for sale and auction listings."
                    },
                    "property_type": {
                        "title": "Filter by Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more property types or subtypes to include. Main categories include their supported subcategories, which is useful for broader category-level searches.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "office",
                                "office:industrial_live_work",
                                "office:loft_creative_space",
                                "office:medical",
                                "office:office_live_work_unit",
                                "office:office_residential",
                                "office:office_storefront_retail",
                                "industrial",
                                "industrial:data_center",
                                "industrial:distribution",
                                "industrial:flex",
                                "industrial:manufacturing",
                                "industrial:r_and_d",
                                "industrial:refrigeration_cold_storage",
                                "industrial:service",
                                "industrial:showroom",
                                "industrial:telecom_facility",
                                "industrial:truck_terminal",
                                "industrial:warehouse",
                                "industrial:other_industrial",
                                "retail",
                                "retail:bank",
                                "retail:day_care_facility_nursery",
                                "retail:drug_store",
                                "retail:freestanding",
                                "retail:grocery_convenience_store",
                                "retail:service_gas_station",
                                "retail:showroom",
                                "retail:storefront",
                                "retail:storefront_retail_office",
                                "retail:storefront_retail_residential",
                                "retail:vehicle_related",
                                "retail:other_retail",
                                "restaurant",
                                "shopping_center",
                                "shopping_center:airport_retail",
                                "shopping_center:community_center",
                                "shopping_center:lifestyle_center",
                                "shopping_center:neighborhood_center",
                                "shopping_center:outlet_center",
                                "shopping_center:power_center",
                                "shopping_center:regional_mall",
                                "shopping_center:strip_center",
                                "shopping_center:super_regional_mall",
                                "shopping_center:theme_festival_center",
                                "multifamily",
                                "multifamily:dormitory",
                                "multifamily:garden",
                                "multifamily:high_rise",
                                "multifamily:low_rise",
                                "multifamily:manufactured_housing_mobile_home",
                                "multifamily:mid_rise",
                                "specialty",
                                "specialty:car_wash",
                                "specialty:marina",
                                "specialty:parking",
                                "specialty:religious_facility",
                                "specialty:schools",
                                "specialty:self_storage",
                                "specialty:other_specialty",
                                "health_care",
                                "health_care:assisted_living",
                                "health_care:congregate_senior_housing",
                                "health_care:continuing_care_retirement_community",
                                "health_care:hospital",
                                "health_care:rehabilitation_center",
                                "health_care:skilled_nursing_facility",
                                "hospitality",
                                "hospitality:bed_and_breakfast",
                                "hospitality:hostel",
                                "hospitality:hotel",
                                "hospitality:serviced_apartment",
                                "sports_entertainment",
                                "sports_entertainment:amusement_park",
                                "sports_entertainment:baseball_field",
                                "sports_entertainment:casino",
                                "sports_entertainment:golf_driving_range",
                                "sports_entertainment:horse_stables",
                                "sports_entertainment:race_track",
                                "sports_entertainment:skating_rink",
                                "sports_entertainment:swimming_pool",
                                "sports_entertainment:theater_concert_hall",
                                "lab",
                                "land",
                                "land:agricultural",
                                "land:commercial",
                                "land:industrial",
                                "land:residential_multifamily",
                                "residential_income"
                            ],
                            "enumTitles": [
                                "Office",
                                "Office - Industrial Live/Work",
                                "Office - Loft/Creative Space",
                                "Office - Medical",
                                "Office - Office Live/Work Unit",
                                "Office - Office/Residential",
                                "Office - Office/Storefront Retail",
                                "Industrial",
                                "Industrial - Data Center",
                                "Industrial - Distribution",
                                "Industrial - Flex",
                                "Industrial - Manufacturing",
                                "Industrial - R&D",
                                "Industrial - Refrigeration/Cold Storage",
                                "Industrial - Service",
                                "Industrial - Showroom",
                                "Industrial - Telecom Facility",
                                "Industrial - Truck Terminal",
                                "Industrial - Warehouse",
                                "Industrial - Other Industrial",
                                "Retail",
                                "Retail - Bank",
                                "Retail - Day Care Facility/Nursery",
                                "Retail - Drug Store",
                                "Retail - Freestanding",
                                "Retail - Grocery/Convenience Store",
                                "Retail - Service/Gas Station",
                                "Retail - Showroom",
                                "Retail - Storefront",
                                "Retail - Storefront Retail/Office",
                                "Retail - Storefront Retail/Residential",
                                "Retail - Vehicle Related",
                                "Retail - Other Retail",
                                "Restaurant",
                                "Shopping Center",
                                "Shopping Center - Airport Retail",
                                "Shopping Center - Community Center",
                                "Shopping Center - Lifestyle Center",
                                "Shopping Center - Neighborhood Center",
                                "Shopping Center - Outlet Center",
                                "Shopping Center - Power Center",
                                "Shopping Center - Regional Mall",
                                "Shopping Center - Strip Center",
                                "Shopping Center - Super Regional Mall",
                                "Shopping Center - Theme/Festival Center",
                                "Multifamily",
                                "Multifamily - Dormitory",
                                "Multifamily - Garden",
                                "Multifamily - High-Rise",
                                "Multifamily - Low-Rise",
                                "Multifamily - Manufactured Housing/Mobile Home",
                                "Multifamily - Mid-Rise",
                                "Specialty",
                                "Specialty - Car Wash",
                                "Specialty - Marina",
                                "Specialty - Parking",
                                "Specialty - Religious Facility",
                                "Specialty - Schools",
                                "Specialty - Self-Storage",
                                "Specialty - Other Specialty",
                                "Health Care",
                                "Health Care - Assisted Living",
                                "Health Care - Congregate Senior Housing",
                                "Health Care - Continuing Care Retirement Community",
                                "Health Care - Hospital",
                                "Health Care - Rehabilitation Center",
                                "Health Care - Skilled Nursing Facility",
                                "Hospitality",
                                "Hospitality - Bed and Breakfast",
                                "Hospitality - Hostel",
                                "Hospitality - Hotel",
                                "Hospitality - Serviced Apartment",
                                "Sports & Entertainment",
                                "Sports & Entertainment - Amusement Park",
                                "Sports & Entertainment - Baseball Field",
                                "Sports & Entertainment - Casino",
                                "Sports & Entertainment - Golf / Driving Range",
                                "Sports & Entertainment - Horse Stables",
                                "Sports & Entertainment - Race Track",
                                "Sports & Entertainment - Skating Rink",
                                "Sports & Entertainment - Swimming Pool",
                                "Sports & Entertainment - Theater/Concert Hall",
                                "Lab",
                                "Land",
                                "Land - Agricultural",
                                "Land - Commercial",
                                "Land - Industrial",
                                "Land - Residential/Multifamily",
                                "Residential Income"
                            ]
                        }
                    },
                    "building_amenities": {
                        "title": "Filter by Building Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more building amenities to require in the results. More selected amenities can make the dataset more targeted.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "24_hour_access",
                                "bio_tech_lab_space",
                                "controlled_access",
                                "concierge",
                                "conferencing_facility",
                                "day_care",
                                "dry_cleaner",
                                "fitness_center",
                                "pool",
                                "restaurant",
                                "security_system",
                                "street_parking_only",
                                "waterfront",
                                "leed_certified",
                                "leed_certified_silver",
                                "leed_certified_gold",
                                "leed_certified_platinum",
                                "energy_star_labeled",
                                "doorman",
                                "dry_cleaning_service",
                                "wheelchair_accessible",
                                "guest_parking",
                                "view",
                                "disabled_facilities",
                                "roof_terrace",
                                "car_charging_station",
                                "conference_rooms",
                                "hearing_impaired_accessible",
                                "private_bathroom",
                                "key_fob_entry",
                                "air_conditioning",
                                "haussmannian",
                                "smoke_detector"
                            ],
                            "enumTitles": [
                                "24 Hour Access",
                                "Bio-Tech/ Lab Space",
                                "Controlled Access",
                                "Concierge",
                                "Conferencing Facility",
                                "Day Care",
                                "Dry Cleaner",
                                "Fitness Center",
                                "Pool",
                                "Restaurant",
                                "Security System",
                                "Street parking only",
                                "Waterfront",
                                "LEED Certified",
                                "LEED Certified - Silver",
                                "LEED Certified - Gold",
                                "LEED Certified - Platinum",
                                "Energy Star Labeled",
                                "Doorman",
                                "Dry Cleaning Service",
                                "Wheelchair Accessible",
                                "Guest Parking",
                                "View",
                                "Disabled Facilities",
                                "Roof Terrace",
                                "Car Charging Station",
                                "Conference Rooms",
                                "Hearing Impaired Accessible",
                                "Private Bathroom",
                                "Key Fob Entry",
                                "Air Conditioning",
                                "Haussmannian",
                                "Smoke Detector"
                            ]
                        }
                    },
                    "space_amenities": {
                        "title": "Filter by Space Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more space amenities to require in the results. Leave empty when space-level amenities should not narrow the search.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "raised_floor",
                                "energy_performance_rating_a",
                                "energy_performance_rating_b",
                                "energy_performance_rating_c",
                                "energy_performance_rating_d",
                                "energy_performance_rating_e",
                                "air_conditioning",
                                "balcony",
                                "bicycle_storage",
                                "dda_compliant",
                                "natural_light",
                                "reception",
                                "security_system",
                                "drop_ceiling",
                                "cctv_closed_circuit_television_monitoring",
                                "private_restrooms",
                                "display_window",
                                "smoke_detector",
                                "wheelchair_accessible"
                            ],
                            "enumTitles": [
                                "Raised Floor",
                                "Energy Performance Rating - A",
                                "Energy Performance Rating - B",
                                "Energy Performance Rating - C",
                                "Energy Performance Rating - D",
                                "Energy Performance Rating - E",
                                "Air Conditioning",
                                "Balcony",
                                "Bicycle Storage",
                                "DDA Compliant",
                                "Natural Light",
                                "Reception",
                                "Security System",
                                "Drop Ceiling",
                                "CCTV (Closed Circuit Television Monitoring)",
                                "Private Restrooms",
                                "Display Window",
                                "Smoke Detector",
                                "Wheelchair Accessible"
                            ]
                        }
                    },
                    "keyword": {
                        "title": "Filter by Keyword",
                        "type": "string",
                        "description": "Enter a word or phrase to focus results on relevant listing text. A precise keyword can reduce noise, while leaving it blank keeps the search broader."
                    },
                    "opportunity_zone": {
                        "title": "Include Only Opportunity Zone Listings",
                        "type": "boolean",
                        "description": "Enable this to include only listings marked as being in Opportunity Zones. This filter applies to properties for sale and auction listings.",
                        "default": false
                    },
                    "min_cap_rate": {
                        "title": "Set Minimum Cap Rate",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8",
                            "9",
                            "10",
                            "11",
                            "12",
                            "13",
                            "14",
                            "15",
                            "16",
                            "17",
                            "18",
                            "19",
                            "20",
                            "21",
                            "22",
                            "23",
                            "24",
                            "25",
                            "26",
                            "27",
                            "28",
                            "29",
                            "30",
                            "31",
                            "32",
                            "33",
                            "34",
                            "35",
                            "36",
                            "37",
                            "38",
                            "39",
                            "40",
                            "41",
                            "42",
                            "43",
                            "44",
                            "45",
                            "46",
                            "47",
                            "48",
                            "49",
                            "50",
                            "51",
                            "52",
                            "53",
                            "54",
                            "55",
                            "56",
                            "57",
                            "58",
                            "59",
                            "60",
                            "61",
                            "62",
                            "63",
                            "64",
                            "65",
                            "66",
                            "67",
                            "68",
                            "69",
                            "70",
                            "71",
                            "72",
                            "73",
                            "74",
                            "75",
                            "76",
                            "77",
                            "78",
                            "79",
                            "80",
                            "81",
                            "82",
                            "83",
                            "84",
                            "85",
                            "86",
                            "87",
                            "88",
                            "89",
                            "90",
                            "91",
                            "92",
                            "93",
                            "94",
                            "95",
                            "96",
                            "97",
                            "98",
                            "99",
                            "100"
                        ],
                        "type": "string",
                        "description": "Choose the lowest cap rate percentage to include. Leave empty when there is no minimum cap rate requirement."
                    },
                    "max_cap_rate": {
                        "title": "Set Maximum Cap Rate",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8",
                            "9",
                            "10",
                            "11",
                            "12",
                            "13",
                            "14",
                            "15",
                            "16",
                            "17",
                            "18",
                            "19",
                            "20",
                            "21",
                            "22",
                            "23",
                            "24",
                            "25",
                            "26",
                            "27",
                            "28",
                            "29",
                            "30",
                            "31",
                            "32",
                            "33",
                            "34",
                            "35",
                            "36",
                            "37",
                            "38",
                            "39",
                            "40",
                            "41",
                            "42",
                            "43",
                            "44",
                            "45",
                            "46",
                            "47",
                            "48",
                            "49",
                            "50",
                            "51",
                            "52",
                            "53",
                            "54",
                            "55",
                            "56",
                            "57",
                            "58",
                            "59",
                            "60",
                            "61",
                            "62",
                            "63",
                            "64",
                            "65",
                            "66",
                            "67",
                            "68",
                            "69",
                            "70",
                            "71",
                            "72",
                            "73",
                            "74",
                            "75",
                            "76",
                            "77",
                            "78",
                            "79",
                            "80",
                            "81",
                            "82",
                            "83",
                            "84",
                            "85",
                            "86",
                            "87",
                            "88",
                            "89",
                            "90",
                            "91",
                            "92",
                            "93",
                            "94",
                            "95",
                            "96",
                            "97",
                            "98",
                            "99",
                            "100"
                        ],
                        "type": "string",
                        "description": "Choose the highest cap rate percentage to include. Leave empty when there is no maximum cap rate requirement."
                    },
                    "min_building_area": {
                        "title": "Set Minimum Building Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the smallest building area to include, in square feet. Leave empty when smaller buildings should remain eligible."
                    },
                    "max_building_area": {
                        "title": "Set Maximum Building Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the largest building area to include, in square feet. Leave empty when larger buildings should remain eligible."
                    },
                    "min_building_year": {
                        "title": "Set Earliest Building Year",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the earliest building year to include. Leave empty when older buildings should remain eligible."
                    },
                    "max_building_year": {
                        "title": "Set Latest Building Year",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the latest building year to include. Leave empty when newer buildings should remain eligible."
                    },
                    "min_land_area": {
                        "title": "Set Minimum Land Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the smallest land area to include, in acres. Leave empty when smaller sites should remain eligible."
                    },
                    "max_land_area": {
                        "title": "Set Maximum Land Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the largest land area to include, in acres. Leave empty when larger sites should remain eligible."
                    },
                    "maximize_coverage": {
                        "title": "Collect More Matching Listings",
                        "type": "boolean",
                        "description": "Keep this enabled for large searches that may exceed the visible-result limit. Turn it off for faster exploratory runs where the first visible set of matching listings is enough.",
                        "default": true
                    },
                    "limit": {
                        "title": "Set Maximum Results per Input",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the maximum number of listings to save for the configured location. Leave empty to collect all available matching results."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
