Skip to main content

JLR US — Discovery Explore Summary

  • OEM / market: jlr / us (Land Rover; Jaguar shares the same locator + SCS host)
  • Explored / verified: 2026-06-12 (live probes via curl_cffi chrome impersonation + chrome-devtools network capture)

Entities and endpoints

EntityEndpointMethodAuth / protocolPaginationEnumerator
dealersretailerlocator.jaguarlandrover.com/dealersGETPublic; Origin/Referer = Land Rover USnone (single response)multi-zip sweep deduped by ciCode (181 unique US dealers)
modelsrules.config.landrover.com/rc/lr/en_us/{nameplate}_{my}/{ver}/{bodystyle}/.jsonp?view=summaryGETPublic JSONP (rcjson(...))nonebase nameplate URL 302->version; version no-view request lists all bodystyles
featuressame SCS response as modelsGETPublic JSONPnonesame as models
inventoryproduction-api-oregon.search-api.netdirector.auto/api/vehicle-searchPOSTStatic authorization header + uuid param; no WAFcurrentPage/pageSize (up to 1000), getCount for totalsingle national endpoint; condition="new" or condition="used"; identifiers.dealerId = ciCode

Key findings

  • National inventory API discovered. inventory.landroverusa.com is backed by the NetDirector GraphQL API (production-api-oregon.search-api.netdirector.auto). Single paginated endpoint returns all US Land Rover new + used inventory (~33k vehicles) with dealer ciCode directly in the response. Replaces the per-dealer Cars Commerce scraping approach.
  • No manufacturer filter. ~40% of Land Rover vehicles have null in the manufacturer field — filtering by manufacturer: "Land Rover" drops them silently. Use condition only.
  • Equipment/features included. The equipment[] field returns all vehicle options with category, fitted, and label in both list and single-vehicle queries.
  • SCS model enumerator is self-describing. No hardcoded version segments needed — the base nameplate URL 302-redirects to the current version, and the version-level no-view request enumerates all body styles. All 7 nameplates (l663, l460, l461, l550, l551, l462, l560) resolve live.

Candidate pagination params

  • inventory: currentPage (1-based), pageSize (up to 1000). Use getCount query to determine page count.

Fan-out enumerators

  • dealer: retailer-locator multi-zip sweep (20 metros, radius 500mi), dedupe by ciCode. Also available directly from identifiers.dealerId in inventory response.
  • model/nameplate: known nameplate set -> base URL 302 -> version -> no-view bodystyle list -> per-bodystyle summary.

Fixtures (all real live captures)

  • projects/ai_jlr/tests/data/jlr_retailerlocator_sample.json — dealers (R0627 Land Rover Manhattan + neighbors)
  • projects/ai_jlr/tests/data/jlr_retailerlocator_live_sample.json — dealers (national sweep, 3 real)
  • projects/ai_jlr/tests/data/jlr_scs_sample.json — models + features (LIVE l663_k26, Generated 2026-05-26)
  • projects/ai_jlr/tests/data/jlr_netdirector_sample.json — inventory (3 new vehicles, real VINs, from NetDirector national API)

Cross-source identity keys

  • inventory->dealers: identifiers.dealerId = ciCode directly in the response.
  • inventory->models: no shared code — NetDirector modelCode (HQ550) != SCS 5000Code/derivative. Fuzzy (model_name, trim, model_year) only. Genuine limitation -> OVERRIDE.
  • features->models: shared SCS response, FK = programme_code (L663).