{
  "openapi": "3.0.1",
  "info": {
    "title": "LoopNet + Crexi Scraper · CRE Listings · CoStar Alternative",
    "description": "LoopNet + Crexi scraper for CRE listings. Normalizes cap rates, deduplicates cross-platform, and returns broker names/companies plus phone/email when public. Days-on-market included when source-available. $5 per 1K results.",
    "version": "0.3",
    "x-build-id": "PDxolyW7UCsSDWrH4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kazkn~commercial-real-estate-brokerage-intel/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kazkn-commercial-real-estate-brokerage-intel",
        "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/kazkn~commercial-real-estate-brokerage-intel/runs": {
      "post": {
        "operationId": "runs-sync-kazkn-commercial-real-estate-brokerage-intel",
        "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/kazkn~commercial-real-estate-brokerage-intel/run-sync": {
      "post": {
        "operationId": "run-sync-kazkn-commercial-real-estate-brokerage-intel",
        "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": {
          "city": {
            "title": "🏙️ City or county",
            "type": "string",
            "description": "US city or county. Leave empty to search the entire state."
          },
          "state": {
            "title": "🇺🇸 State",
            "type": "string",
            "description": "US state code or name, for example TX or California."
          },
          "assetClasses": {
            "title": "🎯 Asset class",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict to specific commercial property types. Leave empty to include all types.",
            "items": {
              "type": "string",
              "enum": [
                "office",
                "retail",
                "industrial",
                "multifamily",
                "land",
                "hotel",
                "mixed-use",
                "specialty"
              ],
              "enumTitles": [
                "🏢 Office",
                "🛍️ Retail",
                "🏭 Industrial",
                "🏠 Multifamily",
                "🌾 Land",
                "🏨 Hotel",
                "🏗️ Mixed-use",
                "🎯 Specialty"
              ]
            }
          },
          "sourcesEnabled": {
            "title": "📡 Sources",
            "uniqueItems": true,
            "type": "array",
            "description": "Platforms to query only in manual mode when Search URLs is empty. Both are enabled by default. In URL mode, each recognized LoopNet or Crexi URL selects its own platform and this selector is ignored.",
            "items": {
              "type": "string",
              "enum": [
                "loopnet",
                "crexi"
              ],
              "enumTitles": [
                "LoopNet",
                "Crexi"
              ]
            },
            "default": [
              "loopnet",
              "crexi"
            ]
          },
          "transactionTypes": {
            "title": "💼 Transaction type",
            "uniqueItems": true,
            "type": "array",
            "description": "Whether to fetch <b>for-sale</b> properties (purchase prices, cap rates), <b>for-lease</b> spaces (rent quotes, suite breakdown), or <b>both</b>. When both are enabled, an asset listed for both sale AND lease emits 2 separate dataset rows.<br/><br/><b>Lease scope:</b> Crexi for-lease is supported through its public lease API. LoopNet for-lease is attempted best-effort through the web scraper and may return fewer rows when LoopNet blocks automated browsers; the dataset notes will show when a selected source returned no rows.",
            "items": {
              "type": "string",
              "enum": [
                "sale",
                "lease"
              ],
              "enumTitles": [
                "🛒 For sale (purchase)",
                "🏷️ For lease (rent)"
              ]
            },
            "default": [
              "sale"
            ]
          },
          "maxResultsPerSource": {
            "title": "🔢 Maximum results PER SOURCE",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum listings to return from each selected source. The Console starts at 100. URL mode is capped at 200 per source.",
            "default": 30
          },
          "includeListingDetails": {
            "title": "Broker contacts & listing detail enrichment",
            "type": "boolean",
            "description": "Fetch each listing's detail page for richer data: broker phone/email when public, NOI when available, year_built, lot size, full description, photos, and listed_at/date signals. Keep disabled for fastest bulk exports. Pricing varies by Apify plan; see the Pricing tab.",
            "default": false
          },
          "startUrls": {
            "title": "🔗 Search URLs (optional)",
            "type": "array",
            "description": "Paste one or more complete LoopNet or Crexi search or listing URLs. Use URLs from both platforms to scrape both. URL mode keeps the source filters and ignores City, State, Sources, and manual filters. URL mode supports the most common LoopNet and Crexi filters. Some advanced filters may not be fully reproduced. In those cases, the Actor applies every supported criterion and returns the closest available listings from the same source, so results may be broader than the original page.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "Search URL",
                  "type": "string",
                  "maxLength": 32768,
                  "description": "Complete LoopNet or Crexi HTTP(S) URL, including localized official LoopNet URLs and Crexi URLs that contain placeIds.",
                  "pattern": "^[hH][tT][tT][pP][sS]?:\\/\\/.+$",
                  "errorMessage": {
                    "pattern": "Enter a complete LoopNet or Crexi HTTP(S) URL."
                  }
                }
              },
              "required": [
                "url"
              ]
            }
          },
          "priceMin": {
            "title": "Min price / lease rent (USD, annual for lease)",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound. For sale listings, enter the total asking price. For lease listings, enter estimated annual rent; the actor applies it when rent and sqft are available."
          },
          "priceMax": {
            "title": "Max price / lease rent (USD, annual for lease)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound. For sale listings, enter the total asking price. For lease listings, enter estimated annual rent; the actor applies it when rent and sqft are available."
          },
          "capRateMin": {
            "title": "Min cap rate (%)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Lower bound on the normalized cap rate (e.g. 5 = 5%)."
          },
          "capRateMax": {
            "title": "Max cap rate (%)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Upper bound on the normalized cap rate."
          },
          "buildingSizeMin": {
            "title": "Min building size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound on building square footage."
          },
          "buildingSizeMax": {
            "title": "Max building size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound on building square footage."
          },
          "outputSortBy": {
            "title": "Sort output by",
            "enum": [
              "source_default",
              "building_size_asc",
              "building_size_desc",
              "asking_amount_asc",
              "asking_amount_desc",
              "days_on_market_asc",
              "days_on_market_desc"
            ],
            "type": "string",
            "description": "Optional spreadsheet sorting before export. Useful when you want a cleaner first-pass scan by building size, asking amount, or days-on-market.",
            "default": "source_default"
          },
          "deduplicate": {
            "title": "Cross-platform deduplication",
            "type": "boolean",
            "description": "Merge listings appearing on both LoopNet and Crexi into a single record (with also_listed_on field).",
            "default": true
          },
          "normalizeCapRate": {
            "title": "Normalize cap rates",
            "type": "boolean",
            "description": "Use a source-listed cap rate or calculate a comparable rate from source-declared NOI and asking price when possible. Model-only estimates are not exposed as public output facts.",
            "default": true
          },
          "monitoringMode": {
            "title": "Monitoring mode (only NEW listings)",
            "type": "boolean",
            "description": "Emit only listings not seen in previous runs. Uses an internal snapshot keyed by your search criteria. Best run on a daily schedule. A small monitoring event charge applies; see the Pricing tab.",
            "default": false
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How many times to retry a failed request before giving up.",
            "default": 5
          },
          "crexiCookies": {
            "title": "Crexi session cookies for logged-in broker fields (advanced)",
            "type": "array",
            "description": "Optional, encrypted. Paste cookies from your own logged-in Crexi session to unlock account-visible broker fields when Crexi exposes them, such as broker phone/email. Export as JSON with a cookie browser extension. Never publish or share personal cookies."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify residential proxies recommended (default).",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "maxResults": {
            "title": "Legacy: max results (alias for maxResultsPerSource)",
            "minimum": 1,
            "type": "integer",
            "description": "Backward-compat alias. Use \"Maximum results PER SOURCE\" above instead. Leave empty — only kept for older saved tasks."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}