Metasearch & booking apps

Live travel prices for your product, without the scraping team

Destination search with prices, every seller for a hotel, OTA rates and flight itineraries from one key and one credit meter. Your team builds the product and the API handles collection.

Built forTravel startupsMetasearch sitesBooking appsCorporate travel tools

See it in action

A search page, built on two calls

Destination results from one call, every seller for the hotel you open from another. Select a hotel to compare sellers.

  • data from the API
  • added by your code

Example · hotel search app

Which hotels are available, and who sells each one cheapest?

  1. POST /v1/serp/google_hotels
  2. POST /v1/offers
  3. your UI
Chicago· Apr 22–24 · 2 adults

About 20 hotels per page · sorted by lowest price

    • Official sitelowest$209
    • Agoda$211
    • Booking.com$214
    • Expedia$214
    • Hotels.com$219

Prices per night, 2 nights. Select a hotel to see every seller.

Fictional hotels, illustrative prices.

The problem

Can we show live hotel prices without building scrapers?

A comparison product is only as good as its prices, and keeping scrapers alive for every OTA is a full-time job: sessions, blocking, layout changes, retries and parsing, multiplied by every source.

The API gives you stable JSON shapes per source and charges only for successful calls. When a source changes, the fix ships on our side, not in your sprint.

Workflow

How teams build it

  1. Step 1

    Search a destination

    Google Hotels results for a city and dates, about 20 properties per page with prices, ratings and filters.

    POST /v1/serp/google_hotels
  2. Step 2

    Show every seller

    For the hotel a user opens, return each booking site with its price per room.

    POST /v1/offers
  3. Step 3

    Go deeper per channel

    Read Booking.com, Expedia, Agoda or Hotels.com directly when you need the OTA’s own rooms and rate plans.

    POST /v1/ota/expedia
  4. Step 4

    Add flights and rentals

    Google Flights itineraries with booking options, plus Vrbo and Airbnb quotes, on the same key.

    POST /v1/serp/google_flights

Output

What you get back

Destination results
about 20 hotels per page with prices, ratings and amenities
Sellers per hotel
each booking site Google shows, with per-room prices
OTA rate plans
rooms, rate plans and payment models from the OTA itself
Flights
itineraries, layovers, emissions, price insights and sellers
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-12-03",
    "check_out_date": "2026-12-05"
  }'
Response (trimmed)
{
  "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-16",
    "check_out_date": "2029-03-18",
    "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="
  }
}

Worked example

A travel app serves 300 destination searches and 300 hotel detail views a day

Illustrative scenario, not a customer

CallPer dayCredits eachCredits a day
Destination search pages3003900
Sellers for an opened hotel3003900
Credits a month
54,000
Fits on
Growth
Plan price
$149 /month

30 days a month. Failed and empty requests cost nothing, so a bad day costs less. Compare plans

Can I cache results?

Yes. Store responses in your own systems for as long as your product needs them. Calendar rates carry provenance that says when each was observed, so you can show freshness honestly.

How fast are responses?

It depends on the source. Google Hotels searches answer in seconds. Flight booking options check sellers while the request is open, which takes about 3 to 12 seconds. Set client timeouts per endpoint.

Do I need different keys per source?

No. One API key and one credit meter cover every endpoint.

Can I move from another SERP API?

Yes. The SERP-compatible routes for Google Hotels, Google Flights and Airbnb accept the standard parameter names and return the standard shapes.

Start with 1,000 free credits a month

Tell us which properties, sources and engines you need. Our team sets up your account, and you create and rotate API keys yourself. The API is free during the beta.