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

# Scrape all reviews of an Airbnb listing

> Given an Airbnb `room` (listing id or room URL), returns its guest `reviews`: `id`, `rating`, `text` (as written) with its `language`, `translatedText` (Airbnb's translation into `locale`), `date` (ISO), `localizedDate`, `stayDetail`, `photos`, `reviewer` (`id`, `name`, `photo`, `location` or `tenure`, `profileUrl`, `profileId`, `isSuperhost`, `deleted`) and the host's `response`. `reviewer.id` is Airbnb's account id (the one in its photo URLs; airbnb.com/users/show/<id> asks anonymous visitors to log in), while `profileUrl` is the public profile link Airbnb's own review cards open, keyed by a separate public id given as `profileId`. `deleted` is true when the guest has since closed their Airbnb account; Airbnb still sends the name, photo and location or tenure from the review, and they are returned as sent. Reads every review, not just the few on the room page: page with `page` (or `offset`) and `max_reviews` (up to 500 per call), order with `sort` (most_relevant, most_recent, highest_rated, lowest_rated) and drop older reviews with `since`. Also returns the `listing` summary (title, overall and category `rating`, `ratingDistribution`, `ratingCounts`, `reviewsCount`, `reviewTags`, host) and `totalResults`, `hasMore`, `nextPage`, `nextOffset`. `ratingDistribution` is Airbnb's own list of each star's share of the ratings as a 0-1 fraction (`{"stars": 5, "percentage": 0.957}` = 95.7%), not a count like the other review plugins return; `ratingCounts` gives the number of ratings per star (`{"5": 692, ...}`) worked out from those shares and `reviewsCount`, and is null when the shares do not fit it (seen on hotel listings, whose distribution covers more ratings than `reviewsCount`). Billed one unit per 50-review page read (`pagesFetched`). Companion to the Airbnb search (`/travel/airbnb`) and listing (`/travel/airbnb-room`) plugins.



## OpenAPI

````yaml /api-reference/openapi.json post /travel/airbnb-reviews
openapi: 3.1.0
info:
  title: ScrapeUnblocker API
  description: >-
    Public API for the ScrapeUnblocker proxy/anti-bot service. Authenticate
    every request with the `x-scrapeunblocker-key` header. Documented here:
    page-source extraction, Google SERP scraping, image fetch, and the dedicated
    plugin endpoints (search engines, marketplaces, reviews, travel, social and
    more). All other paths exist for internal operations and are intentionally
    hidden from this spec.
  version: 3.0.0
servers:
  - url: https://api.scrapeunblocker.com
    description: Production
security: []
paths:
  /travel/airbnb-reviews:
    post:
      tags:
        - Plugins
      summary: Scrape all reviews of an Airbnb listing
      description: >-
        Given an Airbnb `room` (listing id or room URL), returns its guest
        `reviews`: `id`, `rating`, `text` (as written) with its `language`,
        `translatedText` (Airbnb's translation into `locale`), `date` (ISO),
        `localizedDate`, `stayDetail`, `photos`, `reviewer` (`id`, `name`,
        `photo`, `location` or `tenure`, `profileUrl`, `profileId`,
        `isSuperhost`, `deleted`) and the host's `response`. `reviewer.id` is
        Airbnb's account id (the one in its photo URLs;
        airbnb.com/users/show/<id> asks anonymous visitors to log in), while
        `profileUrl` is the public profile link Airbnb's own review cards open,
        keyed by a separate public id given as `profileId`. `deleted` is true
        when the guest has since closed their Airbnb account; Airbnb still sends
        the name, photo and location or tenure from the review, and they are
        returned as sent. Reads every review, not just the few on the room page:
        page with `page` (or `offset`) and `max_reviews` (up to 500 per call),
        order with `sort` (most_relevant, most_recent, highest_rated,
        lowest_rated) and drop older reviews with `since`. Also returns the
        `listing` summary (title, overall and category `rating`,
        `ratingDistribution`, `ratingCounts`, `reviewsCount`, `reviewTags`,
        host) and `totalResults`, `hasMore`, `nextPage`, `nextOffset`.
        `ratingDistribution` is Airbnb's own list of each star's share of the
        ratings as a 0-1 fraction (`{"stars": 5, "percentage": 0.957}` = 95.7%),
        not a count like the other review plugins return; `ratingCounts` gives
        the number of ratings per star (`{"5": 692, ...}`) worked out from those
        shares and `reviewsCount`, and is null when the shares do not fit it
        (seen on hotel listings, whose distribution covers more ratings than
        `reviewsCount`). Billed one unit per 50-review page read
        (`pagesFetched`). Companion to the Airbnb search (`/travel/airbnb`) and
        listing (`/travel/airbnb-room`) plugins.
      operationId: airbnb_reviews_travel_airbnb_reviews_post
      parameters:
        - name: room
          in: query
          required: true
          schema:
            type: string
            description: >-
              Airbnb listing id (e.g. 23860926) or a room URL on any Airbnb
              domain, e.g. 'https://www.airbnb.co.uk/rooms/23860926'.
            title: Room
          description: >-
            Airbnb listing id (e.g. 23860926) or a room URL on any Airbnb
            domain, e.g. 'https://www.airbnb.co.uk/rooms/23860926'.
        - name: max_reviews
          in: query
          required: false
          schema:
            type: integer
            description: >-
              How many reviews to return (1-500). Airbnb serves 50 reviews per
              request; each request is one billed unit.
            default: 50
            title: Max Reviews
          description: >-
            How many reviews to return (1-500). Airbnb serves 50 reviews per
            request; each request is one billed unit.
        - name: page
          in: query
          required: false
          schema:
            type: integer
            description: >-
              1-based page of `max_reviews`-sized pages (1-1000). Use the
              `nextPage` of a previous response to continue.
            default: 1
            title: Page
          description: >-
            1-based page of `max_reviews`-sized pages (1-1000). Use the
            `nextPage` of a previous response to continue.
        - name: offset
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: >-
              Start at this review position instead of `page` (0-20000). Use the
              `nextOffset` of a previous response to resume exactly.
            title: Offset
          description: >-
            Start at this review position instead of `page` (0-20000). Use the
            `nextOffset` of a previous response to resume exactly.
        - name: sort
          in: query
          required: false
          schema:
            type: string
            description: >-
              Review order: most_relevant, most_recent, highest_rated,
              lowest_rated (the default is Airbnb's own order).
            default: most_relevant
            title: Sort
          description: >-
            Review order: most_relevant, most_recent, highest_rated,
            lowest_rated (the default is Airbnb's own order).
        - name: locale
          in: query
          required: false
          schema:
            type: string
            description: >-
              Language to translate reviews and host responses into, e.g. en,
              de, fr, es, pt-BR. The original text and its language are always
              returned too.
            default: en
            title: Locale
          description: >-
            Language to translate reviews and host responses into, e.g. en, de,
            fr, es, pt-BR. The original text and its language are always
            returned too.
        - name: since
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Only reviews written on or after this date (YYYY-MM-DD). With
              sort=most_recent it also stops paging once older reviews start.
            title: Since
          description: >-
            Only reviews written on or after this date (YYYY-MM-DD). With
            sort=most_recent it also stops paging once older reviews start.
        - name: include_listing
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              Also return the listing summary (title, overall and category
              ratings, rating distribution, host). Set false to skip that
              request.
            default: true
            title: Include Listing
          description: >-
            Also return the listing summary (title, overall and category
            ratings, rating distribution, host). Set false to skip that request.
        - name: proxy_country
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Exit-IP country (ISO-2).
            title: Proxy Country
          description: Exit-IP country (ISO-2).
      responses:
        '200':
          description: >-
            JSON with `listing`, a `reviews` array, totals and paging. A listing
            without reviews is an empty array.
          content:
            application/json:
              schema: {}
        '400':
          description: Invalid parameters.
        '404':
          description: No such listing (removed, private or wrong id).
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '502':
          description: Blocked by Airbnb or no review data returned.
        '504':
          description: Fetch timed out.
      security:
        - ScrapeUnblockerKey: []
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ScrapeUnblockerKey:
      type: apiKey
      in: header
      name: x-scrapeunblocker-key
      description: Your ScrapeUnblocker API key. Apply on every request.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.