> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.hellodata.ai/llms.txt.

# Changelog

## February 19, 2026

## New Feature

**Query Builder: Rent Roll Columns**

Added a new `Rent Roll` column category for Query Builder. New columns:
- `rent_roll_floorplan_name`
- `rent_roll_bed`
- `rent_roll_bath`
- `rent_roll_partial_bath`
- `rent_roll_asking_rent`
- `rent_roll_in_place_rent`
- `rent_roll_estimated_units`

`rent_roll_in_place_rent` maps to `rent_roll.effective_price`.

## Improvement

**Query Validation: Rent Roll Compatibility Guardrails**

Query Builder now rejects incompatible mixed selections with HTTP `422` across dataset validation endpoints.

Incompatible mix:
- Any `Rent Roll` column
- With any `Unit`, `Price`, or `Leasing Activity` (occupancy) column

This rule applies to both selected scope columns and filter columns.

## Improvement

**Query Builder: Rent Roll Aggregation Selectors**

Added 3 mutually exclusive Rent Roll aggregation selector columns:
- `rent_roll_aggregation_bed_bath`
- `rent_roll_aggregation_bed_bath_sqft`
- `rent_roll_aggregation_floorplan`

Only one selector can be used in a query.

Rent Roll metrics now require one selector:
- `rent_roll_asking_rent`
- `rent_roll_in_place_rent`
- `rent_roll_estimated_units`

If Rent Roll metrics are used without one of the selectors, dataset endpoints return HTTP `422` with a validation message.

## February 18, 2026

## Improvements

**Property**
- New query parameter `use_tmlp` can be passed in to adjust property prices to use the Total Monthly Leasing Price Rent value.

## January 28, 2026

## Improvement

**Relative Date Filters in Query Builder**

Date filters in the Query Builder now support **relative time ranges** (in addition to selecting specific calendar dates). This is especially useful for **scheduled dataset exports**, so each run automatically targets the most relevant time window.

**Supported relative options include:**
- Last N Days
- Last Week
- Last Month
- Last Quarter
- Last Year

The backend resolves relative date selections into concrete dates at execution time, ensuring scheduled exports stay up-to-date.

## January 14, 2026

## New Feature

**Date Filtering for Property Details**

We've added optional date filtering to the `GET /property/{id}` endpoint, allowing you to filter units, history, availability periods, and concessions based on a date range.

**New Query Parameters:**
- `from` (optional): Filter results to include only data that overlaps with dates on or after this date (ISO 8601 format, e.g., "2024-01-01")
- `to` (optional): Filter results to include only data that overlaps with dates on or before this date (ISO 8601 format, e.g., "2024-12-31")

**What Gets Filtered:**
- **Units**: Filtered based on `enter_market` and `exit_market` dates
- **History**: Filtered based on `from_date` and `to_date` of each history entry
- **Availability Periods**: Filtered based on `enter_market` and `exit_market` dates
- **Concessions**: Filtered based on `from_date` and `to_date` of each concession

**Usage:**
You can provide either date, both dates, or neither. When dates are provided, only data that overlaps with the specified date range will be included in the response.

**Example Requests:**
```bash
# Filter to data from January 2024 onwards
GET /property/{id}?from=2024-01-01

# Filter to data up to December 2024
GET /property/{id}?to=2024-12-31

# Filter to data within a specific date range
GET /property/{id}?from=2024-01-01&to=2024-12-31

# No filtering (returns all data)
GET /property/{id}
```

This feature is particularly useful when you need to analyze property data for a specific time period or when generating reports for a particular date range.

## January 8, 2026

## New Feature

**Effective Rent Filtering in Unit Mix**

We've added support for filtering by effective rent (after concessions) in addition to asking rent. You can now filter properties by effective rent and effective rent per square foot for all unit types.

**New Filter Fields:**
- `effective_rent`: Filter by average effective rent (net rent after concessions)
- `effective_rent_per_sqft`: Filter by average effective rent per square foot

These filters are available for:
- Overall property metrics
- Individual unit types (studio, 1BR, 2BR, 3BR, 4BR)

**Example Payloads:**

```json
{
  "filters": {
    "unit_mix": {
      "overall": {
        "effective_rent": {
          "min": 1500,
          "max": 2500
        },
        "effective_rent_per_sqft": {
          "min": 3.0,
          "max": 5.0
        }
      }
    }
  }
}
```

You can combine effective rent filters with asking rent filters to compare properties:

```json
{
  "filters": {
    "unit_mix": {
      "two_bedroom": {
        "rent": {
          "min": 2000,
          "max": 3000
        },
        "effective_rent": {
          "min": 1800,
          "max": 2800
        }
      }
    }
  }
}
```

Effective rent filters work the same way as asking rent filters, supporting minimum/maximum values and optional inclusion of properties with null values via the `allow_null` parameter.

## December 1, 2025

## Improvement

**Rate Limiter: Updated headers**

We've updated our rate limit headers from IETF draft v7 to the latest v10 format. The headers now use structured header syntax with quoted policy names for better standardization and compatibility.

**Header Format Changes:**

- **RateLimit-Policy**: Now uses structured header format with quoted policy name
  - Format: `"policy-name";q=quota;w=window`
  - Example: `"default";q=500;w=60` (500 requests per 60 seconds)
  
- **RateLimit**: Updated to use structured header format with quoted policy name
  - Format: `"policy-name";r=remaining;t=reset`
  - Example: `"default";r=499;t=59` (499 requests remaining, 59 seconds until reset)

The header values are now fully compliant with the latest IETF draft standard, making it easier for clients to parse and handle rate limit information programmatically.

## November 11, 2025

## New Feature

**Comparables: Student Assets & Distance to Universities**

We added support to `POST /property/comparables` for more student housing scenarios. Use `isStudent=true` to indicate the subject is student housing and optionally pass `maxMilesToUniversity` (in miles) to prioritize proximity to universities when ranking comps. These query params are optional and fully backward compatible.

The algorithm now prioritizes comps with a similar distance to universities as the subject property.

## October 24, 2025

## New Feature

**Property Search: created_on**

We added a new field `created_on` to the `GET /property/search` endpoint so you know when the data was last updated. This field will be populated 2025-10-25.

## October 17, 2025

## New Feature

**Market: Shape Search endpoint**

We added a `GET /market/shape_search` endpoint to search for markets by name, city, state, or tags. Provide the `q` query string to receive up to 7 matches, including market names and GeoJSON shapes of the market boundaries. This endpoint is free to use and can be enabled on demand.

## September 19, 2025

## New Feature

**Property**
To support greater fee transparency and help clients make fair comparisons, our system will now always display the base rent. In addition, we’ve introduced a new building-level attribute, `fees`, which includes all required and non-refundable charges. This allows clients to compare both base rent and all-in rent across buildings more accurately.

## August 22, 2025

## New Feature

**School Term**

We've supported student housing data for several years, and now we're making it even easier to use by introducing school term as a dedicated field. This addition makes it simpler to compare data across different terms and is available in the availability periods and units.

Notice: By introducing school term, our unit ids will change for units that have a school_term. We explored a few options to avoid this but because the same unit in the same floorplan can be offered for different school terms at the same time, we had to treat them as individual units.

## July 28, 2025

## Deprecation: Quality Score

The `/qualityscore/*` computer vision endpoints are now deprecated. These models have been outdated for some time, and usage has been minimal. We're focusing our efforts on more impactful and widely used features. Quality score insights will continue to be available in the property details payload.

These endpoints will continue to function for now, but we plan to remove them on Jan 1st 2026. If you rely on them, we recommend transitioning to the quality analysis available on property details payload as soon as possible.

## June 24, 2025

## New Feature

**Async Dataset Export with Webhook Notifications**

- Introduced `/dataset/export` endpoint for asynchronous dataset exports with webhook delivery
- Perfect for large datasets that would timeout with synchronous requests
- Supports both CSV and JSONL output formats with gzip compression
- HMAC signature verification ensures webhook authenticity using your API key
- Download URLs are valid for 30 days from export completion
- Requires Query Builder subscription for full access

**Key Benefits:**
- Process large datasets without timeout constraints
- Integrate with automated data pipelines and workflows
- Receive results asynchronously via secure webhook notifications
- Track exports using unique query UUIDs for request/response matching

**Example Request:**

```json
{
  "dataset": {
    "scopes": [
      {"column": "street_address"},
      {"column": "asking_rent", "aggregate": "Avg"}
    ],
    "filters": [
      {"column": "msa", "filter": {"equals": "Seattle, WA"}},
      {"column": "bed", "filter": {"in": [1, 2, 3]}}
    ],
    "limit": 10000
  },
  "webhookURL": "https://yourapp.com/webhook/dataset-export",
  "name": "Seattle Rental Data Export",
  "format": "csv"
}
```

**Webhook Response:**

```json
{
  "queryUUID": "123e4567-e89b-12d3-a456-426614174000",
  "name": "Seattle Rental Data Export",
  "format": "csv",
  "gcsBlob": {
    "url": "https://storage.googleapis.com/...",
    "expires": "2024-07-26T10:30:00Z",
    "timeTakenMs": 45000,
    "numberRows": 12847
  },
  "hmacSignature": "a1b2c3d4...",
  "requestedOn": "2024-06-26T10:00:00Z",
  "completedOn": "2024-06-26T10:00:45Z"
}
```

See our [Dataset Webhook Export Guide](/docs/dataset-export) for complete implementation details and webhook handler examples.

## June 5, 2025

## Improvement

**Added id_alias to search**

Use the property id in the query of `/property/search?q=`.
See all alias ids that map to the primary id to help dedupe when primary IDs change

## June 2, 2025

## Improvement

**Enhanced Regional Report Filters**

- Added comprehensive unit mix filtering capabilities to regional reports
- Filter by unit count, square footage, rent, and rent per square foot for:
  - Overall property metrics
  - Individual unit types (studio, 1BR, 2BR, 3BR, 4BR)
- Each filter supports:
  - Minimum and maximum values
  - Optional inclusion of properties with null values
- Example: Filter for properties where 2BR units average between 800-1000 sqft and rent for $2000-2500 per month

**Example Payloads:**

```json
{
  "filters": {
    "unit_mix": {
      "overall": {
        "rent_per_sqft": {
          "min": 2.5,
          "max": 3.5,
        }
      },
    }
  }
}
```

You can also filter by specific unit types:

```json
{
  "filters": {
    "unit_mix": {
      "studio": {
        "number_units": {
            "min": 10
        },
        "rent": {
          "max": 1500
        }
      },
      "one_bedroom": {
        "number_units": {
            "min": 10
        },
        "sqft": {
          "min": 600
        }
      }
    }
  }
}
```

## May 15, 2025

## Improvement

**Visual banner concession detection**

- We've enhanced our system to detect concessions that are advertised in images and visual banners
- No data schema changes required - newly detected concessions will appear in the existing data structure
- This improvement increases concession coverage by capturing previously missed promotional content

## April 29, 2025

## Improvement

**Lesser Quality**

- The `renovations` field on the `comparables` endpoint now accepts negative values, to let you look for properties with lesser quality.
- The full range of the slider is now -1.0 to 1.0.
- For example, a renovations value of -0.3 will maximize the quality similarity between the subject and the comps for comps that are 30% worse than the subject.

## April 10, 2025

## New Feature

**Google Reviews**

- The `review_analysis` field on the `PropertyDetailsResponse` object is now factoring in Google Reviews.

## March 30, 2025

## New Feature

**Market Search**

- Added `allow_null` to the `year_built`, `number_units` and `number_stories` filters in the `/market/search` endpoint.
- Added `is_student`, `is_senior`, `is_affordable` as three additional filters to the `/market/search` endpoint

## March 21, 2025

## New Feature

**Lease Up**

Added `is_lease_up` to the property responses. This indicates that the building was recently built, and it is assumed that the developers are only showing a small number of their available units because they are still trying to fill their spaces. See `is_lease_up` on the Property Response for more information on how a building meets this condition.

_Showing the 20 most recent of 50 entries. Append `/llms.txt` to the changelog URL for the complete index._