{
  "openapi": "3.0.1",
  "info": {
    "title": "Crexi Commercial Real Estate Scraper & Investment Analysis",
    "description": "Scrape Crexi commercial real-estate listings and underwrite them: price/SF, price/unit, DSCR, debt yield, cash-on-cash and a transparent 0-100 Deal Score.",
    "version": "1.0",
    "x-build-id": "ISQLM5ERtxxPWwPhi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zapticx~crexi-investment-analyzer/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zapticx-crexi-investment-analyzer",
        "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/zapticx~crexi-investment-analyzer/runs": {
      "post": {
        "operationId": "runs-sync-zapticx-crexi-investment-analyzer",
        "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/zapticx~crexi-investment-analyzer/run-sync": {
      "post": {
        "operationId": "run-sync-zapticx-crexi-investment-analyzer",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "urls",
              "dealFinder"
            ],
            "type": "string",
            "description": "Property Search finds listings by location and filters. Analyze Listing URLs extracts deep data for specific Crexi listings you already have. Deal Finder screens and ranks listings by investment quality (requires financing assumptions).",
            "default": "search"
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "City names, e.g. Dallas. Crexi matches city names against neighborhoods and nearby suburbs as well as the city itself, and the same name recurs across states (Dallas exists in TX, GA and NC). Always pair a city with its state below for precise geographic targeting.",
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "States",
            "type": "array",
            "description": "Two-letter codes (TX) or full names (Texas).",
            "items": {
              "type": "string"
            }
          },
          "zipCodes": {
            "title": "ZIP codes",
            "type": "array",
            "description": "Optional. Narrows the search to specific ZIP codes.",
            "items": {
              "type": "string"
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Leave empty to include every asset class.",
            "items": {
              "type": "string",
              "enum": [
                "Retail",
                "Office",
                "Industrial",
                "Multifamily",
                "Land",
                "Mixed Use",
                "Special Purpose",
                "Hospitality",
                "Self Storage",
                "Mobile Home Park",
                "Senior Living",
                "Note/Loan"
              ]
            }
          },
          "listingType": {
            "title": "Listing status",
            "enum": [
              "all",
              "underContract"
            ],
            "type": "string",
            "description": "All listings, or only those already under contract / contract pending.",
            "default": "all"
          },
          "minPrice": {
            "title": "Minimum asking price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave empty for no lower bound."
          },
          "maxPrice": {
            "title": "Maximum asking price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave empty for no upper bound."
          },
          "minCapRate": {
            "title": "Minimum cap rate (%)",
            "type": "string",
            "description": "In percent, e.g. 6.5. Crexi publishes a cap rate on only a minority of listings - setting this filter restricts results to listings that DO disclose one, which is also what enables the investment analysis."
          },
          "maxCapRate": {
            "title": "Maximum cap rate (%)",
            "type": "string",
            "description": "In percent, e.g. 12. Useful for excluding implausible outliers."
          },
          "includeUnpriced": {
            "title": "Include listings with no published price",
            "type": "boolean",
            "description": "Many Crexi listings are marketed without an asking price. These cannot be financially analysed.",
            "default": false
          },
          "opportunityZoneOnly": {
            "title": "Opportunity Zone listings only",
            "type": "boolean",
            "description": "Restricts results to listings Crexi flags as being inside a designated Qualified Opportunity Zone.",
            "default": false
          },
          "listingUrls": {
            "title": "Crexi listing URLs",
            "type": "array",
            "description": "Used only in 'Analyze Listing URLs' mode. Paste full listing URLs, e.g. https://www.crexi.com/properties/2522223/georgia-glenrose-apartments",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Number of listings to return. Crexi limits any single query to 1,499 results; beyond that this Actor automatically splits the search into smaller queries and merges them.",
            "default": 50
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "newest",
              "priceAsc",
              "priceDesc",
              "capRateDesc",
              "dealScoreDesc"
            ],
            "type": "string",
            "description": "Sorting is applied by this Actor after collection, because Crexi's API does not provide reliable server-side sorting.",
            "default": "newest"
          },
          "includeInvestmentAnalysis": {
            "title": "Calculate investment metrics & Deal Score",
            "type": "boolean",
            "description": "Adds calculated metrics (price/SF, price/unit, DSCR, debt yield, cash-on-cash, Deal Score) in a separate 'analysis' object. Calculated values are never mixed into the scraped 'source' data.",
            "default": true
          },
          "includeBrokerDetails": {
            "title": "Include broker details",
            "type": "boolean",
            "description": "Adds publicly listed broker name, brokerage, licence numbers and profile URL. Crexi does not publish broker phone numbers or emails, so those are not included.",
            "default": true
          },
          "includeImages": {
            "title": "Include property images",
            "type": "boolean",
            "description": "Adds full-resolution image URLs.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests to Crexi. Lower this if you see rate-limit warnings.",
            "default": 8
          },
          "downPaymentPercent": {
            "title": "Down payment (%)",
            "type": "string",
            "description": "Required for DSCR, debt yield and cash-on-cash. Without financing inputs these metrics are returned as null with a stated reason - never guessed. Decimals are supported.",
            "default": "25"
          },
          "interestRatePercent": {
            "title": "Interest rate (%)",
            "type": "string",
            "description": "Annual nominal rate, e.g. 6.75. Decimals are supported.",
            "default": "7.0"
          },
          "amortizationYears": {
            "title": "Amortization period (years)",
            "minimum": 1,
            "type": "integer",
            "description": "Used to compute the monthly payment.",
            "default": 25
          },
          "loanTermYears": {
            "title": "Loan term (years)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Falls back to the amortization period when omitted."
          },
          "closingCostsPercent": {
            "title": "Closing costs (% of price)",
            "type": "string",
            "description": "Included in total cash required and therefore in cash-on-cash return. Decimals are supported.",
            "default": "2"
          },
          "additionalAnnualExpenses": {
            "title": "Additional annual expenses (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Subtracted from NOI before debt service, e.g. capital reserves."
          },
          "minDscr": {
            "title": "Minimum DSCR",
            "type": "string",
            "description": "Deal Finder screening. Drops listings whose DSCR falls below this, e.g. 1.25. Listings without enough data to compute DSCR are also dropped."
          },
          "minDealScore": {
            "title": "Minimum Deal Score (0-100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Deal Finder screening. Drops listings scoring below this threshold."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Enable Apify Proxy if Crexi rate-limits or blocks requests from your run.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}