Quick answer: Use the FINN.no Car Scraper on Apify. Paste a filtered FINN.no car search URL (or just set a make or query), choose
maxResults, and the Actor walks every page and returns structured rows β NOK price, make, model, year, mileage, fuel, gearbox, body type, colour, and seller type β in a JSON or CSV dataset. No API key, no scraping infrastructure to maintain.
Why scrape FINN.no?
FINN.no is Norway's dominant classifieds marketplace and hosts tens of thousands of used-car listings. If you want a dataset of Norwegian car prices, want to monitor a dealer's stock, or are tracking the country's famously active used-EV market, the FINN.no car search is the primary source of truth. FINN publishes no public API for its car listings. Structured data means you have to extract it from the search pages.
Norway's used-car market has its own quirks: prices in Norwegian kroner (NOK), Norwegian-language spec labels (ModellΓ₯r, Drivstoff, Girkasse, Karosseri, Farge), and a used-EV penetration rate that leads Europe. The Actor maps all of those to standard English column names and outputs clean, typed rows.
What fields does the scraper return? π₯
Every row maps directly to the ResultRow Pydantic class in the Actor's source. Here is a realistic sample:
{
"listing_id": "463169662",
"listing_url": "https://www.finn.no/mobility/item/463169662",
"title": "Renault Kangoo",
"make": "Renault",
"model": "Kangoo",
"year": 2014,
"price": 33796,
"currency": "NOK",
"mileage_km": 214713,
"fuel_type": "Diesel",
"transmission": "Manuell",
"engine_power_hp": 90,
"engine_size_cc": null,
"body_type": "Kasse",
"color": "Hvit",
"first_registration": "09.10.2013",
"location": "Norge",
"region": null,
"seller_type": "private",
"seller_name": null,
"photo_urls": [
"https://images.finncdn.no/dynamic/default/item/463169662/78cfeabc-d8b8-4c8c-99eb-ce53725c1209"
],
"description": null,
"posted_date": null,
"scraped_at": "2026-06-02T00:00:00+00:00"
}
The complete field set is: listing_id, listing_url, title, make, model, year, price, currency (always NOK), mileage_km, fuel_type, transmission, engine_power_hp, engine_size_cc, body_type, color, first_registration, location, region, seller_type, seller_name, photo_urls, description, posted_date, and scraped_at. Fields tagged enrichment-only are populated only when enrichDetails is true (the default).
What does it cost to scrape FINN.no listings?
Pricing is Pay-Per-Event.
| Event | Price |
|---|---|
actor-start (one-off per run) |
$0.05 |
result-row (per car listing) |
$0.002 |
1,000 results in one run costs $2.05 ($0.05 start + 1,000 Γ $0.002). Apify gives every new account $5 of free credit β enough to pull your first two thousand listings before you spend anything. No card required to start.
How does the anti-blocking work?
FINN.no does not hand out listing data to every HTTP client that asks nicely. We handle that:
- We rotate Chrome, Firefox, and Safari TLS fingerprints using
curl-cffibrowser impersonation β FINN sees a real browser's handshake, not a Python request library. - We rotate residential proxy sessions through Apify Proxy on every block, cycling to a fresh session ID and exit IP automatically.
- We retry on 408, 429, and 5xx responses with exponential backoff (starting at 2 seconds, up to five attempts per page), honouring any
Retry-Afterheaders the server sends back. - When FINN pushes back and rate-limits the run, we pace down rather than triggering a harder block. Partial successes are surfaced with a clear status message β we never return an empty dataset with a green status.
The devil's in the details. We handle them.
How to run the scraper from Python
Install the apify-client library and call the Actor:
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_API_TOKEN")
run_input = {
"query": "tesla model 3",
"maxResults": 100,
"enrichDetails": True,
"proxyConfiguration": {
"useApifyProxy": True,
},
}
run = client.actor("DevilScrapes/finn-norway-cars").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["make"], item["model"], item["price"], item["currency"], item["mileage_km"])
You have three ways to target listings. Set query for a free-text search (e.g. "audi a4 quattro"), set make for a single brand filter (e.g. "Tesla"), or paste a full FINN search URL into searchUrl with all your filters already applied β the URL wins if all three are set. Turn enrichDetails off to halve the request count if mileage, gearbox, and power are not required.
What are the main use cases? π‘
Used-EV market tracking
Norway leads Europe in EV adoption and its used-EV market moves fast. Query make: "Tesla" or query: "elbil", run the Actor weekly, and you have a time series of Norwegian used-EV asking prices in NOK. Chart price against mileage and model year to see depreciation curves no paid automotive data service covers for this market.
Dealer inventory monitoring
Filter seller_type by dealer, run on a schedule, and diff successive datasets to catch new arrivals and price drops at specific dealerships. seller_name and location give you everything needed to segment by dealer.
Price benchmarking for importers
Norwegian consumers pay import taxes and VAT on new cars but the used market prices can be competitive for European buyers shopping cross-border. A dataset of FINN prices in NOK, normalised to EUR, gives importers a baseline.
Private-seller arbitrage
Private sellers on FINN sometimes list cars well below dealer retail. Filter seller_type: private and set a tight price band to surface those listings the moment they appear.
Regression modelling: price vs mileage vs age
Pull a broad dataset (e.g. all Volkswagen Golf listings), export to CSV, and fit a simple regression. The year, mileage_km, engine_power_hp, and transmission fields give you the standard independent variables.
FAQ
Is it legal to scrape FINN.no?
The Actor scrapes publicly visible listing data β the same data any browser user sees without logging in. FINN.no's terms of service govern automated access; review them for your specific use case. We recommend reasonable scraping cadence and using the data for legitimate analytical purposes.
Why are mileage, gearbox, and power sometimes null?
Those fields live on each car's individual detail page, not in the search payload. Keep enrichDetails on (the default) to fill them in. Turn it off to halve the request count and get only make, model, year, price, photos, and seller type from the search results.
What currency are prices in?
Norwegian kroner (NOK). The currency field is always NOK; price is an integer amount. Convert to EUR or GBP client-side with a live exchange rate if needed.
How do I search a specific model?
Set query to something like "volvo xc60 diesel", or apply your filters directly on finn.no and paste the resulting URL into searchUrl.
Can I schedule it to run daily?
Yes. Set up a scheduled task in the Apify Console with a cron expression. Successive datasets are stored and accessible via the Apify API for diffing and downstream processing.
Start collecting Norwegian car data
The FINN.no Car Scraper is live on the Apify Store. Hit Try for free β $5 of credit included, no card required.
Export to JSON or CSV in minutes. Questions or edge cases? Open an issue on the Actor's Issues tab and we'll look at it in the next weekly release.
Resources:
Top comments (0)