# Apartment List Rental Search API Documentation

Scrappa's `GET /api/apartmentlist/search` returns Apartment List rentals in one United States location as structured JSON.

## Rentals only, United States

Apartment List lists homes for rent. It has no sale listings, so this API has no sale parameter.

## What you get

`total` is the number of matching properties and `total_units` the number of matching units. Each listing has `rental_id`, `slug`, `url`, `name`, `address`, `neighborhood`, `geo`, `phone`, `bed_range`, `price_range`, `units_available`, `soonest_available`, `floorplans` with their `units` (price, fees, size, move-in date, lease length, apply link), `photos`, amenities, `rating`, `review_summary` and sponsored flags. Call the listing endpoint for fees, pet policy, specials and the property manager.

## Filters are honoured

Beds, baths and price are checked on every unit before it is returned. A unit that does not match your filter is never returned, and a property with no matching unit is left out and counted in `meta.omitted`, so a page can hold fewer than `per_page` listings. `beds` takes 0 for a studio and 3 for "3 or more", the way the site does. `baths` is a minimum. `applied_filters` echoes what was used.

## Location

`location_id` is required. Take it from `/api/apartmentlist/location-autocomplete`. An unknown id returns `422` (`unknown_location`).

## Sorting and sponsored listings

`default` is the site's freshness order, `price_asc` and `price_desc` sort by price, and `best_match` is the site's own ranking. Sponsored listings keep the position the site gives them and carry `is_featured: true` and a `featured_tag`. They are never moved or removed, so a price sort can show a sponsored listing out of order.

## Pagination

`page` is 1-based and `per_page` is 1-48. The full result list is kept for two minutes per filter set, so a page stays the same while you page through it. A page past the last one returns an empty `listings` list with the real `total`. It never returns another page's listings.

## Prices

Prices are numbers in US dollars. A hidden price is `null`, never `0`.

- **Documentation:** [https://scrappa.co/docs/apartmentlist-api/apartmentlist_search](https://scrappa.co/docs/apartmentlist-api/apartmentlist_search)
- **API group:** Apartment List API
- **Endpoint:** `GET https://scrappa.co/api/apartmentlist/search`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `location_id` | integer | Yes | Location id from location-autocomplete, for example 642592 for Austin, TX. |
| `beds` | string | No | Bedroom counts: 0 (studio), 1, 2 or 3 (3 or more). Repeat the parameter or separate with commas. |
| `baths` | string | No | Minimum bathrooms: 1, 2 or 3. |
| `price_min` | integer | No | Minimum monthly rent in US dollars, per unit. |
| `price_max` | integer | No | Maximum monthly rent in US dollars, per unit. |
| `amenities` | string | No | Amenity keys such as is_dog_friendly, is_cat_friendly, has_pool, has_gym, has_parking or has_in_unit_laundry. Properties must have all of them. Unknown keys are rejected. |
| `sort` | string | No | default (freshness), price_asc, price_desc or best_match. |
| `page` | integer | No | Result page, 1-based. |
| `per_page` | integer | No | Listings per page, 1-48 (default 20). |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/apartmentlist/search?location_id=642592&beds=2&price_max=1500&sort=price_asc&per_page=20"
```

## Example response

```json
{
    "success": true,
    "total": 357,
    "total_units": 4168,
    "returned": 1,
    "pagination": {
        "page": 1,
        "per_page": 20,
        "total_pages": 18,
        "has_next_page": true
    },
    "applied_filters": {
        "location_id": 642592,
        "beds": [
            2
        ],
        "price_max": 1500,
        "sort": "price_asc"
    },
    "listings": [
        {
            "rental_id": "p191304",
            "slug": "/tx/austin/polaris-on-the-park",
            "url": "https://www.apartmentlist.com/tx/austin/polaris-on-the-park",
            "name": "Polaris on the Park",
            "address": "1720 Woodward Street, Austin, TX 78741",
            "neighborhood": "Parker Lane",
            "geo": {
                "lat": 30.219922,
                "lon": -97.743986
            },
            "phone": "(555) 010-0100",
            "bed_range": [
                2
            ],
            "price_range": {
                "lowest": 1049,
                "highest": 1499,
                "by_bed_count": {
                    "2": {
                        "min": 1049,
                        "max": 1499
                    }
                }
            },
            "units_available": 29,
            "soonest_available": "2026-10-10",
            "floorplans": [
                {
                    "floorplan_id": 8983421,
                    "name": "2 Bedroom",
                    "bed": 2,
                    "bath": 1.5,
                    "sqft": 904,
                    "sqft_max": 904,
                    "price": 1049,
                    "units": [
                        {
                            "unit_id": "p191304-aaea9642-f14a-11e9-a811-1866dab905f4",
                            "name": "1716-111",
                            "price": 1049,
                            "base_price": 1049,
                            "total_price": null,
                            "required_fees": null,
                            "sqft": 904,
                            "available_on": "2026-10-10",
                            "available_now": true,
                            "lease_length": 12,
                            "apply_online_url": "https://example.com/apply"
                        }
                    ]
                }
            ],
            "photos": [
                "https://cdn.apartmentlist.com/image/upload/c_fill,dpr_auto,f_auto,g_center,h_415,q_auto,w_640/4d2d7bc54a662f16cebd8dac28ade93c.jpg"
            ],
            "community_amenities": [
                {
                    "name": "Dogs allowed",
                    "key": "is_dog_friendly",
                    "group": "pets"
                }
            ],
            "unit_amenities": [
                {
                    "name": "Dishwasher",
                    "key": "has_dishwasher",
                    "group": "unit_features"
                }
            ],
            "amenities_text": "On-site laundry, Google fiber, Patio / balcony, Hardwood floors, Dishwasher, Pet friendly + more",
            "has_rent_special": false,
            "rating": 4,
            "review_summary": {
                "title": "An oasis near vibrant Austin hotspots.",
                "text": "Residents like the dog park and the courtyards.",
                "tag": "Pet Paradise"
            },
            "is_featured": false,
            "featured_tag": null,
            "featured_description": null,
            "show_price": true,
            "source_name": "show_me_the_rent",
            "is_fee_transparent": false,
            "occupancy_types": [],
            "updated_at": "2026-10-26T01:27:49.617Z"
        }
    ],
    "meta": {
        "endpoint_family": "search",
        "billable": true,
        "attempts": 2,
        "omitted": 0,
        "id_list_cached": false
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Unknown Location | The `location_id` is not an Apartment List location (`unknown_location`). Take the id from location-autocomplete. Non-billable. |
| 422 | Validation Error | A query parameter is missing, unknown or unusable. Unknown parameters are rejected, never ignored (`request_rejected` is the same failure raised by the source). Non-billable. |
| 503 | Source Unavailable | Apartment List could not be reached in time, answered with an error, or its page layout changed (`upstream_unavailable`, `upstream_blocked`, `deadline_exhausted`, `parser_drift`). Retryable and never billed. Clients are never rate limited. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
