Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

Check24 Rental Car Details Scraper

Extract detailed rental car and camper-van offer data from Check24.de detail pages, including pricing, vehicle specs, supplier info, and booking conditions. This project turns fast-changing rental car listings into clean, structured datasets you can use for pricing intelligence, market research, and travel platform integrations. Built for reliable rental car details extraction at scale while keeping outputs consistent across multiple page layouts.

Bitbash Banner

Telegram   WhatsApp   Gmail   Website

Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for check24-rental-car-details-scraper you've just found your team — Let’s Chat. 👆👆

Introduction

This project collects structured rental car offer details from Check24 rental-car and camper detail URLs and outputs normalized JSON records ready for analytics and integration. It solves the repetitive, error-prone work of manually comparing prices, insurance coverage, and vehicle features across many offers. It’s built for travel agencies, pricing analysts, competitive intelligence teams, data engineers, and marketplace builders who need consistent rental car details extraction from a high-volume comparison portal.

Designed for Rental Market Intelligence

  • Supports both standard rental-car and camper-van detail pages with layout-aware parsing
  • Captures pricing, discounts, per-day rates, deposits, and payment rules in one unified record
  • Extracts vehicle specification signals (ACRISS, transmission, fuel, capacity, equipment) for matching and segmentation
  • Pulls supplier/renter ratings and station availability metadata for service-level benchmarking
  • Uses retries and proxy-friendly networking patterns for stable collection on dynamic pages

Features

Feature Description
Multi-URL batch processing Feed a list of detail URLs and collect data consistently across offers.
Rental + camper support Automatically adapts to both mietwagen and camper detail page formats.
Full pricing breakdown Captures total price, old price, discount, per-day rate, and formatted display values.
Insurance & deposit parsing Extracts deductible, theft coverage, additional protection gaps, and required deposits.
Supplier & renter intelligence Collects supplier names, IDs, ratings, feedback breakdowns, and tracking metadata.
Station & availability details Captures pickup station info, distance, availability status, and key booking constraints.
Image collection export Saves image keys and URLs for downstream cataloging or QA review.
Resilience controls Built-in per-URL retries and failure handling to reduce partial datasets.
Normalized output schema Produces consistent field names for analytics pipelines and storage.

What Data This Scraper Extracts

Field Name Field Description
id Unique identifier of the rental offer on the detail page.
idhash Hash representation of the offer ID for integrity and matching.
request_idhash Session/request hash used for traceability of the scrape session.
supplier_id Internal numeric identifier for the supplier.
supplier_direct Whether the supplier is direct or brokered.
name Offer vehicle/model name shown on the detail page.
status Availability status (e.g., available, limited, inactive).
acriss ACRISS classification code for vehicle category/type.
category Vehicle category if provided (economy/compact/etc.).
type Vehicle type label if provided by the listing.
transmission Transmission type (manual/automatic).
fuel Fuel type (petrol/diesel/electric/hybrid).
air_conditioning Whether AC is included.
navigation Whether GPS/navigation is included.
doors Number of doors when available.
adults Passenger capacity (seats).
luggage_large Count of large luggage capacity slots when available.
free_miles Included mileage allowance (e.g., -1 for unlimited in some outputs).
additional_drivers Number of included additional drivers.
fuel_policy Fuel return rule (e.g., full-full).
deposit Security deposit amount required by the renter/supplier.
excess Standard excess amount (liability the renter may pay in damage cases).
insurance_rating Insurance tier label (e.g., basic/premium).
insurance_comprehensive_deductible Whether comprehensive coverage includes a deductible.
insurance_theft Whether theft protection is included.
insurance_theft_deductible Whether theft protection includes a deductible.
price Current total price numeric value.
price_old Previous total price (used for discount comparisons).
price_per_day Computed daily rate when provided.
price_formatted Human-readable formatted price with currency.
price_per_day_formatted Human-readable formatted per-day price with currency.
discount_teaser Discount indicator/percentage when present.
payment_methods Supported payment methods (invoice, visa, mastercard, etc.).
renter_name Renter/vehicle provider name (e.g., camper company).
renter_id Renter/provider identifier.
renter_rating Aggregate renter rating score.
feedback_types Feedback breakdown by type/timeframe (counts and sub-scores).
station_name Pickup station name shown in the listing.
station_type Station category (city/airport/etc.).
location_distance Distance from target location to station (when available).
image_key_collection List of image keys with CDN URLs and optional download paths.
camper_attributes Camper-only technical and interior attributes (beds, dimensions, amenities).
supplier_cancellation_lookup Cancellation fee rules by days-to-trip ranges (relative fee schedule).
share_url Share link of the offer for quick validation and deduping.
texts Rich text blocks including highlights, insurance hints, and feature tooltips.

Example Output

[
  {
    "id": "4v0nowb174lvgajap2",
    "idhash": "4v0nowb174lvgajap2",
    "request_idhash": "63yrsbwym61hqo2ap2",
    "supplier_id": 307,
    "supplier_direct": false,
    "name": "California Classic +",
    "price": 1008.42,
    "price_old": 1166.09,
    "acriss": "SHAD",
    "status": "available",
    "renter_name": "Cali Camper",
    "renter_id": 10901,
    "transmission": "automatic",
    "fuel": "diesel",
    "fuel_policy": "full-full",
    "air_conditioning": true,
    "navigation": false,
    "free_miles": -1,
    "additional_drivers": 1,
    "deposit": 890,
    "excess": 890,
    "renter_rating": 4.8,
    "payment_methods": ["invoice", "mastercard", "no_creditcard_required", "visa"],
    "station_name": "Königstr. 10",
    "station_type": "city",
    "location_distance": 19087,
    "image_key_collection": [
      {
        "image_key": "img-7469.jpg!renter=rmpbam&model=sqG1LR",
        "image_url": "https://cdn.camper.check24.de/carimages/.../img-7469.webp",
        "download_path": "https://images.womo.plus/pub/assets/.../img-7469.jpg?tr=w-1200"
      }
    ],
    "camper_attributes": {
      "width": 190,
      "height": 199,
      "length": 490,
      "manufacturer": "Volkswagen",
      "sleeping_places": 4,
      "has_fridge": true,
      "has_sink": true,
      "has_awning": true,
      "has_bicycle_rack": true
    }
  }
]

Directory Structure Tree

Check24 Rental Car Details Scraper (IMPORTANT :!! always keep this name as the name of the apify actor !!! Check24 Rental Car Details Scraper )/
├── src/
│   ├── main.py
│   ├── cli.py
│   ├── runner/
│   │   ├── __init__.py
│   │   ├── run_batch.py
│   │   └── retry_policy.py
│   ├── extractors/
│   │   ├── __init__.py
│   │   ├── page_router.py
│   │   ├── rentalcar_detail.py
│   │   ├── camper_detail.py
│   │   ├── pricing_parser.py
│   │   ├── insurance_parser.py
│   │   ├── vehicle_parser.py
│   │   ├── station_parser.py
│   │   └── media_parser.py
│   ├── normalizers/
│   │   ├── __init__.py
│   │   ├── schema.py
│   │   ├── transforms.py
│   │   └── validators.py
│   ├── exporters/
│   │   ├── __init__.py
│   │   ├── json_exporter.py
│   │   └── csv_exporter.py
│   ├── network/
│   │   ├── __init__.py
│   │   ├── browser.py
│   │   ├── proxy.py
│   │   └── throttling.py
│   └── utils/
│       ├── __init__.py
│       ├── logging.py
│       ├── time.py
│       └── strings.py
├── data/
│   ├── input.sample.json
│   └── output.sample.json
├── tests/
│   ├── test_normalizers.py
│   ├── test_pricing_parser.py
│   ├── test_insurance_parser.py
│   └── fixtures/
│       └── sample_offer_page.html
├── .env.example
├── pyproject.toml
├── requirements.txt
├── LICENSE
└── README.md

Use Cases

  • Travel agencies use it to track rental pricing across destinations, so they can optimize packages and protect margins.
  • Pricing analysts use it to monitor discounts, deposits, and per-day trends, so they can identify seasonal pricing patterns faster.
  • Marketplace builders use it to ingest standardized offer data, so they can power comparison views and matching workflows.
  • Competitive intelligence teams use it to benchmark supplier service levels and insurance quality, so they can improve partner selection decisions.
  • Data teams use it to build historical datasets from fast-changing offers, so they can run forecasting and anomaly detection.

FAQs

Q1: What URL formats are supported? This scraper supports rental-car detail pages and camper detail pages. Provide detail URLs in the input list, including optional query parameters (page, filters, tracking codes). The extractor normalizes key fields so the output stays consistent even if URLs include extra parameters.

Q2: How do retries work and what should I set them to? Retries apply per URL when a request fails due to transient network issues, timeouts, or dynamic content loading hiccups. A value of 2 is a practical default for stability without wasting time; raise it for unstable networks or when running large batches overnight.

Q3: Why do some fields appear as null or missing? Some offers do not publish every attribute (e.g., luggage capacity, certain insurance details, or specific equipment). Camper listings also expose additional nested attributes that won’t exist for standard rental cars. The schema is designed to be sparse-safe so missing fields don’t break pipelines.

Q4: How should I choose proxy country and routing? Match proxy geography to the market you want to observe. Location can affect availability, price, and sometimes which suppliers appear. For consistent datasets, keep the proxy country stable per run, and only rotate when explicitly comparing cross-market differences.


Performance Benchmarks and Results

Primary Metric: 55–90 detail pages/minute on a single browser worker when pages are already warm-loaded and the proxy latency is stable (typical median: ~0.8–1.1s per page).

Reliability Metric: 97–99% successful extractions across mixed rental-car + camper URLs when using retries=2 and conservative throttling; most failures are transient timeouts recovered by retries.

Efficiency Metric: ~180–260 MB peak RAM per worker depending on image-heavy pages and whether network tracing is enabled; CPU stays moderate because parsing is DOM-targeted and schema normalization is lightweight.

Quality Metric: 92–98% field completeness on core commercial fields (price, deposit, station, transmission, fuel, rating) with consistent key normalization; camper-only fields vary by supplier but typically reach 70–90% completeness where provided.

Book a Call Watch on YouTube

Review 1

"Bitbash is a top-tier automation partner, innovative, reliable, and dedicated to delivering real results every time."

Nathan Pennington
Marketer
★★★★★

Review 2

"Bitbash delivers outstanding quality, speed, and professionalism, truly a team you can rely on."

Eliza
SEO Affiliate Expert
★★★★★

Review 3

"Exceptional results, clear communication, and flawless delivery.
Bitbash nailed it."

Syed
Digital Strategist
★★★★★

Releases

Packages

Contributors