> ## Documentation Index
> Fetch the complete documentation index at: https://developers.apartmentiq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Market Analysis

> Explore markets and retrieve bulk property data.

Analyze markets by searching boundaries (MSAs, submarkets, cities, counties, zip codes, neighborhoods) and pulling bulk property data.

This workflow is designed for investors and developers (and power property managers) who need to:

* Evaluate sites and trade areas for pipeline or acquisitions
* Underwrite comps and benchmark rents, NER, exposure, and product mix
* Map demand/supply dynamics and screen properties by physical attributes
* Build custom geographies (polygons) for more precise trade‑area analysis

### Prerequisites

* A Bearer token (see [Authentication](/v1/authentication))
* Account ID
  <Tip>If you need credentials, see [Getting started](/v1) → "Set up authentication".</Tip>

### 1) Search Geo Boundaries

Use the flexible search to find boundaries by name and type.

```bash theme={null}
curl -s -X POST \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": <account_id>,
    "query": "raleigh",
    "geo_type": ["MSA", "CensusPlace"],
    "limit": 10
  }' \
  "https://data.apartmentiq.io/apartmentiq/api/v1/geo_boundaries/search"
```

Each result includes a numeric boundary ID, display name, geo type, centroid, and optional property count. Result order is weighted for relevance.

You can also filter by intersection with a boundary (`geo_boundary_id`) or custom GeoJSON polygon (`intersecting_geometry`). This is useful for capturing walk‑sheds, drive‑time areas, or micro‑neighborhoods that don’t align to standard boundaries.

<Tip>
  For broad scans, set `query: "*"` and filter by `geo_type`. For highly specific places, pass the full name (e.g., "Raleigh, NC").
</Tip>

Example — intersect results with an existing boundary and limit to Neighborhoods:

```bash theme={null}
curl -s -X POST \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": <account_id>,
    "query": "downtown",
    "geo_boundary_id": <boundary_id>,
    "geo_type": ["Neighborhood"],
    "limit": 20
  }' \
  "https://data.apartmentiq.io/apartmentiq/api/v1/geo_boundaries/search"
```

### 2) Retrieve Bulk Property Data

Fetch properties within boundaries or a custom geometry. One of `geo_boundary_ids` or `geometry` is required.

```bash theme={null}
curl -s -X POST \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": <account_id>,
    "property_filters": {
      "geo_boundary_ids": ["94216", "93759"],
      "total_units_gte": 400,
      "property_class": ["A", "B"]
    }
  }' \
  "https://data.apartmentiq.io/apartmentiq/api/v1/geo_boundaries/properties"
```

Returns a list of properties with address, physical characteristics (unit counts, year built, building type/class), optional ownership (with required access), and current performance metrics (asking/NER, PSF, exposure, leased percent, availability by bed type).

<Note>
  This endpoint is ideal for underwriting, pipeline studies, and competitive scans. Combine physical filters (e.g., year built ≥ 2015, class A) with performance filters (e.g., asking\_rent\_psf between 2.0–3.0) to shape your comp universe.
</Note>

<Warning>This endpoint is subject to bulk export quota limits. Each successful request counts returned unique properties toward your account quota.</Warning>

### Filtering options

When using `property_filters`, you may include:

* Geographic: `geo_boundary_ids[]` or GeoJSON `geometry`
* Physical: `year_built_gte|lte`, `total_units_gte|lte`, `number_of_stories_gte|lte`, `property_class[]`, `property_type[]`, `unified_status[]`
* Mix: `bedroom_count[]`, `bathroom_count[]`
* Pricing/size: `rent_gte|lte`, `ner_gte|lte`, `rent_per_sq_ft_gte|lte`, `ner_per_sq_ft_gte|lte`, `size_gte|lte`
* Concessions/occupancy: `concession_value_gte|lte`, `concession_percent_gte|lte`, `occupancy_gte|lte`, `leased_percent_gte|lte`, `exposure_gte|lte`
* Ownership/financing: `loan_maturity_date_gte|lte`
* Sales transactions: `transaction_cap_rate_gte|lte`, `transaction_date_closed_gte|lte`, `transaction_price_per_unit_gte|lte`

<Tip>For custom trade areas, pass a GeoJSON Polygon in `geometry`. To approximate a 10‑minute walk‑shed, start with a tight polygon around your site and expand outward based on street network context.</Tip>

### Example analyses to try

* Site selection: “Show all class A/B, 2000+ unit count submarket comps within the MSA core and compare asking\_rent\_psf vs. exposure.”
* New supply: “Within this polygon, find properties built since 2020 and compare leased percent by bed type.”
* Underwriting: “Filter to conventional properties with 200+ units and export rent, NER, and concessions for pro forma modeling.”

### Errors and rate limits

* 400 for invalid/missing parameters
* 403 for permission or quota issues (e.g., bulk data quota exceeded)
* 429 if you exceed the rate limit
* See [Errors](/v1/errors) and [Rate limits](/v1/rate-limits)
