Vrbo search
Search Vrbo by destination and dates.
/v1/ota/vrbo/searchReturns Vrbo's recommended listings with the numeric property_id that POST /v1/ota/vrbo quotes, the listing id and URL, and Vrbo's own nightly and stay prices. One request returns up to 50 listings.
Request
https://api.scrapercompany.com/v1/ota/vrbo/searchAuthenticate with your API key in the x-api-key header (see Authentication).
Body
JSON object. Unknown fields are rejected with 422.
- destinationstringrequiredmin length 2
Place as a guest would type it, e.g.
South Lake Tahoe, California. Vrbo resolves it to a region. - check_instring (date)required
First night of the stay,
YYYY-MM-DD. - check_outstring (date) | null
Departure date. An alternative to
nights— if both are given, this wins. - nightsintegerdefault
1min 1, max 28Length of stay. Ignored when
check_outis supplied. - adultsintegerdefault
2min 1, max 16Guests (adults).
- limitintegerdefault
20min 1, max 50Maximum listings to return, in Vrbo's recommended order.
- marketstringdefault
USVrbo point-of-sale. Only
US(www.vrbo.com, USD) is verified.One of
US
Example request
curl -X POST "https://api.scrapercompany.com/v1/ota/vrbo/search" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"destination": "South Lake Tahoe, California",
"check_in": "2026-11-30",
"nights": 3,
"adults": 2,
"limit": 10
}'Response
200 — Vrbo listings with the property id that the quote endpoint takes. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).
{
"search_parameters": {
"engine": "vrbo_search",
"destination": "South Lake Tahoe, California",
"check_in_date": "2029-04-10",
"check_out_date": "2029-04-13",
"adults": 2,
"market": "US",
"currency": "USD",
"limit": 10
},
"summary": {
"matched_properties": 359,
"results_heading": "Search results showing 359 properties in South Lake Tahoe, California"
},
"listings": [
{
"property_id": "122942416",
"listing_id": "20218736ha",
"name": "Tahoe Keys Sunset Reflections",
"summary": "House · 4 bedrooms · 4 Queen Beds",
"url": "https://www.vrbo.com/20218736ha",
"nightly": 462,
"total": 1386,
"currency": "USD",
"nightly_text": "$462",
"total_text": "$1,386 for 3 nights",
"fees_included": true,
"rank": 0,
"provenance": {
"schema_version": 1,
"observation_id": "rateobs_0123456789abcdef0123456789abcdef",
"collection_id": "ratecol_0123456789abcdef0123456789abcdef",
"observed_at": "2026-08-07T01:23:45.678Z",
"source": "vrbo",
"source_kind": "ota_search_listing",
"collector": "scrapingme.ota.vrbo",
"source_property_id": "122942416",
"requested_market": "US",
"requested_currency": "USD",
"returned_currency": "USD",
"egress_mode": "direct",
"price_basis": "stay_total_fees_included",
"derivation": "upstream"
}
}
],
"meta": {
"source": "vrbo",
"listings": 1,
"wire_bytes": 107695,
"elapsed_s": 0.58,
"egress_mode": "direct",
"collection_id": "ratecol_0123456789abcdef0123456789abcdef",
"observed_at": "2026-08-07T01:23:45.678Z"
}
}Response fields
Fields marked required are always present; others appear when they apply.
- search_parametersobjectrequired
Show 8 child fieldsHide child fields
- search_parameters.enginestringrequired
One of
vrbo_search - search_parameters.destinationstringrequired
- search_parameters.check_in_datestring (date)required
- search_parameters.check_out_datestring (date)required
- search_parameters.adultsintegerrequired
- search_parameters.marketstringrequired
US. - search_parameters.currencystringrequired
The market's currency (
USD). - search_parameters.limitintegerrequired
- summaryobjectrequired
Show 2 child fieldsHide child fields
- summary.matched_propertiesinteger | nullrequired
Total listings Vrbo matched for the destination and dates.
- summary.results_headingstring | nullrequired
Vrbo's heading, e.g.
Search results showing 359 properties in ....
- listingsarray of objectrequired
At most
limitlistings, in Vrbo's recommended order; sponsored placements are skipped.Show 14 child fieldsHide child fields
- listings[].property_idstringrequired
Numeric Vrbo property id; pass as
property_idtoPOST /v1/ota/vrbo. - listings[].listing_idstringrequired
Id in the listing's Vrbo URL, e.g.
20218736ha; empty when the card carried no listing link. - listings[].namestringrequired
- listings[].summarystringrequired
Card details joined with
·, e.g.House · 4 bedrooms · 4 Queen Beds. - listings[].urlstringrequired
https://www.vrbo.com/<listing_id>; empty whenlisting_idis empty. - listings[].nightlynumber | nullrequired
Vrbo's nightly price, to the cent. Null when the card's price carried no recognised label.
- listings[].totalnumber | nullrequired
Stay total for all nights; null when the card did not state one.
- listings[].currencystringrequired
- listings[].nightly_textstringrequired
As displayed, e.g.
$462. - listings[].total_textstringrequired
As displayed, e.g.
$1,386 for 3 nights. - listings[].fees_includedboolean | nullrequired
True when Vrbo labels the price "All fees included"; null when no such label was shown.
- listings[].taxes_and_fees_includedboolean | nullrequired
True when labelled as including taxes and fees; null when no such label was shown.
- listings[].rankintegerrequired
0-based position in Vrbo's recommended order.
- listings[].provenanceobjectrequired
Where, when and how one normalized price was observed.
Show 15 child fieldsHide child fields
- listings[].provenance.schema_versionintegerrequired
Provenance schema version (currently 1).
- listings[].provenance.observation_idstringrequired
Deterministic id of this price observation (
rateobs_...). - listings[].provenance.collection_idstringrequired
Id shared by every price from one upstream fetch (
ratecol_...). - listings[].provenance.observed_atstringrequired
UTC observation time, ISO-8601.
- listings[].provenance.sourcestringrequired
Upstream source, e.g.
google_hotels_calendar. - listings[].provenance.source_kindstringrequired
Kind of source, e.g.
calendar,offer,ota_calendar,official. - listings[].provenance.collectorstringrequired
Identifier of the collector that produced the price.
- listings[].provenance.source_property_idstringrequired
Property identifier at the source.
- listings[].provenance.requested_marketstring | nullrequired
- listings[].provenance.requested_currencystring | nullrequired
- listings[].provenance.returned_currencystring | nullrequired
- listings[].provenance.egress_modestringrequired
How the request reached the source, e.g.
direct. - listings[].provenance.price_basisstringrequired
What the price represents, e.g.
room_base_before_taxes_and_fees. - listings[].provenance.derivationstringrequired
How the figure was derived, e.g.
normalized_upstream. - listings[].provenance.upstream_rate_idstring | nullrequired
Source-native rate/room id when available.
- metaobjectrequired
Show 7 child fieldsHide child fields
- meta.sourcestringrequired
One of
vrbo - meta.listingsintegerrequired
- meta.collection_idstringrequired
- meta.observed_atstringrequired
- meta.wire_bytesintegerrequired
Bytes received from the source.
- meta.elapsed_snumberrequired
- meta.egress_modestringrequired
How the request was routed:
directorproxy.One of
directproxy
Errors
Errors return a JSON body with a detail field. Failed requests are not charged. See Errors for the full list and retry advice.
| Status | Meaning | Retry? |
|---|---|---|
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 |
422Unprocessable Content | Request validation failed. {"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 |
503Service Unavailable | Temporarily unavailable: a dependency of this endpoint is down, or the upstream source changed its contract. Retry later. {"detail":"database unavailable: OperationalError"} | Yes, with backoff |
Try it
- Export your key:
export SCRAPERCOMPANY_API_KEY=sk_...(no key yet? request access). - Copy the cURL example above and run it in a terminal.
- Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.