Migrate from SearchApi
The /v1/serp and /api/v1/search endpoints accept SearchApi parameters and return its shapes: switch the base URL and key.
Overview
If you already call SearchApi's google_hotels, google_hotels_property, airbnb or airbnb_property_availability_calendar engines, the compatible endpoints accept the same parameter names and return the same response hierarchy, so your parsing code keeps working. The Google Flights endpoints follow SearchApi's and SerpApi's Google Flights flow (departure_token, booking_token), with their own parameter names. What changes is the host, the key and — for everything except the Airbnb GET alias — the HTTP method: these endpoints take a JSON body.
Endpoint mapping
| SearchApi | ScraperCompany | Compatibility |
|---|---|---|
GET /api/v1/search?engine=airbnb | Drop-in: same path, query parameters and response. Also available as POST /v1/serp/airbnb with a JSON body. | |
engine=google_hotels | Same request names (q, check_in_date, check_out_date, filters, next_page_token) and response hierarchy. Filters this source can't honour (brands, rentals only, bounding box, bedrooms, bathrooms) are refused with 422 instead of ignored. | |
engine=google_hotels_property | Same parameter names and response shape, sent as a JSON body. | |
No equivalent (one request per date) | SearchApi's parameter style and price fields, for a whole horizon. | |
engine=airbnb_property_availability_calendar | Field for field (property_id, start_month, start_year, months, airbnb_domain). Optionally adds Airbnb's quoted prices with price_nights. | |
engine=google_flights | Same filters under mostly the same names (SerpApi style); departure, arrival and departure_date instead of departure_id, arrival_id and outbound_date. See the table below. | |
SerpApi departure_token follow-up | Return or next multi-city leg for a chosen itinerary. | |
SerpApi booking_token follow-up | booking_options[] with sellers, prices, fare rules, bag fees and links. | |
engine=google_flights_location_search | Airports, cities (with their airports) and regions for a name. | |
engine=google_flights_calendar | Similar data, different parameter names and response. |
Switch your client
Airbnb: change the host and key
# Before: https://www.searchapi.io/api/v1/search?engine=airbnb&q=Toronto&api_key=...
curl "https://api.scrapercompany.com/api/v1/search?engine=airbnb&q=Toronto&check_in_date=2026-11-30&check_out_date=2026-12-02&adults=2" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY"Google Hotels property: same parameters, JSON body
# Before: GET https://www.searchapi.io/api/v1/search?engine=google_hotels_property&property_token=...&check_in_date=...
curl -X POST "https://api.scrapercompany.com/v1/serp/google_hotels_property" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"property_token": "ChUIoben2Mv6-CYaCi9tLzA3czVwbjQQAQ", "check_in_date": "2026-11-30", "check_out_date": "2026-12-01", "adults": 2, "currency": "USD", "gl": "us"}'Replace per-date loops with the calendar
curl -X POST "https://api.scrapercompany.com/v1/serp/google_hotels_calendar" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"property_token": "ChUIoben2Mv6-CYaCi9tLzA3czVwbjQQAQ", "days": 90, "currency": "USD", "gl": "us"}'Google Flights: rename a few fields
| SearchApi / SerpApi | ScraperCompany |
|---|---|
departure_id, arrival_id | departure / arrival (one IATA airport or city code), or departure_id / arrival_id for lists and /m/ city ids |
outbound_date, return_date | departure_date, return_date |
type, multi_city_json | Implied by return_date or multi_city |
travel_class | cabin_class (economy, premium_economy, business, first) |
bags | carry_on_bags, checked_bags |
exclude_basic, emissions, exclude_conns | exclude_basic_economy, less_emissions, exclude_connecting_airports |
stops | stops as the maximum number of stops (0 nonstop, 1 or 2); omit for any |
include_airlines, exclude_airlines, max_price, max_duration, outbound_times, return_times, layover_duration, sort_by | Same names (sort_by as words: top_flights, price, departure_time, arrival_time, duration, emissions) |
best_flights / other_flights | itineraries[] with group: best or other |
flights[], layovers[], total_duration | legs[].segments[], legs[].layovers[], total_duration_minutes |
booking_options[].together | booking_options[] |
departure_token and booking_token keep SerpApi's meaning: an itinerary with more legs to choose carries a departure_token for POST/v1/serp/google_flights_return, and a complete one carries a booking_token for POST/v1/serp/google_flights_booking. The full flow is in Price a round trip.
Differences to know
- Method. Only the Airbnb engine has a GET query-string alias. The Google Hotels and Google Flights endpoints are POST with a JSON body.
- Auth. Use the
x-api-keyheader;api_keyas a query parameter also works on GET. Unknown body fields are rejected with422, so dropapi_keyfrom JSON bodies, andenginetoo except on/v1/serp/google_hotelsand/v1/serp/airbnb_property_availability_calendar, which accept it as SearchApi sends it. - Tokens.
property_tokenis required. If you don't have one, resolve it with POST /v1/search. - Prices.
extracted_pricevalues are exact floats rather than rounded integers, and are filled in where SearchApi can omit them. - Flights. A few parameter and response names differ from SearchApi's and SerpApi's Google Flights engines (table above). Times are airport-local without a UTC offset, as in theirs.
- Destination search.
google_hotelsresults keep exact float prices and addprices[]where Google attached seller rows. Pages overlap by a few records, so de-duplicate byproperty_token. - Billing. You pay credits per successful call (3 per destination-search page, 3 for property, 5 for a calendar, 8 for Airbnb search or availability calendar, 3 per flight search, return leg or booking options), not per search, and failures are free. See Credits & billing.