Airbnb

HealthyRead-only

Search Airbnb short-term rental listings by location and dates, and fetch listing details — clean JSON from Airbnb's server-rendered search and listing pages. Generated from www.airbnb.com.

Base URL
https://api.maviapi.com/v1/sites/airbnb
Version
3
Endpoints
0
Calls / 30d
GET/explore

Explore (combo)

One-call stay discovery: search a location and optionally enrich the top results with full listing details. Chains search -> listing server-side.

Bearer auth. Pass your key as Authorization: Bearer <key> on every request.
stringRequiredin query

Destination to search (city, neighborhood, address). Alias: q.

stringOptionalin query

Check-in date YYYY-MM-DD

stringOptionalin query

Check-out date YYYY-MM-DD

integerOptionalin query

Number of adults

integerOptionalin query

Minimum nightly price filter

integerOptionalin query

Maximum nightly price filter

stringOptionalin query

Room type filter

booleanOptionalin query

Enrich the top results with full listing details (description, images, occupancy)

integerOptionalin query

How many top results to enrich when details=true

integerOptionalin query

Source result page (18 per page)

integerOptionalin query

Max listings returned from the fetched page

integerOptionalin query

Offset within the fetched page

booleanOptionalin query

Bypass and repopulate the cache

dataobject
cachedboolean
sourcestring
paginationobject
Try itLive
GET
https://api.maviapi.com/v1/sites/airbnb/explore?location=Rome&checkin=2026-09-10&checkout=2026-09-14&adults=2&price_min=50&price_max=300&room_type=entire_home&details=true&top=3&page=1&limit=50&offset=0&refresh=false
Request
curl "https://api.maviapi.com/v1/sites/airbnb/explore?location=Rome&checkin=2026-09-10&checkout=2026-09-14&adults=2&price_min=50&price_max=300&room_type=entire_home&details=true&top=3&page=1&limit=50&offset=0&refresh=false" \
-H "Authorization: Bearer $MAVI_KEY"
Example1.4 KB
{
  "data": {
    "location": "Rome",
    "page": 1,
    "page_count": 15,
    "has_more": true,
    "listings": [
      {
        "id": "1703490465372485847",
        "url": "https://www.airbnb.com/rooms/1703490465372485847",
        "name": "Beautiful 4-person apartment - 6th arrondissement/Jardin du Luxembourg",
        "title": "Apartment in 6th Arrondissement",
        "subtitle": "Architect-renovated with two balconies",
        "rating": {
          "value": 4.88,
          "count": 8
        },
        "price": {
          "amount": 1601,
          "currency": "$",
          "display": "$1,601",
          "original": "$1,780",
          "qualifier": "for 4 nights",
          "label": "$1,601 for 4 nights",
          "secondary": null
        },
        "room_info": [
          "1 bedroom",
          "2 beds",
          "1 bath"
        ],
        "coordinate": {
          "latitude": 48.8421,
          "longitude": 2.3353
        },
        "images": [
          "https://a0.muscache.com/im/pictures/hosting/Hosting-1703490465372485847/original/8fa652c0.jpeg"
        ],
        "details": {
          "description": "Experience ancient Rome from an unbeatable location.",
          "images": [
            "https://example.com"
          ],
          "occupancy": 2
        }
      }
    ]
  },
  "cached": false,
  "source": "airbnb:combo",
  "pagination": {
    "total": 18,
    "limit": 50,
    "offset": 0,
    "count": 18,
    "has_more": true
  }
}

Get all the data, no code

Collect every page of GET /explore into a dataset, then download it as CSV or JSON. One credit per page; the download is free.