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.
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. 👆👆
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.
- 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
| 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. |
| 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. |
[
{
"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
}
}
]
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
- 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.
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.
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.
