Kayak Car Rental Scraper avatar

Kayak Car Rental Scraper

Pricing

from $0.89 / 1,000 rental car offers

Go to Apify Store
Kayak Car Rental Scraper

Kayak Car Rental Scraper

Scrape car rental offers from Kayak: provider, agency, vehicle type, day/total price, mileage and fuel policy, cancellation terms, and booking links for any Kayak car search URL.

Pricing

from $0.89 / 1,000 rental car offers

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Kayak Car Rental Scraper

Scrape car rental offers from Kayak: provider, agency, vehicle type, day and total price, mileage and fuel policy, cancellation terms, and direct booking links — from any Kayak car search URL.

Paste any Kayak car search URL — expired dates and stale query parameters are healed automatically — and get every supplier's price for every vehicle, ready for rate comparison or monitoring.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Apify Actor: parsebird/kayak-car-rental-scraper. Scrapes car rental offers from Kayak.com. Call via ApifyClient: client.actor("parsebird/kayak-car-rental-scraper").call(run_input={"startUrl": "https://www.kayak.com/cars/Los-Angeles,CA/2026-09-10/2026-09-17?sort=rank_a", "results_wanted": 20}). Expired dates and stale query params in startUrl are healed automatically. Returns per offer: source_type, search_id, result_id, provider_name, provider_code, agency_code, agency_name, car_type, car_type_groups, day_price, total_price, price, currency_code, known_fees, payment_type, mileage_policy_type, mileage_total_limit, fuel_policy, free_cancellation_policy, pickup_location, pickup_date, return_date, pickup_location_details, booking_url, site_url, source_url. Full API spec: https://apify.com/parsebird/kayak-car-rental-scraper/api. Get your token: https://console.apify.com/settings/integrations.

What does Kayak Car Rental Scraper do?

This actor turns a Kayak car rental search into structured, comparison-ready data. Kayak aggregates offers from dozens of suppliers (Hertz, Avis, Enterprise, Booking.com, Priceline, and more) for the same vehicle — this actor captures every one of them, not just the cheapest headline price.

  • 🔗 URL-in, data-out — paste any kayak.com/cars/... search URL; no separate query builder needed
  • 🩹 Auto-healing — expired pickup/return dates are rolled forward (trip length preserved) and stale query parameters are stripped automatically
  • 💲 Every offer, every provider — one row per supplier/price combination for each vehicle, so you can compare Hertz-via-Kayak against Hertz-via-Priceline side by side
  • 📋 Full policy detail — mileage limits, fuel policy, cancellation terms, and known fees for each offer
  • 🔗 Direct booking linksbooking_url goes straight to Kayak's booking flow for that specific offer

Input parameters

ParameterTypeRequiredDefaultDescription
startUrlstringYesFull Kayak car rental results URL. Expired dates and noisy query params are auto-healed
results_wantedintegerNo20Maximum number of car rental offers to save
proxyConfigurationobjectNo{ "useApifyProxy": false }Optional proxy settings for improved reliability

Kayak's car search doesn't require a proxy for normal use, so it's off by default — turn it on only if you're running high volume and want extra reliability.

How to scrape Kayak car rental data

  1. Open the Kayak Car Rental Scraper page and click Try for free.
  2. Search for a location and dates on kayak.com/cars, then copy the resulting URL into Start URL.
  3. Set Results Wanted to control how many offers to save.
  4. Click Start and wait for the run to finish — Kayak's search streams in results progressively, so the actor waits for the result set to settle.
  5. Download results as JSON, CSV, or Excel from the Dataset tab, or pull them via the Apify API.

Output example

{
"source_type": "result_provider",
"search_id": "exampleSearchId",
"result_id": "573a35fe3f4cea35e98380f42a5a9d32",
"provider_name": "WiseCars",
"provider_code": "IWISECARSOPAQUE",
"agency_code": "IHERTZPV",
"agency_name": "Hertz",
"car_type": "Jeep Wrangler Unlimited (Open air all terrain)",
"car_type_groups": ["SUV"],
"day_price": { "price": 13, "currency": "USD", "localizedPrice": "$13" },
"total_price": { "price": 184, "currency": "USD", "localizedPrice": "$184" },
"currency_code": "USD",
"payment_type": "PREPAY",
"mileage_policy_type": "limited",
"mileage_total_limit": "1,553 total mi included",
"pickup_location": "Los Angeles CA",
"pickup_date": "2026-07-15",
"return_date": "2026-07-22",
"booking_url": "https://www.kayak.com/book/car/example",
"source_url": "https://www.kayak.com/cars/Los-Angeles,CA/2026-07-15/2026-07-22?sort=rank_a"
}

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/kayak-car-rental-scraper").call(run_input={
"startUrl": "https://www.kayak.com/cars/Los-Angeles,CA/2026-09-10/2026-09-17?sort=rank_a",
"results_wanted": 50,
})
for offer in client.dataset(run["defaultDatasetId"]).iterate_items():
print(offer["car_type"], "-", offer["agency_name"], "-", offer["total_price"]["localizedPrice"])

JavaScript

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_API_TOKEN>" });
const run = await client.actor("parsebird/kayak-car-rental-scraper").call({
startUrl: "https://www.kayak.com/cars/Los-Angeles,CA/2026-09-10/2026-09-17?sort=rank_a",
results_wanted: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use cases

  • Rate comparison tools — Aggregate every supplier's price for the same vehicle to build a meta-search or comparison feature.
  • Price monitoring — Track day_price/total_price for a route over time to spot the best time to book.
  • Fleet/market research — Analyze which agencies and vehicle classes dominate a given pickup location.
  • Policy auditing — Compare mileage limits, fuel policies, and cancellation terms across suppliers for the same trip.

How it works

  1. URL healingstartUrl is parsed for its location, pickup date, and return date. Expired pickup dates are rolled forward (keeping the same trip length), and the location is re-resolved through Kayak's own location lookup, since raw city names can silently resolve to the wrong place. Noisy query parameters are dropped, keeping only sort.
  2. Search — The actor loads the healed search URL and captures Kayak's own results feed as it streams in car rental offers from dozens of suppliers.
  3. Wait for settle — Kayak returns results progressively; the actor waits until the search reports complete or enough offers have arrived to satisfy results_wanted.
  4. Flatten — Each vehicle listing's supplier offers are flattened into individual rows, with agency and provider codes resolved to display names.
  5. Output — Results are pushed to the Apify dataset, downloadable as JSON, CSV, or Excel, or accessible via the Apify API and integrations (Zapier, Make, Google Sheets, and more).

How much does it cost to scrape Kayak car rentals?

Kayak Car Rental Scraper uses Apify's pay-per-event model — you pay only for offers actually delivered.

EventFree planBronzeSilverGold
car-offer-scraped (per 1,000)$0.99$0.89$0.89$0.89

Every car rental offer pushed to the dataset counts as one event. A 200-offer run on the Free plan costs about $0.20. Apify's free trial covers your first runs at no cost.

Yes. Kayak Car Rental Scraper only collects car rental offer data that Kayak already displays publicly to any visitor. The actor does not bypass logins, place bookings, or collect personal user data. See Apify's blog post on the legality of web scraping for a general overview. You are responsible for using the collected data in compliance with applicable laws and Kayak's Terms of Service.

FAQ

Why does my Start URL end up with different dates or a different-looking location code? That's the auto-healing feature. Expired dates are rolled forward (same trip length), and human-readable locations (like "Los-Angeles,CA") are re-resolved through Kayak's own location lookup and replaced with the matching airport code — this avoids a real Kayak quirk where some city/state URL slugs silently resolve to the wrong city.

Does this need a proxy? No — Kayak's car search doesn't block normal traffic, so proxy is off by default. You can enable it for high-volume runs if you want extra reliability.

Why are there multiple rows for the same car? Kayak shows the same vehicle listing priced by several different suppliers (e.g., Hertz direct vs. Hertz via a reseller). Each supplier/price combination is returned as its own row so you don't lose any pricing options.

Can I filter by vehicle class or price in the input? Not directly — build your filters into the Kayak search itself (on kayak.com/cars) and paste the resulting URL into startUrl.

Why did I get fewer offers than results_wanted? A single search URL exposes one Kayak results page — typically enough vehicle listings, each with several supplier offers, to comfortably reach 100+ rows, but it has a ceiling. If your run logs a warning that fewer offers were available than requested, that's the page's natural limit; run additional searches with different filters (dates, sort order) for more coverage.

Found a bug or have a feature request? Open an issue on the Actor's Issues tab — feedback shapes what gets built next.