Skip to content
SearchAPI compatible

Google Hotels search (SearchAPI)

Drop-in for SearchAPI's engine=google_hotels.

POST/v1/serp/google_hotels
3 credits3 per page of results; an empty page and failed requests are free

Same request names and response hierarchy (search_parameters, search_information, properties[], brands[], pagination). Extracted prices are exact floats rather than rounded integers, and each property adds prices[] where Google attached seller rows. Filters this source cannot honour are refused with 422 instead of being ignored.

Request

POSThttps://api.scrapercompany.com/v1/serp/google_hotels

Authenticate with your API key in the x-api-key header (see Authentication).

Body

JSON object. Unknown fields are rejected with 422.

  • qstringrequiredmin length 2, max length 200

    Destination query exactly as a traveller would type it into Google Hotels, e.g. hotels in Montreal, Paris, hotels near JFK. Google resolves it to a place; the response reports which in search_information.location.

  • adultsintegerdefault 2min 1, max 10

    Adults in the room. Encoded as one guest entry each, the way Google's own control sends them.

  • currencystringdefault USD

    ISO 4217 code for the returned prices. Major currencies include AED, AUD, BRL, CAD, CHF, CNY, EUR, GBP, HKD, INR, JPY, KRW, MXN, NZD, SGD, USD; all 39 supported codes are listed in the enum.

    39 allowed values

    AED, ARS, AUD, BRL, CAD, CHF, CLP, CNY, COP, CZK, DKK, EGP, EUR, GBP, HKD, HUF, IDR, ILS, INR, JPY, KRW, MXN, MYR, NOK, NZD, PEN, PHP, PLN, QAR, RON, SAR, SEK, SGD, THB, TRY, TWD, USD, VND, ZAR

  • glstringdefault us

    Two-letter Google country (market). Sets the market; the currency is requested separately.

    251 allowed values

    ad, ae, af, ag, ai, al, am, ao, aq, ar, as, at, au, aw, ax, az, ba, bb, bd, be, bf, bg, bh, bi, bj, bl, bm, bn, bo, bq, br, bs, bt, bv, bw, by, bz, ca, cc, cd, cf, cg, ch, ci, ck, cl, cm, cn, co, cr, cu, cv, cw, cx, cy, cz, de, dj, dk, dm, do, dz, ec, ee, eg, eh, er, es, et, fi, fj, fk, fm, fo, fr, ga, gb, gd, ge, gf, gg, gh, gi, gl, gm, gn, gp, gq, gr, gs, gt, gu, gw, gy, hk, hm, hn, hr, ht, hu, id, ie, il, im, in, io, iq, ir, is, it, je, jm, jo, jp, ke, kg, kh, ki, km, kn, kp, kr, kw, ky, kz, la, lb, lc, li, lk, lr, ls, lt, lu, lv, ly, ma, mc, md, me, mf, mg, mh, mk, ml, mm, mn, mo, mp, mq, mr, ms, mt, mu, mv, mw, mx, my, mz, na, nc, ne, nf, ng, ni, nl, no, np, nr, nu, nz, om, pa, pe, pf, pg, ph, pk, pl, pm, pn, pr, ps, pt, pw, py, qa, re, ro, rs, ru, rw, sa, sb, sc, sd, se, sg, sh, si, sj, sk, sl, sm, sn, so, sr, ss, st, sv, sx, sy, sz, tc, td, tf, tg, th, tj, tk, tl, tm, tn, to, tr, tt, tv, tw, tz, ua, ug, uk, um, us, uy, uz, va, vc, ve, vg, vi, vn, vu, wf, ws, xk, ye, yt, za, zm, zw

  • hlstringdefault enpattern ^[a-z]{2,3}(-[A-Za-z]{2,4})?$

    Interface language. Display strings follow it; hotel amenity names are always English.

  • sort_bystringdefault relevance

    Result order, as Google's Sort by control.

    One ofhighest_ratinglowest_pricemost_reviewedrelevance

  • price_mininteger | nullmin 0

    Minimum nightly price in currency.

  • price_maxinteger | nullmin 0

    Maximum nightly price in currency.

  • free_cancellationbooleandefault false

    Only properties Google lists with free cancellation.

  • special_offersbooleandefault false

    Only properties with a special offer.

  • eco_certifiedbooleandefault false

    Only eco-certified properties.

  • enginestringdefault google_hotels

    Accepted for SearchAPI compatibility; must be google_hotels.

    One ofgoogle_hotels

  • property_typestringdefault hotel

    hotel (default) is Google's own list, which Google may blend with vacation rentals; each result states its type. vacation_rental is refused with 422: Google does not honour the rentals-only category for this search, so it is refused rather than silently ignored.

    One ofhotelvacation_rental

  • check_in_datestring (date)required

    First night of the stay, YYYY-MM-DD.

  • check_out_datestring (date)required

    Departure date, after check_in_date; at most 30 nights.

  • children_agesstring | array of integer | null

    Comma-separated child ages, 0-17 (SearchAPI: 2,5).

  • ratinginteger | null

    SearchAPI rating code: 7 (3.5+), 8 (4.0+), 9 (4.5+).

    One of789

  • hotel_classstring | array of integer | null

    Comma-separated star classes, 2-5.

  • amenitiesstring | array of integer | null

    Comma-separated amenity ids (same ids as SearchAPI/SerpApi, e.g. 6 Pool, 35 Free Wi-Fi).

  • property_typesstring | array of integer | null

    Comma-separated property-type ids, e.g. 19 Bed and breakfasts, 14 Hostels.

  • brandsstring | array of integer | null

    Not supported: Google ignores brand filters on this search, so a non-empty value is refused with 422.

  • for_displaced_individualsbooleandefault false

    Not supported; true is refused with 422.

  • bedroomsinteger | nullmin 0

    Vacation-rental filter. Not supported; a value above 0 is refused with 422.

  • bathroomsinteger | nullmin 0

    Vacation-rental filter. Not supported; a value above 0 is refused with 422.

  • bounding_boxstring | null

    Not supported; search by q.

  • next_page_tokenstring | nullpattern ^[A-Za-z0-9_\-+/=]{1,200}$

    Opaque cursor from pagination.next_page_token of the previous page. Resend the same query, stay, occupancy and filters with it, exactly as with SearchAPI.

  • zero_retentionbooleandefault false

    Accepted for SearchAPI compatibility; search results are never persisted.

Example request

curl -X POST "https://api.scrapercompany.com/v1/serp/google_hotels" \
  -H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "q": "hotels in Montreal",
    "adults": 2,
    "currency": "CAD",
    "gl": "ca",
    "check_in_date": "2026-11-30",
    "check_out_date": "2026-12-02"
  }'

Response

200 — SearchAPI google_hotels shape; extracted prices are exact floats. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).

200 response
{
  "search_metadata": {
    "status": "Success",
    "created_at": "2026-09-30T22:46:08Z",
    "request_time_taken": 1.89,
    "total_time_taken": 1.89
  },
  "search_parameters": {
    "engine": "google_hotels",
    "q": "hotels in Montreal",
    "check_in_date": "2029-03-14",
    "check_out_date": "2029-03-16",
    "adults": 2,
    "currency": "CAD",
    "gl": "ca",
    "hl": "en",
    "sort_by": "relevance"
  },
  "search_information": {
    "total_results": 5778,
    "location": "Montreal",
    "currency_matches_request": true
  },
  "properties": [
    {
      "type": "hotel",
      "property_token": "ChgImtDg_rW5k8iWARoLL2cvMXRzamQ4NncQAQ",
      "data_id": "0x4cc9178df6e67b8d:0x96904dcb5fd8281a",
      "name": "Radisson Hotel Montreal Airport",
      "link": "https://www.choicehotels.com/quebec/montreal/radisson-hotels/cnc37?mc=llgoxxpx",
      "description": "Modern lodging with a restaurant & an indoor pool, plus free WiFi & an airport shuttle.",
      "gps_coordinates": {
        "latitude": 45.4851544,
        "longitude": -73.6909316
      },
      "city": "Montreal",
      "country": "CA",
      "check_in_time": "3:00 PM",
      "check_out_time": "11:00 AM",
      "price_per_night": {
        "price": "$121",
        "extracted_price": 121,
        "price_before_taxes": "$102",
        "extracted_price_before_taxes": 101.67969
      },
      "total_price": {
        "price": "$242",
        "extracted_price": 242,
        "price_before_taxes": "$203",
        "extracted_price_before_taxes": 203.36
      },
      "deal": "27% less than usual",
      "deal_description": "Great Deal",
      "nearby_places": [
        {
          "name": "Côte-de-Liesse / No 6400",
          "transportations": [
            {
              "type": "Walking",
              "duration": "2 min"
            }
          ]
        }
      ],
      "hotel_class": "4-star hotel",
      "extracted_hotel_class": 4,
      "rating": 3.5,
      "reviews": 2535,
      "reviews_histogram": {
        "1": 443,
        "2": 220,
        "3": 396,
        "4": 674,
        "5": 802
      },
      "location_rating": 3.1,
      "proximity_to_things_to_do_rating": 3.2,
      "proximity_to_restaurants_rating": 2.8,
      "proximity_to_transit_rating": 2.5,
      "airport_access_rating": 4.6,
      "reviews_breakdown": [
        {
          "name": "Fitness",
          "description": "Fitness",
          "total": 199,
          "positive": 119,
          "neutral": 13,
          "negative": 67
        },
        {
          "name": "Pool",
          "description": "Pool",
          "total": 107,
          "positive": 78,
          "neutral": 7,
          "negative": 22
        }
      ],
      "amenities": [
        "Breakfast ($)",
        "Free Wi-Fi"
      ],
      "images": [
        {
          "thumbnail": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWk0lycQOr7G_2oWSLSEpBlBBfN0wY5jwgISonycKD0xeg__AHXxCEpS3XqlR9IcD1alML-r6P2EvsCMBx_Lt3KN8sOYNRZU4Jouiz7gc8JcjOskWyeb7HyYDCnqD1bR4L-24cbbvm9TvXHm=s287-w287-h192-n-k-no-v1",
          "original": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWk0lycQOr7G_2oWSLSEpBlBBfN0wY5jwgISonycKD0xeg__AHXxCEpS3XqlR9IcD1alML-r6P2EvsCMBx_Lt3KN8sOYNRZU4Jouiz7gc8JcjOskWyeb7HyYDCnqD1bR4L-24cbbvm9TvXHm=s10000"
        }
      ],
      "thumbnail": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWk0lycQOr7G_2oWSLSEpBlBBfN0wY5jwgISonycKD0xeg__AHXxCEpS3XqlR9IcD1alML-r6P2EvsCMBx_Lt3KN8sOYNRZU4Jouiz7gc8JcjOskWyeb7HyYDCnqD1bR4L-24cbbvm9TvXHm=s150-w92-h150-n-k-no",
      "currency": "CAD"
    },
    {
      "type": "vacation_rental",
      "property_token": "ChkQzZioqLvP4IUiGg0vZy8xMXpjZmhoMzJwEAI",
      "name": "HoMa Loft 206 – Bright, Modern & Easy Parking",
      "link": "https://www.host-me.ca/properties/69e924482b031c00122c840e",
      "gps_coordinates": {
        "latitude": 45.54264831542969,
        "longitude": -73.53958129882812
      },
      "city": "Montreal",
      "country": "CA",
      "check_in_time": "4:00 PM",
      "check_out_time": "10:00 AM",
      "price_per_night": {
        "price": "$152",
        "extracted_price": 152.34,
        "price_before_taxes": "$138",
        "extracted_price_before_taxes": 138.49
      },
      "total_price": {
        "price": "$305",
        "extracted_price": 304.68,
        "price_before_taxes": "$277",
        "extracted_price_before_taxes": 276.98
      },
      "nearby_places": [
        {
          "name": "Montréal-Pierre Elliott Trudeau International Airport",
          "transportations": [
            {
              "type": "Taxi",
              "duration": "35 min"
            },
            {
              "type": "Public transport",
              "duration": "1 hr 30 min"
            }
          ]
        }
      ],
      "location_rating": 2.9,
      "proximity_to_restaurants_rating": 2.5,
      "airport_access_rating": 3.9,
      "amenities": [
        "Air conditioning",
        "Kid-friendly"
      ],
      "excluded_amenities": [
        "No balcony",
        "No crib"
      ],
      "essential_info": [
        "Entire apartment",
        "Sleeps 2"
      ],
      "images": [
        {
          "thumbnail": "https://lh3.googleusercontent.com/grass-proxy/AIM7gW39AJ5sNUqWYbyQkdBH2YHq7dV63MGIYm0DnOBPevzdmKuKVhPt19sLNF1TWMEzHBW2kN-KopL4tXsF2coEPixiQxcAV6aM2SWxYoWA73riNVMyRVNI3QHt-96hRHLb5couboHdgW6G-tN6pu_pOwPJZdNGqL_RGKM9UOM7G9cUNeoBDdsqXM6hNg=s287-w287-h192-n-k-no-v1",
          "original": "https://lh3.googleusercontent.com/grass-proxy/AIM7gW39AJ5sNUqWYbyQkdBH2YHq7dV63MGIYm0DnOBPevzdmKuKVhPt19sLNF1TWMEzHBW2kN-KopL4tXsF2coEPixiQxcAV6aM2SWxYoWA73riNVMyRVNI3QHt-96hRHLb5couboHdgW6G-tN6pu_pOwPJZdNGqL_RGKM9UOM7G9cUNeoBDdsqXM6hNg=s10000"
        }
      ],
      "thumbnail": "https://lh3.googleusercontent.com/grass-proxy/AIM7gW39AJ5sNUqWYbyQkdBH2YHq7dV63MGIYm0DnOBPevzdmKuKVhPt19sLNF1TWMEzHBW2kN-KopL4tXsF2coEPixiQxcAV6aM2SWxYoWA73riNVMyRVNI3QHt-96hRHLb5couboHdgW6G-tN6pu_pOwPJZdNGqL_RGKM9UOM7G9cUNeoBDdsqXM6hNg=s150-w92-h150-n-k-no",
      "prices": [
        {
          "source": "host-me",
          "raw_source": "host-me",
          "displayed_prices": [
            "$138",
            "$152"
          ],
          "partner_id": "420480647",
          "logo": "//www.gstatic.com/travel-hotels/branding/icon_default.png",
          "price_per_night": "$152",
          "price_per_night_before_taxes": "$138",
          "extracted_price_per_night": 152,
          "extracted_price_per_night_before_taxes": 138,
          "has_free_cancellation": true,
          "free_cancellation_until": "Oct 16",
          "free_cancellation_time": "4:00 PM",
          "is_featured": true
        }
      ],
      "currency": "CAD"
    }
  ],
  "brands": [
    {
      "id": 33,
      "title": "Accor Live Limitless",
      "children": [
        {
          "id": 8,
          "title": "Fairmont Hotels and Resorts"
        },
        {
          "id": 47,
          "title": "Novotel"
        }
      ]
    },
    {
      "id": 18,
      "title": "Best Western International",
      "children": [
        {
          "id": 155,
          "title": "Best Western"
        },
        {
          "id": 104,
          "title": "Best Western Plus"
        }
      ]
    }
  ],
  "pagination": {
    "records_from": 1,
    "records_to": 20,
    "next_page_token": "CBI="
  }
}
Arrays are shortened to their first items.

Response fields

Fields marked required are always present; others appear when they apply.

  • search_metadataobjectrequired
    Show 4 child fields
    • search_metadata.statusstringrequired

      One ofSuccess

    • search_metadata.created_atstring (date-time)required

      UTC, ISO-8601 with Z.

    • search_metadata.request_time_takennumberrequired

      Seconds.

    • search_metadata.total_time_takennumberrequired

      Seconds.

  • search_parametersobjectrequired

    Echo of the effective request. Optional filters appear only when set.

    Show 21 child fields
    • search_parameters.enginestringrequired

      One ofgoogle_hotels

    • search_parameters.qstringrequired
    • search_parameters.check_in_datestring (date)required
    • search_parameters.check_out_datestring (date)required
    • search_parameters.adultsintegerrequired
    • search_parameters.children_agesarray of integerrequired

      One age per child; empty when none.

    • search_parameters.currencystringrequired

      Requested currency, upper-case.

    • search_parameters.glstringrequired

      Market country code, lower-case.

    • search_parameters.hlstringrequired
    • search_parameters.sort_bystringrequired

      One ofrelevancelowest_pricehighest_ratingmost_reviewed

    • search_parameters.price_mininteger

      Present only when set in the request.

    • search_parameters.price_maxinteger

      Present only when set in the request.

    • search_parameters.min_ratingnumber

      3.5, 4.0 or 4.5. Present only when set in the request. Converted from the rating code (7, 8, 9).

    • search_parameters.hotel_classarray of integer

      Present only when set in the request.

    • search_parameters.amenitiesarray of integer

      Present only when set in the request.

    • search_parameters.property_typesarray of integer

      Present only when set in the request.

    • search_parameters.free_cancellationboolean

      Present only when true.

    • search_parameters.special_offersboolean

      Present only when true.

    • search_parameters.eco_certifiedboolean

      Present only when true.

    • search_parameters.next_page_tokenstring

      Page token this page was fetched with. Present only when one was sent.

    • search_parameters.property_typestringrequired

      Always hotel.

      One ofhotel

  • search_informationobjectrequired
    Show 3 child fields
    • search_information.total_resultsinteger | nullrequired

      Total properties Google reports for the search.

    • search_information.locationstring | nullrequired

      Place Google resolved q to.

    • search_information.currency_matches_requestbooleanrequired

      False when Google returned a currency other than the one requested.

  • propertiesarray of objectrequired

    About 20 per page.

    Show 34 child fields
    • properties[].typestringrequired

      Google blends vacation rentals into the default list; this says which each result is.

      One ofhotelvacation_rental

    • properties[].property_tokenstringrequired

      Google property token; pass it to /v1/serp/google_hotels_property or /v1/calendar.

    • properties[].data_idstring

      Google Maps data id (0x...:0x...).

    • properties[].namestringrequired
    • properties[].linkstring

      The property's own website.

    • properties[].descriptionstring
    • properties[].gps_coordinatesobject
      Show 2 child fields
      • properties[].gps_coordinates.latitudenumberrequired
      • properties[].gps_coordinates.longitudenumberrequired
    • properties[].citystring

      The place Google resolved q to (same as search_information.location), not a per-property city.

    • properties[].countrystring

      ISO 3166-1 alpha-2 country code.

    • properties[].check_in_timestring

      As displayed, e.g. 3:00 PM.

    • properties[].check_out_timestring
    • properties[].price_per_nightobject

      Present only when the stay total is known.

      Show 4 child fields
      • properties[].price_per_night.pricestring | nullrequired

        Display string including taxes and fees.

      • properties[].price_per_night.extracted_pricenumber | nullrequired

        Stay total / nights: nightly price including taxes and fees.

      • properties[].price_per_night.price_before_taxesstring | nullrequired

        Display string before taxes; the price Google's card shows.

      • properties[].price_per_night.extracted_price_before_taxesnumber | nullrequired

        Google's exact nightly figure before taxes (base + mandatory fees).

    • properties[].total_priceobject

      Present only when the stay total is known.

      Show 4 child fields
      • properties[].total_price.pricestring | nullrequired

        Whole-stay display string including taxes and fees.

      • properties[].total_price.extracted_pricenumberrequired

        Whole-stay price including taxes and fees.

      • properties[].total_price.price_before_taxesstring | nullrequired

        Whole-stay display string before taxes.

      • properties[].total_price.extracted_price_before_taxesnumber | nullrequired

        Whole-stay base + mandatory fees.

    • properties[].dealstring

      Deal text, e.g. 27% less than usual.

    • properties[].deal_descriptionstring

      Badge Google renders: Deal, Great Deal, Great Price, or another label.

    • properties[].nearby_placesarray of objectrequired
      Show 2 child fields
      • properties[].nearby_places[].namestringrequired
      • properties[].nearby_places[].transportationsarray of objectrequired
    • properties[].hotel_classstring

      As displayed, e.g. 4-star hotel.

    • properties[].extracted_hotel_classinteger

      Star class, 1-5.

    • properties[].ratingnumber

      Guest rating out of 5.

    • properties[].reviewsinteger
    • properties[].reviews_histogramobject

      Review count per star rating, keyed 1-5.

      Show 5 child fields
      • properties[].reviews_histogram.1integer
      • properties[].reviews_histogram.2integer
      • properties[].reviews_histogram.3integer
      • properties[].reviews_histogram.4integer
      • properties[].reviews_histogram.5integer
    • properties[].location_ratingnumber

      Overall location score, out of 5.

    • properties[].proximity_to_things_to_do_ratingnumber

      Score for proximity to things to do, out of 5.

    • properties[].proximity_to_restaurants_ratingnumber

      Score for proximity to restaurants, out of 5.

    • properties[].proximity_to_transit_ratingnumber

      Score for proximity to public transit, out of 5.

    • properties[].airport_access_ratingnumber

      Score for airport access, out of 5.

    • properties[].reviews_breakdownarray of objectrequired

      Empty when Google gave none.

      Show 6 child fields
      • properties[].reviews_breakdown[].namestringrequired

        Review topic, e.g. Fitness.

      • properties[].reviews_breakdown[].descriptionstringrequired
      • properties[].reviews_breakdown[].totalintegerrequired

        Reviews that mention the topic.

      • properties[].reviews_breakdown[].positiveintegerrequired
      • properties[].reviews_breakdown[].neutralintegerrequired

        total - positive - negative, never below 0.

      • properties[].reviews_breakdown[].negativeintegerrequired
    • properties[].amenitiesarray of stringrequired

      Hotel amenity names are always English; rentals use Google's own labels.

    • properties[].excluded_amenitiesarray of string

      Amenities a rental states it lacks, e.g. No balcony.

    • properties[].essential_infoarray of string

      Rental basics such as Entire apartment or Sleeps 2.

    • properties[].imagesarray of objectrequired
      Show 2 child fields
      • properties[].images[].thumbnailstringrequired

        Image URL as Google sent it (card size).

      • properties[].images[].originalstringrequired

        Largest rendition of the same image; equals thumbnail when no larger size is available.

    • properties[].thumbnailstring
    • properties[].pricesarray of object

      Seller rows Google attached to the card (an addition to SearchAPI's shape); mostly vacation rentals.

      Show 13 child fields
      • properties[].prices[].sourcestringrequired

        Seller name, with country-domain variants merged (e.g. Booking.com).

      • properties[].prices[].raw_sourcestringrequired

        Seller name as displayed.

      • properties[].prices[].displayed_pricesarray of stringrequired

        Every price string on the row, as displayed, including a lone one whose basis Google does not label.

      • properties[].prices[].partner_idstring | nullrequired

        Google's partner id for the seller.

      • properties[].prices[].logostring | nullrequired

        Logo URL; may be protocol-relative (//...).

      • properties[].prices[].price_per_nightstring | nullrequired

        Nightly display string including taxes and fees. Null unless the row shows a before-taxes / all-in pair.

      • properties[].prices[].price_per_night_before_taxesstring | nullrequired

        Nightly display string before taxes. Null unless the row shows a pair.

      • properties[].prices[].extracted_price_per_nightnumber | nullrequired

        Nightly price including taxes and fees.

      • properties[].prices[].extracted_price_per_night_before_taxesnumber | nullrequired

        Nightly price before taxes.

      • properties[].prices[].has_free_cancellationbooleanrequired
      • properties[].prices[].free_cancellation_untilstring | nullrequired

        Last free-cancellation date as displayed, e.g. Oct 16.

      • properties[].prices[].free_cancellation_timestring | nullrequired

        e.g. 4:00 PM.

      • properties[].prices[].is_featuredbooleanrequired

        True for rows from Google's featured list.

    • properties[].currencystring

      ISO 4217 code of every price on the property.

  • brandsarray of objectrequired
    Show 3 child fields
    • brands[].idintegerrequired

      Google brand id.

    • brands[].titlestringrequired

      Brand name; empty string when Google did not name it.

    • brands[].childrenarray of objectrequired

      Sub-brands.

      Show 2 child fields
      • brands[].children[].idintegerrequired
      • brands[].children[].titlestringrequired
  • paginationobjectrequired

    Pages overlap by a few results (page 2 starts before page 1 ends); de-duplicate by property_token.

    Show 3 child fields
    • pagination.records_frominteger | nullrequired

      1-based position of the first result on this page.

    • pagination.records_tointeger | nullrequired

      1-based position of the last result on this page.

    • pagination.next_page_tokenstring | nullrequired

      Send it back (as page_token on /v1/hotels/search, next_page_token on /v1/serp/google_hotels) with the same query, stay, party and filters for the next page. Null on the last page.

Errors

Errors return a JSON body with a detail field. Failed requests are not charged. See Errors for the full list and retry advice.

StatusMeaningRetry?
401Unauthorized

Missing or invalid API key.

{"detail":"missing or invalid API key"}
No, fix the request
402Payment Required

Not enough credits for this request. Only returned once credit enforcement is switched on; during the beta metering runs in shadow mode and never blocks.

{"detail":"insufficient credits: this request costs 5, 0 available. Credits renew 2026-11-01."}
No, fix the request
404Not Found

The property, stay, job or record was not found.

{"detail":"job not found"}
No, fix the request
422Unprocessable Content

Request validation failed. detail is a list of problems for schema errors, or a string for semantic checks performed by the endpoint.

{"detail":[{"loc":["body","name"],"msg":"Field required","type":"missing"}]}
No, fix the request
429Too Many Requests

Too many requests: the key's requests-per-minute limit was exceeded, or (once credit enforcement is on) the plan's concurrent-request limit. No rate-limit or Retry-After headers are sent; back off and retry.

{"detail":"rate limit 60/min exceeded"}
Yes, with backoff
502Bad Gateway

The upstream source failed, blocked the request or returned an unusable answer. Safe to retry later; failed requests are not charged.

{"detail":"RuntimeError"}
Yes, with backoff

Try it

  1. Export your key: export SCRAPERCOMPANY_API_KEY=sk_... (no key yet? request access).
  2. Copy the cURL example above and run it in a terminal.
  3. Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.

Credits

3 credits per successful call (3 per page of results; an empty page and failed requests are free). Failed, blocked and empty results are free. Credit metering is in beta and does not block requests yet.