{
  "openapi": "3.0.1",
  "info": {
    "title": "LoopNet Scraper — Commercial Listings for Sale & Lease",
    "description": "Scrape LoopNet commercial real estate for sale or lease: address, GPS, price or rent, sizes, year built, class, cap rate, brokers, plus optional broker phone, email, owner and Walk Scores. Search by city, state and property type, watch new listings or paste listing IDs. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "XFhfqwviPWZrquXXJ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~loopnet-listings-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-loopnet-listings-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/nice_dev~loopnet-listings-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-loopnet-listings-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/nice_dev~loopnet-listings-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-loopnet-listings-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": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "LoopNet listing URLs (`https://www.loopnet.com/Listing/.../41920405/`) or search URLs (`https://www.loopnet.com/search/office-space/austin-tx/for-lease/`: the Actor redoes the same place, property type and deal; the site's own extra filters in the URL are not read — use the Filters below). When this list is not empty, the search fields below (listing type, property types, locations, source) are ignored; filters, caps and monitoring still apply. Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingIds": {
            "title": "Listing IDs",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "LoopNet listing IDs to read directly (the number at the end of a listing URL, e.g. `41920405`). Added to the start URLs. Max 1 000.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "source": {
            "title": "Where to find the listings",
            "enum": [
              "search",
              "newListings"
            ],
            "type": "string",
            "description": "`search` = every listing of each location × property type, newest change first (no 750-result cap). `newListings` = only the listings LoopNet added in the last 30 days, newest first — the best source for a scheduled run. Ignored when Start URLs or Listing IDs are given.",
            "default": "search"
          },
          "listingType": {
            "title": "Listing type",
            "enum": [
              "for-sale",
              "for-lease",
              "auctions"
            ],
            "type": "string",
            "description": "For sale or for lease. Auctions: with the \"clientProxy\" access mode only.",
            "default": "for-sale"
          },
          "propertyTypes": {
            "title": "Property types",
            "maxItems": 11,
            "uniqueItems": true,
            "type": "array",
            "description": "One search per property type (times each location). Empty = all commercial real estate. LoopNet has no lease search for multifamily, hospitality and specialty, nor a sale search for coworking: such a pair is refused.",
            "items": {
              "type": "string",
              "enum": [
                "office",
                "retail",
                "industrial",
                "flex",
                "land",
                "multifamily",
                "hospitality",
                "healthCare",
                "restaurant",
                "specialPurpose",
                "coworking"
              ],
              "enumTitles": [
                "Office",
                "Retail",
                "Industrial",
                "Flex",
                "Land",
                "Multifamily (not for lease)",
                "Hospitality: hotels, motels (not for lease)",
                "Health care / medical",
                "Restaurant",
                "Specialty (not for lease)",
                "Coworking (for lease only)"
              ]
            },
            "default": []
          },
          "location": {
            "title": "Location",
            "maxLength": 200,
            "type": "string",
            "description": "US city and state (`Austin, TX`), US state (`TX` or `Texas`), Canadian city and province (`Toronto, ON`) or province, a city abroad (`London, United Kingdom`), a country (`USA`, `Canada`, `United Kingdom`, `France`, `Spain`), or a city alone (`Austin`: in every state). ZIP codes and counties are not supported. Empty = every listing (US, Canada and abroad)."
          },
          "locations": {
            "title": "More locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several locations in one run: every property type is searched in every location (3 types × 4 locations = 12 searches, max 500). Added to **Location**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of listings to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max listings per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for EACH search (location × property type, or search URL; the listing IDs count as one search), so that the first search cannot use up the whole **Max listings** budget. 0 = no per-search cap.",
            "default": 0
          },
          "includeBrokerContact": {
            "title": "Broker phone and e-mail",
            "type": "boolean",
            "description": "Add each broker's phone number and e-mail address (and title) to the listing. Charged per listing that gets at least one of them (event `broker-contact`). Off by default; **With a broker phone only** switches it on.",
            "default": false
          },
          "includeOwner": {
            "title": "Owner or property manager",
            "type": "boolean",
            "description": "Add the owner or manager of the property as LoopNet shows it: name, website, description. LoopNet shows one for about 1 listing in 100; charged per listing that has one (event `owner-profile`).",
            "default": false
          },
          "includeScores": {
            "title": "Walk, Transit, Bike and Drive scores",
            "type": "boolean",
            "description": "Add the four location scores (0-100). Charged per listing that gets them (event `location-scores`).",
            "default": false
          },
          "includeLimitedListings": {
            "title": "Include listings with few details",
            "type": "boolean",
            "description": "LoopNet also publishes listings with almost nothing: no broker, price and size on request, no map position (often the newest ones). Off (default) = they are skipped, not saved and not charged; on = they are saved with what they have. Listing IDs you give are always read.",
            "default": false
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "maximum": 1000000000000,
            "type": "integer",
            "description": "Only listings with an asking price at or above this amount (sale listings, in US dollars, for listings abroad too; a price LoopNet shows rounded, such as $1.7M, counts as 1,700,000). Listings without a price are dropped."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "maximum": 1000000000000,
            "type": "integer",
            "description": "Only listings with an asking price at or below this amount. Listings without a price are dropped."
          },
          "minBuildingSize": {
            "title": "Min building size (SF)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only buildings of at least this many square feet (building size, rentable or gross leasable area). Listings without a size are dropped."
          },
          "maxBuildingSize": {
            "title": "Max building size (SF)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only buildings of at most this many square feet."
          },
          "minSpaceSize": {
            "title": "Min space size (SF)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only listings with a space to lease of at least this many square feet: kept when the size range of its spaces reaches this size. This is the size of a space for lease, not of the building: a listing without a space size, so every sale, is dropped."
          },
          "maxSpaceSize": {
            "title": "Max space size (SF)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only listings with a space to lease of at most this many square feet: kept when the size range of its spaces starts at or below this size. A listing without a space size, so every sale, is dropped."
          },
          "propertySubtypes": {
            "title": "Property subtypes",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Only listings whose property subtype contains at least one of these texts (case and accents ignored), e.g. `Warehouse`, `Medical`, `Strip Center`. A listing without a subtype is dropped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minCapRate": {
            "title": "Min cap rate (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "Only sale listings that state a cap rate at or above this value (e.g. `6.5`). Listings without a cap rate are dropped."
          },
          "maxCapRate": {
            "title": "Max cap rate (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "Only sale listings that state a cap rate at or below this value."
          },
          "minYearBuilt": {
            "title": "Built in or after",
            "minimum": 1600,
            "maximum": 2100,
            "type": "integer",
            "description": "Only buildings built in or after this year. Listings without a year are dropped."
          },
          "maxYearBuilt": {
            "title": "Built in or before",
            "minimum": 1600,
            "maximum": 2100,
            "type": "integer",
            "description": "Only buildings built in or before this year."
          },
          "buildingClasses": {
            "title": "Building class",
            "uniqueItems": true,
            "type": "array",
            "description": "Only buildings of these classes; once a class is chosen, listings that state no class (about 2 in 3) are dropped. Empty = any class, and listings without a class are kept.",
            "items": {
              "type": "string",
              "enum": [
                "A",
                "B",
                "C",
                "F"
              ],
              "enumTitles": [
                "Class A",
                "Class B",
                "Class C",
                "Class F"
              ]
            },
            "default": []
          },
          "minLotSizeAcres": {
            "title": "Min lot size (acres)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "number",
            "description": "Only listings whose lot is at least this many acres. Listings without a lot size are dropped."
          },
          "maxLotSizeAcres": {
            "title": "Max lot size (acres)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "number",
            "description": "Only listings whose lot is at most this many acres."
          },
          "minRentPerSfYear": {
            "title": "Min rent ($/SF/year)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "number",
            "description": "Lease listings: only those with at least one space asking this rent per square foot per year or more. Listings without a rent in $/SF/year are dropped."
          },
          "maxRentPerSfYear": {
            "title": "Max rent ($/SF/year)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "number",
            "description": "Lease listings: only those with at least one space asking this rent per square foot per year or less."
          },
          "minUnitCount": {
            "title": "Min units",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Multifamily: only listings that state at least this many housing units. Listings without a unit count are dropped."
          },
          "maxUnitCount": {
            "title": "Max units",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Multifamily: only listings that state at most this many housing units."
          },
          "listingTags": {
            "title": "Listing tags",
            "uniqueItems": true,
            "type": "array",
            "description": "Only listings that carry at least one of these tags, read from the listing description (see `listingTags` in the output). With the standard access the description is a short summary, so a tag can be missed. Empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "owner-user",
                "renovated",
                "motivated-seller",
                "medical",
                "income-producing",
                "development-site",
                "net-lease"
              ],
              "enumTitles": [
                "Owner-user",
                "Renovated",
                "Motivated seller",
                "Medical",
                "Income-producing",
                "Development site",
                "Net lease"
              ]
            },
            "default": []
          },
          "keywords": {
            "title": "Keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Only listings whose title, highlights or description contain at least one of these words (case and accents ignored), e.g. `drive-thru`, `NNN`. With the standard access the description is the listing's short summary.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the listings whose title, building name, highlights or description contain one of these WHOLE words (case and accents ignored): `art` drops \"Art deco\" but keeps \"Smart building\". Several words in one entry (`hand made`) must appear together, in that order. Chinese, Japanese, Korean, Thai, Lao, Khmer and Burmese words are found anywhere in the text (no spaces there).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requirePhone": {
            "title": "With a broker phone only",
            "type": "boolean",
            "description": "Keep only the listings with a broker phone number (switches **Broker phone and e-mail** on: that option is then charged).",
            "default": false
          },
          "onlyNew": {
            "title": "Only new listings",
            "type": "boolean",
            "description": "Skip the listings that a previous run (same **Memory key**) already delivered: they are not saved and not charged. First run = everything is new.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new listings**. Give each schedule / task its own key (e.g. `austin-office`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every listing again. Untick it afterwards.",
            "default": false
          },
          "trackPriceChanges": {
            "title": "Track price changes",
            "type": "boolean",
            "description": "Needs **Only new listings**. A listing already delivered by a previous run comes back, whole, when its asking price (or lowest rent) has moved, with `previousPrice`, `priceChange`, `priceChangePct` and `priceChangedAt`; one at the same price stays out. No extra charge: a listing that comes back is a normal result.",
            "default": false
          },
          "accessMode": {
            "title": "Access mode",
            "enum": [
              "standard",
              "clientProxy"
            ],
            "type": "string",
            "description": "`standard` (default, included in the price) = the listing summary, with the options above. `clientProxy` = LoopNet's search pages (the listing as its search card shows it), read through YOUR proxies (Proxy configuration > own proxies): only for a proxy that already gets past LoopNet's bot protection.",
            "default": "standard"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 4
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 600,
            "type": "integer",
            "description": "Most requests to LoopNet in any 60 seconds, all of them counted: pages of listings (50 listings each with the standard access, 25 with the clientProxy access). The options (broker, owner, scores) are read with their page and not counted. A budget, not an even pace. Lower it if the log shows HTTP 429 / 403.",
            "default": 120
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 250
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. A request LoopNet turns away is first read again from a new IP — up to 10 times — without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": false
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}