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
- 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 - Navigate to that URL and wait for the results page to load. If a consent overlay prevents interaction, accept essential cookies, then continue.
- 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; })(); - Return the extracted
nameandpricesfor every parking option, preserving any accompanyingtextwhen 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 usesap=LHR5. - Date parameters use separate fields:
dd/dm/dyfor arrival andrd/rm/ryfor exit. Times use 24-hourHHMMvalues intandrt. - 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>"}]