{
  "openapi": "3.0.1",
  "info": {
    "title": "Crexi Scraper — Commercial Real Estate Listings",
    "description": "Scrape Crexi commercial real estate for-sale listings — asking price, cap rate, NOI, size, zoning, broker & geo. Filter by type, state, city, ZIP, price, cap rate. MCP-ready.",
    "version": "0.2",
    "x-build-id": "jt5gKjqzyGZXcy3hq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~crexi-commercial-real-estate-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-crexi-commercial-real-estate-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/khadinakbar~crexi-commercial-real-estate-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-crexi-commercial-real-estate-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/khadinakbar~crexi-commercial-real-estate-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-crexi-commercial-real-estate-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": {
          "propertyUrls": {
            "title": "Property URLs (specific listings)",
            "type": "array",
            "description": "Use this when you already know the exact Crexi listings you want. Paste full Crexi property URLs (e.g. 'https://www.crexi.com/properties/2608102/michigan-5084-lovers-lane'). Each URL is scraped in full detail regardless of the enrichment toggle. When this list is non-empty it takes priority and the search filters below are ignored. Leave empty to run a filtered search instead.",
            "items": {
              "type": "string",
              "pattern": "crexi\\.com"
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Filter the search to one or more commercial asset classes (e.g. ['Retail','Multifamily']). Leave empty to include every property type. A listing tagged with several types matches if any selected type applies. This is a search filter and is ignored when Property URLs are provided.",
            "items": {
              "type": "string",
              "enum": [
                "Office",
                "Retail",
                "Industrial",
                "Multifamily",
                "Land",
                "Hospitality",
                "Mixed Use",
                "Special Purpose",
                "Self Storage",
                "Mobile Home Park",
                "Business for Sale",
                "Senior Living"
              ]
            }
          },
          "subtypes": {
            "title": "Property subtypes",
            "type": "array",
            "description": "Narrow results to specific subtypes as spelled on Crexi (e.g. 'Apartment Building', 'Traditional Office', 'Strip Center'). Values are matched exactly, so copy them from a Crexi listing. Leave empty to include all subtypes of the selected property types. Ignored when Property URLs are provided.",
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "States (2-letter codes)",
            "type": "array",
            "description": "Filter by US state using two-letter codes (e.g. ['TX','FL']). Leave empty for nationwide results across all 50 states plus DC. Combine with cities or ZIP codes to narrow further. Ignored when Property URLs are provided.",
            "items": {
              "type": "string"
            }
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Filter by city name (e.g. ['Austin','Dallas']). Best paired with the matching state to avoid same-named cities in other states. Leave empty to skip city filtering. Ignored when Property URLs are provided.",
            "items": {
              "type": "string"
            }
          },
          "zipCodes": {
            "title": "ZIP codes",
            "type": "array",
            "description": "Filter by 5-digit US ZIP code (e.g. ['78701','78702']). This is the tightest geographic filter and works with or without a state. Leave empty to skip ZIP filtering. Ignored when Property URLs are provided.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum asking price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings with an asking price at or above this amount in US dollars (e.g. 500000). Leave empty for no lower bound. Listings without a published price are still included unless you disable 'Include unpriced'. Ignored when Property URLs are provided."
          },
          "maxPrice": {
            "title": "Maximum asking price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings with an asking price at or below this amount in US dollars (e.g. 5000000). Leave empty for no upper bound. Combine with the minimum to define a price band. Ignored when Property URLs are provided."
          },
          "minCapRate": {
            "title": "Minimum cap rate (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only return listings with a published capitalization rate at or above this percentage (e.g. 6 means 6%). Listings without a cap rate are excluded when this is set. Leave empty to ignore cap rate. Ignored when Property URLs are provided."
          },
          "maxCapRate": {
            "title": "Maximum cap rate (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only return listings with a published cap rate at or below this percentage (e.g. 12 means 12%). Combine with the minimum to define a yield band. Leave empty for no upper bound. Ignored when Property URLs are provided."
          },
          "includeUnpriced": {
            "title": "Include unpriced listings",
            "type": "boolean",
            "description": "When true (default), listings marketed without a public asking price are included in search results. Set false to return only listings that show a dollar price. Has no effect on Property URL scraping. Ignored when Property URLs are provided.",
            "default": true
          },
          "enrichDetails": {
            "title": "Deep-enrich each listing",
            "type": "boolean",
            "description": "When true (default), each search result is enriched with a full detail request (cap rate, pro-forma cap rate, NOI, price/SqFt, price/unit, occupancy, class, beds, buildings, stories, year built, zoning, lot size, APN, marketing description, investment highlights) plus a broker request (name, brokerage, license, title). Set false for a faster, cheaper run that returns only the listing-card fields. Property URLs are always fully enriched.",
            "default": true
          },
          "includeGalleryImages": {
            "title": "Include gallery images",
            "type": "boolean",
            "description": "When true, add a full-resolution image URL array (all listing photos) to each enriched record via one extra request per listing. Defaults to false to keep runs fast and cheap; the primary thumbnail is always included regardless. Has no effect when Deep-enrich is off. Does not change the per-result price.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Hard cap on how many listings to return and bill for in one run (e.g. 100). Search stops once this many records are pushed, protecting your budget. Applies to search mode; Property URL runs process every URL you supply. Defaults to 100.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used to reach Crexi's API. Defaults to Apify Proxy datacenter routing pinned to the US, which is reliable for Crexi's public API host. Leave as default unless you hit persistent rate limits, in which case enable residential. Do not disable proxy — Crexi's API expects US egress.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}