Ultimate Car Listings Scraper & Price Changes
Pricing
from $0.10 / 1,000 results
Ultimate Car Listings Scraper & Price Changes
Build dated car-listing observations and detect asking-price changes between comparable snapshots. Source links included; the first run establishes a baseline.
Pricing
from $0.10 / 1,000 results
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
3
Bookmarked
55
Total users
1
Monthly active users
19 days ago
Last modified
Categories
Features
Share
Public Car Listings & Observed Price Changes
Collect public listings and track genuine price changes between observations. Select public page URLs, countries or cataloged sources, or supply records you already have. Results describe the collected sample, with explicit coverage and missing values.
Quick start and input
The public example below requests one observed listing. Clear Your records (JSON) to [] before using public collection.
{"pageUrls": ["https://www.finn.no/car/used/search.html"],"limit": 1,"maxPublicPages": 3,"maxObservations": 1,"view": "observations"}
Explicit pageUrls and supplied observations take precedence over legacy country/source defaults. Use pageUrls for specific public listing/search pages, or countries with websites/sources to choose cataloged discovery routes. maxPublicPages is a single request allowance across all selected countries, including redirects. maxObservations bounds the collected comparison sample. No external listing database or source API is used. A blocked or unsupported source creates a coverage error, never substitute listings.
Legacy providedRecords or providedDatasetId still clean supplied exports. Their analysis is in EVIDENCE_ANALYSIS, with sourceVerified=false. Use one data source at a time.
Output example
Representative fields from a reviewed public-page sample. Current listings and prices can change.
{"url": "https://www.finn.no/mobility/item/476900113","title": "BMW 225xe","price": 119900,"currency_code": "NOK","source": "finnno","source_site": "finn.no","country_code": "NO","observed_at": "2026-10-25T18:10:34.237176+00:00","dataInputSource": "web","sourceVerified": true,"collectionEvidence": {"method": "public_html","pageUrl": "https://www.finn.no/car/used/search.html","observedFields": ["title","url","price"]},"brand": "BMW","model": "225xe","schema_version": 1,"record_type": "observation"}
PUBLIC_COLLECTION_SUMMARY reports observed records, requests, source errors, comparison coverage and confirmed delivered results. BASELINE_OBSERVATIONS contains the actual observations used. Source country metadata describes the cataloged source; incomplete samples are not national market statistics. Asking prices are not transaction prices. Currencies and sale/rental markets are compared separately.
Observations and history
The first collection establishes a baseline. It cannot reconstruct earlier prices. Reuse historyName with the same source selection for later comparisons. Baseline-only price-change/report runs save their observations without a paid result row. A source missing from a partial run does not establish removal. Uncertain dataset writes stop without blind replay or advancing the observation history.
view=observations explicitly returns observed listing rows at the existing result price. view=price_changes returns only actual comparable changes.
Country and source coverage
The source catalog spans 73 countries across both listing categories. For cars, 18 sources in 14 countries currently have bounded HTTP-fixture extraction evidence: AU, CA, DE, GB, IN, LK, NL, NO, PK, RS, SE, SK, US, ZA. This is a sampled page check, not complete pagination or cloud-access proof for every source. Other catalog entries are candidates and can be blocked, API-only or unverified. Run summaries show actual coverage; selecting a country is not a guarantee of results. No fixed South Africa-only restriction is imposed.
Pricing and limits
Check Pricing and set a spending cap. Confirmed delivered records use the existing result event. Supplied export analysis adds no separate analysis event. Baseline-only/failed collection creates no synthetic paid result. Start fees and normal platform/storage costs may still apply. Keep page and result limits small.
Python API example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('thescrapelab/ultimate-car-listings-scraper-100-sites').call(run_input={"pageUrls": ["https://www.finn.no/car/used/search.html"],"limit": 1,"maxPublicPages": 3,"maxObservations": 1,"view": "observations"})if run is None:raise RuntimeError('Actor did not return run metadata')dataset_id = run['defaultDatasetId'] if isinstance(run, dict) else run.default_dataset_idfor record in client.dataset(dataset_id).iterate_items():print(record)
Support and limitations
Open Issues with a run ID and a sanitized example. Public pages may block requests or change layout. Supplied snapshots remain customer assertions. The Actor does not establish complete historical inventory, national trends, removals from partial coverage, or market-wide price estimates.