Find Vrbo Vacation Rentals by Group Size, Bedrooms, Dates, and Budget

Site vrbo.comTask find-vacation-rentals-by-group-size-and-datesVersion v2Updated Sep 22, 2026Category travel

Search Vrbo lodging with direct URL parameters for destination, dates, party size, bedroom requirements, and price sorting, then extract rendered listing cards for budget and sleeping-arrangement checks. This skill was captured from a live agent session on vrbo.com and is published here as a reusable recipe for agents.

NoteSelectors and URL schemes drift as sites change. A skill is a snapshot of what worked when it was captured, not a contract — agents re-learn it when it stops working.

Find Vrbo rentals matching a destination, stay dates, guest count, minimum bedrooms, and optional budget. Direct search URLs support destination, dates, guests, bedroom filtering, and price sorting. Verify the sleeping arrangement and final price from rendered cards or the property page.

Use Cases

Use for Vrbo searches where the caller supplies a destination or set of destinations, check-in/check-out dates, guest count or guest-count range, minimum bedrooms, and optionally a target price ceiling or range. For a guest-count range, run the direct search once for each requested adults value, or use the largest value when the caller accepts properties accommodating the whole range.

Automation Flow

  1. Build and navigate directly to one or more URLs, URL-encoding the destination: https://www.vrbo.com/search?destination={destination}&startDate={YYYY-MM-DD}&endDate={YYYY-MM-DD}&adults={adults}&minBedrooms={minBedrooms}&sort=PRICE_LOW_TO_HIGH

    This form searches an adult-only party: adults={adults} is the whole guest count. Vrbo counts children and infants separately and prices them differently, so sending a mixed-age party as adults returns properties that may not fit or price the real group. For a party with children or infants, set the ages in Vrbo's own guest selector on the results page and reuse the URL Vrbo then generates; do not guess child or infant parameter names. Say which form was used when reporting results.

  2. When available, Vrbo also accepts the observed alternative form regionId={region-id}&destination={destination}&startDate={YYYY-MM-DD}&endDate={YYYY-MM-DD}&adults={adults}&bedroom_count_gt={minimum-bedrooms}&sort=PRICE_LOW_TO_HIGH. regionId=180676 was observed for Palm Springs; use it only when obtained from Vrbo for the requested destination, never guess a region ID. bedroom_count_gt may express a strict greater-than filter, so compare returned bedroom text with the requested threshold.

  3. For several nearby destinations, run one direct search URL per destination rather than visiting the homepage. Express each destination in the form Vrbo accepts, such as {city}, {region}, {country}; do not assume one city search covers a surrounding region.

  4. Vrbo may present a CAPTCHA or another bot challenge before rendering results. If a challenge appears, solve it, reload the same URL, and wait for results. Do not replace the direct search with homepage navigation.

  5. In one page evaluation after rendering, wait for client-side content, scroll to trigger lazy-loaded cards, and run this extractor. Repeat on each requested destination or guest-count URL and merge results by listing URL:

(async()=>{const wait=ms=>new Promise(r=>setTimeout(r,ms));await wait(7000);for(const y of [1800,3600,6000,9000]){window.scrollTo(0,y);await wait(1200)}const sels=['[data-stid*="lodging-card"]','[data-stid="property-listing-results"] > div','div[data-stid^="section-results"] li'];const nodes=[...new Set(sels.flatMap(s=>[...document.querySelectorAll(s)]))];const seen=new Set();const listings=nodes.map(card=>{const text=(card.innerText||'').replace(/\s+/g,' ').trim();if(!text)return null;const links=[...card.querySelectorAll('a[href]')].map(a=>{try{return new URL(a.getAttribute('href'),location.origin)}catch{return null}}).filter(u=>u&&/^https?:$/.test(u.protocol)&&/(^|\.)vrbo\.com$/i.test(u.hostname)&&/^\/(?:vacation-rental|pdp|p|units|\d+)(?:\/|$)/i.test(u.pathname)).map(u=>u.href);const url=links[0]||null;const name=(card.querySelector('h2,h3,[data-stid*="title"],[data-stid*="name"]')?.textContent||'').replace(/\s+/g,' ').trim()||text.split(' | ')[0].slice(0,160);const bedrooms=(text.match(/(\d+)\s+bedrooms?/i)||[])[1];const sleeps=(text.match(/sleeps\s+(\d+)/i)||[])[1];const beds=(text.match(/(\d+)\s+beds?/i)||[])[1];const prices=[...new Set(text.match(/(?:US\$|\$)\s?\d[\d,]*(?:\.\d{2})?/g)||[])];const stayPrice=(text.match(/(?:US\$|\$)\s?[\d,]+(?:\.\d{2})?\s+for\s+\d+\s+nights?/i)||[])[0]||null;const key=url||name+'|'+text.slice(0,180);if(seen.has(key))return null;seen.add(key);return{name,url,bedrooms:bedrooms?+bedrooms:null,sleeps:sleeps?+sleeps:null,beds:beds?+beds:null,prices,stayPrice,allFeesIncluded:/all fees included/i.test(text),text}}).filter(Boolean);return JSON.stringify({url:location.href,listings,count:listings.length,note:'Verify whether prices are nightly, subtotal, or complete-stay totals.'})})()
  1. Filter the returned records for the requested destination, dates, capacity, and bedroom threshold. Use the property page URL from the card for final verification when necessary. Distinguish nightly rates from trip totals and confirm taxes, fees, and availability.

Possible Friction Points

  • The useful search state is directly addressable through /search query parameters: destination, startDate, endDate, adults, minBedrooms, and sort=PRICE_LOW_TO_HIGH.
  • An observed alternative uses regionId, destination, and bedroom_count_gt; region IDs are opaque and must come from Vrbo rather than being fabricated.
  • Search results can be blocked by a CAPTCHA or delayed by client-side rendering. Solve the challenge if present, reload the same URL, wait, and scroll to trigger lazy loading.
  • If the caller wants one bedroom per guest, minBedrooms is the practical URL filter, but the listing text must still be read: bedrooms, beds, and sleeping arrangements differ, and enough beds is not the same as enough bedrooms. bedroom_count_gt may be a strict greater-than filter.
  • For a guest-count range, adults is a single query value; search each value when exact results for every party size are needed.
  • No dependable maximum-price query parameter was observed. Dollar amounts may be nightly rates, stay totals, or fee subtotals; verify the complete trip total on the property page.
  • A listing link is accepted only after parsing the URL and checking its hostname and pathname separately. Testing the whole URL string lets an external link through whenever its query carries a Vrbo path, and the card then reports the external link as the listing.
  • Card markup uses data-stid selectors observed on Vrbo and may change. The extractor deduplicates nested result cards and captures both bedroom/capacity signals and visible pricing.

Call it

GET https://production-sfo.browserless.io/skills?token=TOKEN-HERE&domain=vrbo.com&task=find-vacation-rentals-by-group-size-and-dates