Skip to content
Vrbo

Vrbo search

Search Vrbo by destination and dates.

POST/v1/ota/vrbo/search
1 credit

Returns 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

POSThttps://api.scrapercompany.com/v1/ota/vrbo/search

Authenticate 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 28

    Length of stay. Ignored when check_out is supplied.

  • adultsintegerdefault 2min 1, max 16

    Guests (adults).

  • limitintegerdefault 20min 1, max 50

    Maximum listings to return, in Vrbo's recommended order.

  • marketstringdefault US

    Vrbo point-of-sale. Only US (www.vrbo.com, USD) is verified.

    One ofUS

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).

200 response
{
  "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 fields
    • search_parameters.enginestringrequired

      One ofvrbo_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 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 limit listings, in Vrbo's recommended order; sponsored placements are skipped.

    Show 14 child fields
    • listings[].property_idstringrequired

      Numeric Vrbo property id; pass as property_id to POST /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 when listing_id is 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 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 fields
    • meta.sourcestringrequired

      One ofvrbo

    • 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: direct or proxy.

      One ofdirectproxy

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
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
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

  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

1 credit per successful call. Failed, blocked and empty results are free. Credit metering is in beta and does not block requests yet.