Vrbo quote
A Vrbo stay quote: nightly and total price, fees and payment model.
/v1/ota/vrboThe total is Vrbo's own figure and fees_included repeats its "All fees included" label; cleaning and service fees and taxes are not itemised by Vrbo for this request, so they are not invented here. A stay Vrbo will not sell as asked (minimum stay, dates taken) returns available: false with Vrbo's reason, billed like any other answer.
Request
https://api.scrapercompany.com/v1/ota/vrboAuthenticate with your API key in the x-api-key header (see Authentication).
Body
JSON object. Unknown fields are rejected with 422.
- property_idstring | nullpattern ^\d+$
Numeric id returned by
POST /v1/ota/vrbo/search(property_idon each listing). Not the id in the Vrbo URL. - listing_idstring | nullpattern ^\d+(?:ha)?$
The listing id in a Vrbo URL, e.g.
20218736haforvrbo.com/20218736ha. Resolved toproperty_idwith one page load. - 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).
- 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" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"property_id": "122942416",
"check_in": "2026-11-30",
"nights": 3,
"adults": 2
}'Response
200 — A Vrbo stay quote. `fees_included` repeats Vrbo's own label; fees and taxes are not itemised. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).
{
"search_parameters": {
"engine": "vrbo_property",
"property_id": "122942416",
"check_in_date": "2029-04-10",
"check_out_date": "2029-04-13",
"adults": 2,
"market": "US",
"currency": "USD"
},
"property": {
"property_id": "122942416",
"total": 1386,
"price_per_night": 462,
"basis": "cheapest_offer",
"total_text": "$1,386 for 3 nights",
"nightly_text": "$462",
"fees_included": true,
"currency": "USD",
"currency_verified": true,
"available": true,
"payment_model": "PAY_LATER_WITH_DEPOSIT",
"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_offer",
"collector": "scrapingme.ota.vrbo",
"source_property_id": "122942416",
"requested_market": "US",
"requested_currency": "USD",
"returned_currency": "USD",
"egress_mode": "direct",
"price_basis": "stay_headline",
"derivation": "upstream"
}
},
"offers": [
{
"plan_id": "0000f7528ddb0787463c9be9506a3b5eceb0",
"room_type_id": "122942416",
"total": 1386,
"nightly": 462,
"currency": "USD",
"total_text": "$1,386 for 3 nights",
"nightly_text": "$462",
"fees_included": true,
"payment_model": "PAY_LATER_WITH_DEPOSIT",
"hotel_collect": true,
"member_only": false,
"inventory_type": "VRBO",
"business_model": "HOTEL_COLLECT",
"messages": [
"Reserve now, pay deposit",
"Your dates are available"
],
"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_rate_plan",
"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",
"upstream_rate_id": "0000f7528ddb0787463c9be9506a3b5eceb0"
}
}
],
"meta": {
"source": "vrbo",
"nights": 3,
"wire_bytes": 8065,
"listing_resolved": false,
"elapsed_s": 0.44,
"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_property - search_parameters.property_idstringrequired
The property id quoted (resolved from
listing_idwhen only that was sent). - search_parameters.listing_idstring
Present only when
listing_idwas supplied. - 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).
- propertyobjectrequired
Show 15 child fieldsHide child fields
- property.property_idstringrequired
Numeric Vrbo property id; store it to skip listing resolution next time.
- property.listing_idstring | nullrequired
The
listing_idyou sent, echoed; null when you sent onlyproperty_id. When both are sent,property_idis used and the two are not cross-checked. - property.totalnumber | nullrequired
Headline stay total for all nights (Vrbo's own figure); see
basis. Null when nothing priced. - property.price_per_nightnumber | nullrequired
Headline nightly price.
- property.basisstring | nullrequired
Where the headline comes from:
sticky_bar(the page's own headline price, read by its labels) orcheapest_offer(the cheapest priced offer). Null when nothing priced.One of
sticky_barcheapest_offer - property.total_textstringrequired
Headline total as displayed; empty when not shown.
- property.nightly_textstringrequired
Headline nightly price as displayed; empty when not shown.
- property.taxes_and_fees_includedboolean | nullrequired
True when the headline total is labelled "with taxes and fees"; null when no such label was shown.
- property.fees_includedboolean | nullrequired
True when the headline total is labelled "All fees included"; null when no such label was shown.
- property.currencystringrequired
Currency the point-of-sale actually priced in.
- property.currency_verifiedbooleanrequired
Whether
currencyequals the market's currency. - property.availablebooleanrequired
False when Vrbo will not sell the stay as asked.
- property.unavailable_reasonstring | nullrequired
Vrbo's own message when the stay cannot be booked (minimum stay, dates taken). Null otherwise;
availablecan be false with a null reason when nothing priced. - property.payment_modelstring | nullrequired
payment_modelof the cheapest offer; null when nothing priced.One of
PAY_NOWPAY_LATERPAY_LATER_WITH_DEPOSIT - property.provenanceobjectrequired
Where, when and how one normalized price was observed.
Show 15 child fieldsHide child fields
- property.provenance.schema_versionintegerrequired
Provenance schema version (currently 1).
- property.provenance.observation_idstringrequired
Deterministic id of this price observation (
rateobs_...). - property.provenance.collection_idstringrequired
Id shared by every price from one upstream fetch (
ratecol_...). - property.provenance.observed_atstringrequired
UTC observation time, ISO-8601.
- property.provenance.sourcestringrequired
Upstream source, e.g.
google_hotels_calendar. - property.provenance.source_kindstringrequired
Kind of source, e.g.
calendar,offer,ota_calendar,official. - property.provenance.collectorstringrequired
Identifier of the collector that produced the price.
- property.provenance.source_property_idstringrequired
Property identifier at the source.
- property.provenance.requested_marketstring | nullrequired
- property.provenance.requested_currencystring | nullrequired
- property.provenance.returned_currencystring | nullrequired
- property.provenance.egress_modestringrequired
How the request reached the source, e.g.
direct. - property.provenance.price_basisstringrequired
What the price represents, e.g.
room_base_before_taxes_and_fees. - property.provenance.derivationstringrequired
How the figure was derived, e.g.
normalized_upstream. - property.provenance.upstream_rate_idstring | nullrequired
Source-native rate/room id when available.
- offersarray of objectrequired
Every rate plan for the rental.
Show 23 child fieldsHide child fields
- offers[].plan_idstringrequired
Vrbo rate-plan id.
- offers[].room_type_idstringrequired
- offers[].totalnumber | nullrequired
Stay total for all nights, Vrbo's own figure;
fees_includedrepeats its "All fees included" label. Cleaning and service fees and taxes are not itemised. - offers[].nightlynumber | nullrequired
Vrbo's nightly price.
- offers[].taxes_and_feesnumber | nullrequired
Derived, not read from the source:
total - nightly × nights, set only whentaxes_and_fees_includedis true. Accurate to withinnightscurrency units becausenightlyis rounded; taxes and fees are not itemised. Seetaxes_and_fees_provenance. - offers[].currencystringrequired
ISO 4217 code read back from the reply.
- offers[].total_textstringrequired
Total as displayed, e.g.
$635 total. - offers[].nightly_textstringrequired
Nightly price as displayed, e.g.
$509 nightly. - offers[].taxes_and_fees_includedboolean | nullrequired
True when the source labels the total "Total with taxes and fees". Null means no such label was shown, not that taxes are excluded.
- offers[].fees_includedboolean | nullrequired
True when the source labels the total "All fees included". Null means no such label was shown.
- offers[].payment_modelstringrequired
PAY_NOW,PAY_LATERorPAY_LATER_WITH_DEPOSIT; empty when not stated. A plan sold both ways is two offers.One of
PAY_NOWPAY_LATERPAY_LATER_WITH_DEPOSIT - offers[].hotel_collectboolean | nullrequired
True when the property collects payment; null when not stated.
- offers[].member_onlybooleanrequired
True when booking the plan requires signing in as a member.
- offers[].refundableboolean | nullrequired
Always null on Vrbo: refundability is not read, rather than guessed.
- offers[].cancellation_textstringrequired
Always empty on Vrbo.
- offers[].extrasstring | nullrequired
Always null on Vrbo.
- offers[].extras_textstringrequired
Always empty on Vrbo.
- offers[].strikeout_textstringrequired
Struck-through comparison price as displayed; empty when none.
- offers[].inventory_typestringrequired
Source inventory type, e.g.
MERCHANT,TRIPCOM,DIRECT_AGENCY,VRBO; empty when not stated. - offers[].business_modelstringrequired
EXPEDIA_COLLECTorHOTEL_COLLECT; empty when not stated. - offers[].messagesarray of stringrequired
Vrbo's highlighted messages for the plan, e.g.
Reserve now, pay deposit,Your dates are available. - offers[].provenanceobjectrequired
Where, when and how one normalized price was observed.
Show 15 child fieldsHide child fields
- offers[].provenance.schema_versionintegerrequired
Provenance schema version (currently 1).
- offers[].provenance.observation_idstringrequired
Deterministic id of this price observation (
rateobs_...). - offers[].provenance.collection_idstringrequired
Id shared by every price from one upstream fetch (
ratecol_...). - offers[].provenance.observed_atstringrequired
UTC observation time, ISO-8601.
- offers[].provenance.sourcestringrequired
Upstream source, e.g.
google_hotels_calendar. - offers[].provenance.source_kindstringrequired
Kind of source, e.g.
calendar,offer,ota_calendar,official. - offers[].provenance.collectorstringrequired
Identifier of the collector that produced the price.
- offers[].provenance.source_property_idstringrequired
Property identifier at the source.
- offers[].provenance.requested_marketstring | nullrequired
- offers[].provenance.requested_currencystring | nullrequired
- offers[].provenance.returned_currencystring | nullrequired
- offers[].provenance.egress_modestringrequired
How the request reached the source, e.g.
direct. - offers[].provenance.price_basisstringrequired
What the price represents, e.g.
room_base_before_taxes_and_fees. - offers[].provenance.derivationstringrequired
How the figure was derived, e.g.
normalized_upstream. - offers[].provenance.upstream_rate_idstring | nullrequired
Source-native rate/room id when available.
- offers[].taxes_and_fees_provenanceobject | nullrequired
Provenance of
taxes_and_fees(price_basis: taxes_and_fees_combined,derivation: total_minus_nightly_times_nights); null whentaxes_and_feesis null.Show 15 child fieldsHide child fields
- offers[].taxes_and_fees_provenance.schema_versionintegerrequired
Provenance schema version (currently 1).
- offers[].taxes_and_fees_provenance.observation_idstringrequired
Deterministic id of this price observation (
rateobs_...). - offers[].taxes_and_fees_provenance.collection_idstringrequired
Id shared by every price from one upstream fetch (
ratecol_...). - offers[].taxes_and_fees_provenance.observed_atstringrequired
UTC observation time, ISO-8601.
- offers[].taxes_and_fees_provenance.sourcestringrequired
Upstream source, e.g.
google_hotels_calendar. - offers[].taxes_and_fees_provenance.source_kindstringrequired
Kind of source, e.g.
calendar,offer,ota_calendar,official. - offers[].taxes_and_fees_provenance.collectorstringrequired
Identifier of the collector that produced the price.
- offers[].taxes_and_fees_provenance.source_property_idstringrequired
Property identifier at the source.
- offers[].taxes_and_fees_provenance.requested_marketstring | nullrequired
- offers[].taxes_and_fees_provenance.requested_currencystring | nullrequired
- offers[].taxes_and_fees_provenance.returned_currencystring | nullrequired
- offers[].taxes_and_fees_provenance.egress_modestringrequired
How the request reached the source, e.g.
direct. - offers[].taxes_and_fees_provenance.price_basisstringrequired
What the price represents, e.g.
room_base_before_taxes_and_fees. - offers[].taxes_and_fees_provenance.derivationstringrequired
How the figure was derived, e.g.
normalized_upstream. - offers[].taxes_and_fees_provenance.upstream_rate_idstring | nullrequired
Source-native rate/room id when available.
- metaobjectrequired
Show 8 child fieldsHide child fields
- meta.sourcestringrequired
One of
vrbo - meta.collection_idstringrequired
- meta.observed_atstringrequired
- meta.nightsintegerrequired
- meta.wire_bytesintegerrequired
Bytes received from the source, including the listing page when
listing_idwas resolved. - meta.elapsed_snumberrequired
- meta.egress_modestringrequired
How the request was routed:
directorproxy.One of
directproxy - meta.listing_resolvedbooleanrequired
True when
listing_idwas resolved toproperty_idin this call.
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 |
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":[{"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.