Find Heathrow parking options and prices

Site heathrow.comTask find-heathrow-parking-optionsVersion v1Updated Jul 24, 2026Category travel

Build Heathrow's direct parking-results URL for a date, time, and terminal, then extract each available parking option and price. This skill was captured from a live agent session on heathrow.com and publishes here verbatim, exactly as an agent receives it.

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.

Purpose

Retrieve available Heathrow parking products and their prices for a specified arrival date/time, exit date/time, and terminal.

When to Use

Use for requests asking which Heathrow parking options are available and how much each costs. Inputs should include arrival and exit dates, times, and terminal; encode dates as the site's two-digit day, three-letter uppercase month, and two-digit year values.

Workflow

  1. Construct the direct results URL, avoiding the parking landing page and form interaction: https://www.heathrow.com/booking/booking-search?cgid=parking&searchType=parking&dd={arrival-dd}&dm={arrival-mon}&dy={arrival-yy}&rd={exit-dd}&rm={exit-mon}&ry={exit-yy}&ap=LHR{terminal}&t={arrival-hhmm}&rt={exit-hhmm}&pa=1&pc=0&pi=0&pax=1
  2. Navigate to that URL and wait for the results page to load. If a consent overlay prevents interaction, accept essential cookies, then continue.
  3. On the loaded results page, run this single evaluate() extractor:
    (() => {
      const priceRe = /£\s?[\d,]+(?:\.\d{1,2})?/g;
      const seen = new Set(),
        out = [];
      const els = [
        ...document.querySelectorAll('article,[role="article"],section,div'),
      ];
      for (const el of els) {
        const text = (el.innerText || "").replace(/\s+/g, " ").trim();
        if (!text || text.length > 1800 || !/£\s?[\d,]+/.test(text)) continue;
        const prices = [...text.matchAll(priceRe)].map((m) => m[0]);
        if (!prices.length) continue;
        const heading = el.querySelector('h1,h2,h3,h4,[role="heading"]');
        const name = (heading?.innerText || text.split(/£\s?[\d,]+/)[0])
          .replace(/\s+/g, " ")
          .trim();
        if (!name || name.length > 180) continue;
        const key = `${name}|${prices.join("|")}`;
        if (seen.has(key)) continue;
        const parent = el.parentElement;
        const parentText = (parent?.innerText || "").replace(/\s+/g, " ").trim();
        if (
          parent &&
          parentText.length <= 1800 &&
          /£\s?[\d,]+/.test(parentText) &&
          parent.querySelector('h1,h2,h3,h4,[role="heading"]')
        )
          continue;
        seen.add(key);
        out.push({ name, prices, text });
      }
      return out;
    })();
  4. Return the extracted name and prices for every parking option, preserving any accompanying text when useful for product details.

Site-Specific Gotchas

  • Heathrow exposes quote results through /booking/booking-search, not a plainly discoverable static parking-results path.
  • The terminal is encoded as ap=LHR{terminal}; for example, Terminal 5 uses ap=LHR5.
  • Date parameters use separate fields: dd/dm/dy for arrival and rd/rm/ry for exit. Times use 24-hour HHMM values in t and rt.
  • The results page may show a cookie-consent overlay. It does not change the URL parameters; accept only essential cookies if the overlay blocks the page.
  • Product markup may contain nested cards and repeated prices. The extractor deduplicates heading-plus-price combinations and avoids returning nested duplicates; verify the returned text if Heathrow changes its card structure.

Expected Output

An array of objects, one per available parking product, such as: [{"name":"<parking option>","prices":["£<amount>"],"text":"<option details>"}]

Call it

GET https://production-sfo.browserless.io/skills?token=TOKEN-HERE&domain=heathrow.com&task=find-heathrow-parking-options