# FINN Motor Scraper: Norway Cars, MC and Boats (`automation_craft/finn-motor-scraper`) Actor

FINN motor ads in Norway: used cars, vans, MC, boats, caravans and motorhomes, by make, model, county, dealer id, plate or VIN, searches split past FINN's 2,500 cap, no login. Rows: merke, modell, årsmodell, kilometerstand, pris ekskl. omreg., EU-kontroll, dealer card. Pay per result; Excel, API.

- **URL**: https://apify.com/automation_craft/finn-motor-scraper.md
- **Developed by:** [Automation Craft](https://apify.com/automation_craft) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.04 / 1,000 vehicles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### FINN Motor Scraper: Norway Cars, MC and Boats

**FINN car data** from FINN motor, the vehicle part of FINN.no: search FINN's used cars and vans, motorcycles, mopeds and scooters,
ATVs, snowmobiles, boats, boat engines, docks, caravans, motorhomes, trucks, buses, construction machinery, tractors, farm tools and
combine harvesters by place, by FINN's own vehicle filters, by a dealer's FINN id, by plate or VIN, by a pasted FINN search link or by
ad link and FINN code, and get every ad as one row: make, model, model year, mileage, fuel, gearbox, power, body, colour, price (and
the price without the registration fee), place and map point, private seller or dealer, the dealer's name and organisation number,
plate and VIN, and the vehicle type's own facts (boat class and length, engine size, berths, hours used). Turn on the ad page for the
full vehicle record (equipment, first registration, EU control, owners, warranty, whether the service plan was followed, condition report, declared damages,
leasing terms, battery and range, weights and lengths, FINN's loan example) and the dealer card (address, phone, e-mail, website,
opening hours, authorised brands, memberships, years on FINN, ad count), and add FINN's own list of similar vehicles per ad. No login,
no cookies.

Who uses it: car, MC and boat dealers watching other dealers' stock and prices, importers and exporters looking for vehicles to buy, leasing,
finance and insurance firms checking market values, car data and valuation services, analysts of Norway's electric car market, and
teams feeding FINN vehicle data into their own sheets, apps or AI agents.

### Quick start

1. Open the **Input** tab and pick **Vehicle types** (used cars is the default; `Motorcycles`, `Boats`, `Motorhomes`, `Trucks` and
   the others) and **Places** (`Oslo`, `Bergen`, `Trøndelag`).
2. Narrow it with FINN's vehicle filters: **Makes** and **Models**, model year, mileage, price, **Fuel**, **Gearbox**, **Body or
   type**, **Equipment** (`Hengerfeste` for a towbar), **Warranty and exchange right**, engine size, boat length, berths, weight and
   the others.
3. Or give **Dealer ids** to read every ad of one dealer, **Plates to look up** or **VINs to look up** to find the FINN ad of a
   vehicle, or paste FINN links: search pages into **Search links**, ad links or FINN codes into **Ad links or FINN codes**.
4. Keep **Include the ad page** on for the full vehicle record and the dealer card (no extra charge), turn on **Add similar
   vehicles (add-on)** if you want FINN's list of similar vehicles per ad, set **Maximum rows** and click **Start**. Download the
   rows as JSON, CSV or Excel, or read them through the Apify API.

The prefilled input reads 20 used cars in Oslo with their ad pages (38 seconds and $0.0262 at Gold on 2026-10-23). For a daily feed, schedule the run in
Apify (set **Posted within (hours)** to 24 for the last day's ads) and keep the FINN codes you have seen in your own sheet or flow:
this Actor keeps no memory between runs.

### What you get

One row per ad (`type: "listing"`, `vertical: "vehicles"`), one free coverage row per search (`type: "search"`), free status rows for
anything that could not be delivered (`type: "status"`) and a run summary (`type: "summary"`).

Every fill figure below is counted on the rows of this Actor's real runs of 2026-10-23 (matrix real2, build 0.1.3; the 32 runs with
vehicle rows, the sweeps left out): 1,058 distinct ads without the ad page ("search row": cars 1,001, MC 15, boats 11, trucks 7 and 2 of
every other type; dealers 629, private sellers 429) and 414 with it ("ad page": cars 358, boats 12, MC 12, business vehicles 10,
mobile homes 5, trucks 4, caravans 3, tractors 2 and 8 ad links; dealers 241, private sellers 173), all with the personal data
switch off but 5. A field FINN does not show for an ad is `null`. "N of M" counts
the rows where the field holds a value.

#### On every row

| Field | What it is | Search row | Ad page |
|---|---|---|---|
| `adId`, `url`, `title` | the FINN code (finnkode), the ad's link, its title | 1,058 of 1,058 | 414 of 414 |
| `kind`, `vehicleKind`, `vehicleKindLabel` | the vehicle type you asked for, FINN's view type (`car-used`, `boat-sale` ...) and FINN's own label of it | 1,058 (kind) | 414 (view type and label) |
| `make`, `model`, `modelSpecification`, `year` | make, model, FINN's model line, model year | 1,056, 1,042, 929, 1,058 | 412, 414, 338, 414 |
| `price`, `currency` | the price as a number in kroner | 1,058 of 1,058 | 414 of 414 |
| `mileage`, `fuel`, `transmission` | kilometres (or hours, `mileageUnit`), fuel, gearbox | 1,024, 1,029, 1,002 | 388, 393, 371 |
| `location`, `latitude`, `longitude`, `postalCode`, `postalName` | FINN's place, its point, the postcode (ad page) | 1,058 (place and point) | 414 of 414 |
| `publishedAt`, `daysOnMarket` | when FINN published the ad, days since | 1,058 of 1,058 | 406 of 414 |
| `sellerType`, `companyName`, `companyId` | dealer or private, the dealer's name and FINN dealer id | 1,058, 629, 622 | 414, 241, 241 |
| `plate`, `vin` | the plate and the VIN (a dealer's; a private seller's only with the switch on) | 498, 609 | 180, 231 |
| `registrationClass`, `searchFlags`, `searchAdsOnFinn` | FINN's registration class, its row flags, FINN's count of the search | 1,001, 289, 1,058 | 358, 103, 406 |
| `imageUrl`, `imageUrls`, `imageCount` | the main image, every image, their count | 1,051 (count 1,058) | 413 (count 414) |

#### From the ad page

| Field | What it is | Ad page |
|---|---|---|
| `description` | the seller's text, as served | 407 of 414 |
| `priceExclRegistration`, `registrationFee`, `priceTotal` | the price without the registration fee ("pris ekskl. omreg."), the fee, the total | 387, 375, 356 |
| `priceNet`, `priceVatIncluded`, `registrationTaxExempt` | business prices without and with VAT, the tax exemption | 32, 10, 375 |
| `monthlyPrice`, `leasingInitialPayment`, `leasing` | a lease's monthly price, its first payment, its terms (months and kilometres left) | 11 of 11 leasing ads |
| `loanFromPerMonth`, `loanExample` | FINN's own loan example ("fra ... kr/mnd") | 383 |
| `firstRegistration`, `owners`, `nextEuControl`, `lastEuControl` | first registration, owners, the EU control dates | 358, 191, 235, 107 |
| `powerHp`, `engineVolume`, `wheelDrive`, `bodyType`, `colour`, `seats`, `doors` | engine power, cc, drive, body, colour, seats, doors | 378, 256, 371, 360, 388, 380, 342 |
| `batteryCapacity`, `drivingRangeKm`, `rangePerKwh`, `fuelConsumption`, `co2` | battery, range, km per kWh, consumption, CO2 | 127, 134, 94, 147, 209 |
| `weightKg`, `maxTrailerWeight`, `netWeightKg`, `payloadKg`, `lengthCm`, `widthCm` | weights (total, trailer, net, payload), length and width | 375, 306, 8, 10, 9, 14 |
| `equipment`, `warranty`, `servicePlanFollowed`, `serviceDocuments` | equipment list, warranty (type, months, distance), service plan followed; service documents come from FINN's search row (empty on an ad link row) | 328, 165, 382, 164 |
| `hasLiens`, `knownDamages`, `majorRepairs`, `damagesDetails`, `conditionReportAvailable`, `conditionReport` | liens, the seller's damage and repair answers, the condition report | 144, 145, 127, 63, 85, 15 |
| `vehicleRegisterUrl`, `euControlCheckUrl`, `liensCheckUrl` | Statens vegvesen's register lookup, the EU control check, the liens check | 180, 180, 178 |
| `vehicleLocation`, `salesForm`, `rightToExchange` | where the vehicle stands, sales form, the right to exchange | 390, 366, 366 |
| `lengthFeet`, `boatClass`, `material`, `motorType`, `motorSize`, `maxSpeedKnots`, `sleepers` | boat length, class, hull, engine type and power, top speed, berths | 12 of 12 boats (length and class), hull 11, engine type 11, power 10, top speed 8; berths 14 (boats, mobile homes, caravans) |
| `hoursUsed`, `tailLift`, `tradeType` | hours used on machines, a truck's tail lift, FINN's sale or rent label | 2 (a tractor, a construction machine), 5 (trucks), 8 (mobile homes and caravans) |
| `dealer` | the dealer card (below) | 241 of 241 dealer ads |

Fields of the family row that FINN's vehicle pages do not fill stay `null`: `county` and `municipality` (FINN's place is in
`location`, `postalCode` and `postalName`), `serviceHistory`, and `chargingPowerKw`, `accelerationSec`, `topSpeedKmh` (none of these
is a fact on FINN's vehicle pages; see below).

#### The dealer card

With the ad page, every dealer ad carries `dealer`: FINN's dealer id (`id`, the one **Dealer ids** takes), the Norwegian
organisation number (`orgNumber`) and its Brønnøysund register link (`registryUrl`), `name`, `address`, `phone`, `email`,
`website`, `logo`, `description`, `yearsOnFinn` (FINN's own text, such as "5+ år på FINN"), `openingHours` (day, hours, open or
closed), `openingNow`, `authorizedBrands` (per vehicle kind in `authorizedBrandsByKind`), `memberAssociations` (such as
"Medlem av Bruktbilgruppen"), `sellingPoints`, `adCount` (FINN's count of the dealer's ads), `adsUrl` (FINN's search of them) and
`pageUrl` (the dealer's page on FINN). The search row adds the dealer's chain id (`dealerChainId`) and memberships
(`dealerMemberships`). A private seller's row has no dealer card.

#### Example row

One dealer car of the prefilled run (real run qMHrdol9diDwWbAWF, 2026-10-23, trimmed to the main fields; the full row has 179 keys,
104 of them filled on this ad):

```json
{
  "type": "listing", "vertical": "vehicles", "kind": "car", "vehicleKind": "car-used",
  "adId": "479393717", "url": "https://www.finn.no/mobility/item/479393717", "title": "BMW iX3",
  "make": "BMW", "model": "iX3", "modelSpecification": "Fully Charged, ComfAcc, Pano, H/K, Laser, 360Kam, HUD", "year": 2023,
  "mileage": 39500, "fuel": "El", "transmission": "Automat", "wheelDrive": "Bakhjulsdrift", "powerHp": 285,
  "bodyType": "SUV/Offroad", "colour": "Svart", "seats": 5, "doors": 4,
  "price": 489000, "priceExclRegistration": 481495, "registrationFee": 7505, "currency": "NOK",
  "firstRegistration": "2023-08-09", "registrationClass": "Personbil",
  "warranty": { "type": "BMW Premium Selection", "months": 24, "distance": 24000 },
  "serviceDocuments": ["Service"], "servicePlanFollowed": true, "loanFromPerMonth": 6328,
  "location": "Oslo", "postalCode": "0281", "postalName": "Oslo", "latitude": 59.91825, "longitude": 10.661107,
  "publishedAt": "2026-10-23T16:38:25.000Z", "daysOnMarket": 0.2,
  "sellerType": "business", "companyName": "Bilia Skøyen", "companyId": "474604756", "companyOrgNumber": "976023188",
  "dealer": {
    "id": "474604756", "name": "Bilia Skøyen", "orgNumber": "976023188",
    "registryUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/976023188",
    "address": "Drammensveien 213, 0281 Oslo", "phone": "91 50 85 55", "website": "https://www.bilia.no/forhandlere/skoyen-bmw",
    "yearsOnFinn": "5+ år på FINN", "authorizedBrands": ["BMW", "MINI"],
    "memberAssociations": ["Medlem av Norges Bilbransjeforbund"], "adCount": 128,
    "pageUrl": "https://www.finn.no/mobility/dealer/474604756/bilia-skoyen"
  },
  "searchAdsOnFinn": 4302, "scrapedAt": "2026-10-23T21:10:18.775Z"
}
```

#### The coverage row of each search (free)

Every search ends with one free row: FINN's count of ads (`adsOnFinn`), the filters sent (`filtersSent`), pages and rows read,
distinct ads met, ads delivered, ads already delivered by an earlier search of the run, ads left out by a check (`filteredOut` and
`filteredOutBy`), how many slices a search past FINN's reach was read in (`slicesRead`), how many ads stayed beyond reach
(`adsBeyondReach`) and how many FINN counts on no part of its lists (`adsNoSliceHolds`), whether the search was read to its end (`complete`) and why it stopped (`stoppedBy`), and a price summary of the
ads met (count, lowest, quartiles, median, mean, highest). A dealer search names its dealer id (`dealerId`); a lookup search lists
its lookups with their result (below).

### Plate and VIN lookups

**Plates to look up** and **VINs to look up** find the FINN ad of each vehicle you name. FINN's free text search is used, and FINN
finds a plate only in the form the ad stores it, with or without the space ("BT27916" on most ads, "EF 42544" on some), so each
standard plate is sent in both forms with FINN's own OR (a personalised plate as you typed it). FINN takes at most 20 such terms in
one search, so 10 standard plates, 20 personalised plates or 20 VINs share one search (a search per vehicle type: used cars when **Vehicle types** is empty). Every vehicle FINN answers has its ad page read, and a
row is delivered only when the ad page itself shows the plate or VIN asked (FINN's free text also finds a plate written in another
ad's description: such an ad is left out, free). Each delivered row names the lookups it answers in `matchedLookups` (the list and
the position, never the plate or VIN). Each search's coverage row lists its lookups (`lookups`: `type`, `setting`, `position`,
`found`), for that vehicle type's search: `true` when a vehicle carrying it was delivered, `false` when FINN holds no ad with it, `null` when the search could not
be read in full or a filter of yours left out an ad that might carry it. The run summary repeats every result (`motor.lookups`: per
vehicle type and list, the positions found, not found and not known), so a long list never loses one to the cap on free rows. The plate or VIN you asked is never echoed into a row, a key, a label
or a log line of this Actor (a found dealer row carries its own plate and VIN, as every dealer row does); a private seller's plate field stays empty with the personal data switch off, even on the row its
plate found.

A plate or VIN given twice (in either form) is looked up once and answered at its first position. A plate or VIN that is not on FINN costs nothing. Searches that deliver nothing are paid by the run's free work allowance:
measured on 2026-10-23, 50 plates no ad carries were answered in 5 shared searches in 6 seconds and the run cost the start fee
alone ($0.0049); 3 plates and 1 VIN of real ads plus 1 made up plate found the 3 plates and the VIN and said not found for the
made up one, in 1 search.

### Dealer stock

**Dealer ids** reads every ad of one dealer: FINN's own dealer filter (the one behind "Se forhandlerens annonser" on an ad), one
search per dealer id and vehicle type, with the dealer card on every row when the ad page is read. A row whose own dealer id is
another dealer's is left out, free (FINN's boat rows carry no dealer id; there FINN's echo of the dealer filter is the proof).
Measured on 2026-10-23: one car dealer with 54 ads read 30 of them (the cap set) in 38 seconds with
every row's dealer card; 50 dealers at one vehicle each with the ad page took 141 seconds; an MC dealer's search and a dealer's boat and truck
searches (38 boats, 241 trucks) each answered in under 5 seconds without the ad page.

### Similar vehicles (add-on)

**Add similar vehicles (add-on)** adds `similarVehicles`: FINN's own list of up to 6 vehicles like the ad (FINN code, link, title,
year and mileage text as FINN shows it, price as served and as a number, image), read for the ad's vehicle type, on every vehicle
type. It reads the ad page too (in the Vehicle price). `similarVehiclesStatus` says `delivered`, `noData` (FINN lists none),
`notOffered` (FINN's list does not take this vehicle type), `failed` or `notRead`; only `delivered` is billed. Each list is read once,
after the rows are chosen for delivery; a failing list service stops the add-on, never the vehicles you pay for. Measured on 2026-10-23: 20 of 20 used
cars, 12 of 12 MC, boats, caravans and tractors (3 each), and 200 of 200 cars (420 seconds) had a list delivered.

### How much does it cost to scrape FINN cars?

You pay per event, with Apify's store discounts by plan. The ad page is included in the Vehicle price: with **Include the ad page**
on, on every ad link row and on every lookup row, it costs nothing extra.

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Vehicle (one vehicle row, any type, its ad page included) | $1.45 per 1,000 | $1.33 per 1,000 | $1.20 per 1,000 | $1.04 per 1,000 |
| Results page (a search page that brings a vehicle new in the run and delivers a vehicle, up to 50 vehicles) | $0.70 per 1,000 | $0.64 per 1,000 | $0.58 per 1,000 | $0.50 per 1,000 |
| Similar vehicles list (add-on, one per row that carries a list) | $0.70 per 1,000 | $0.64 per 1,000 | $0.58 per 1,000 | $0.50 per 1,000 |
| Actor start (once per run) | $0.0049 | $0.0049 | $0.0049 | $0.0049 |

Platinum and Diamond plans pay the Gold price. The Actor start is a flat fee per run, with no plan discount.

The Store pricing card shows these same prices per 1,000 events: "$1.04 / 1,000" on the Vehicle row means one vehicle costs about a
tenth of a cent at Gold ($0.00104), and "$0.70 / 1,000" on the Similar vehicles list row means one list costs $0.0007 on the Free
plan.

- **Vehicle** is charged once per ad delivered as a row, from a search, a dealer, a lookup or a link, with or without its ad page.
- **Results page** is charged once per FINN search page the run reads that brings at least one vehicle not met before in the run and
  from which a vehicle is delivered (up to 50 vehicles a page, so about $0.01 per 1,000 vehicles at Gold). A page of repeats, a page
  whose vehicles are all left out by a filter or a lookup's own check, a page FINN did not apply, the first page of a split, an empty
  search, ad links and every page of a run's restarted attempt are free.
- **Similar vehicles list** is charged only with the add-on on, and only on a row that carries FINN's list.
- Never billed: the ad page, repeats in the run, ads left out by a filter, a plate or VIN no ad carries, a missing or removed ad, a
  refused setting, a search that finds nothing, coverage rows, status rows and the summary.
- **Removed ads are free, and a long run of them stops the run.** Each removed or missing ad link is free and counted in the run
  summary (with its own status row for the first 20, plus one more per billed event). The run's free work allowance reads about 30
  removed links in a row before it stops and names the first link it did not read (measured on 2026-10-23: 30 removed links, all 30
  read; 40 removed links before 10 live ones, 30 read and the run stopped before the live ones; 10 live links before 40 removed ones,
  10 vehicles delivered and all 40 removed read). Put the links you expect to be live first.
- **Every run is charged the Actor start fee ($0.0049), also when it finds nothing** (a plate no ad carries, a filter no ad passes,
  an input with nothing valid in it): such a run costs $0.0049.
  Worked examples, measured on this Actor's real runs of 2026-10-23 (what you would pay, start fee included):

| Run | Rows | Free plan | Gold |
|---|---|---|---|
| The prefill: 20 used cars in Oslo with their ad pages (38 s) | 20 vehicles, 1 Results page | $0.0346 | $0.0262 |
| 1,000 used cars, search rows only (45 s) | 1,000 vehicles, 21 Results pages | $1.4696 | $1.0554 |
| 300 used cars with their ad pages (332 s) | 300 vehicles, 7 Results pages | $0.4448 | $0.3204 |
| 200 used cars with the similar vehicles add-on (420 s) | 200 vehicles, 5 Results pages, 200 lists | $0.4384 | $0.3154 |
| Every boat on FINN (5,849, 276 s) | 5,849 vehicles, 118 Results pages | $8.5686 | $6.1469 |
| 50 plates no ad carries (6 s) | none | $0.0049 | $0.0049 |

### Input

The Actor has 93 settings; every one is in the **Input** tab with its own help text. The main ones:

| Setting | What it does |
|---|---|
| `vehicleTypes` | The searches, each its own: `car` (the default; vans, new cars, leasing and auctions are filters of it), `mc`, `scooter`, `atv`, `snowmobile`, `boat`, `boatEngine`, `boatDock`, `caravan`, `mobileHome`, `truck`, `bus`, `construction`, `tractor`, `agriTools`, `threshers`, or `b2bAll` for every business vehicle at once. |
| `keywords` | Search words, each its own search (`tesla model y`, `hengerfeste`, `RIB`). FINN matches them in the ad texts. |
| `dealerIds` | FINN dealer ids, each a search of every ad of that dealer (per vehicle type). The id is a dealer row's `companyId` and the number in the dealer's FINN page address. |
| `plates`, `vins` | Plate and VIN lookups (above), up to 300 plates and 300 VINs a run. |
| `searchUrls` | FINN motor search links (`https://www.finn.no/mobility/search/car?...`), read with all their filters. |
| `adUrls` | Ad links (`/mobility/item/<FINN code>` and the older car, boat, MC and business vehicle ad links) or FINN codes, up to 5,000, each read with its ad page. A removed or unknown ad is a free status row. |
| `locations` | Counties, municipalities or districts by FINN's Norwegian name (`Oslo`, `Bergen`, `Trøndelag`, `Utlandet`) or value. Several places are one search. |
| `latitude`, `longitude`, `radiusKm` | FINN's own map radius around a point in Norway (1 to 500 km). |
| `minPrice`, `maxPrice`, `sellerType`, `postedToday`, `smoothTradeOnly` | Price in kroner, private sellers or dealers only (FINN's own seller filter; a private sale service's cars, which FINN files under dealers, are left out of dealers only, free, and only **Any seller** delivers them), FINN's "Nye i dag", FINN's safe trade. |
| `makes`, `models`, `minYear`, `maxYear`, `minMileage`, `maxMileage`, `fuelTypes`, `transmissions`, `bodyTypes`, `wheelDrives`, `colours`, `salesForms`, `minPowerHp`, `maxPowerHp`, `minSeats`, `maxSeats`, `vansOnly` | FINN's vehicle filters, by FINN's Norwegian names or values (`Tesla`, `Model Y`, `El`, `Automat`, `SUV/Offroad`, `Leasing`). |
| `registrationClasses`, `equipment`, `warrantyTypes`, `conditionDocuments`, `wheelSets`, `minTrailerWeightKg`, `maxTrailerWeightKg` | Cars: registration class, equipment (`Hengerfeste`, `Ryggekamera`, `Apple CarPlay` ...), warranty, exchange right and certified used car, service history, test or condition report, wheel sets, towing weight. |
| `minEngineCc`, `maxEngineCc`, `vehicleConditions` | MC, scooters, ATVs, snowmobiles: engine size in cc; new or used (MC, caravans, motorhomes). |
| `minLengthFeet`, `maxLengthFeet`, `boatMaterials`, `boatEngineTypes`, `boatEngineIncluded`, `minBoatEngineHp`, `maxBoatEngineHp`, `minTopSpeedKnots`, `maxTopSpeedKnots`, `seatGroups` | Boats: length in feet, material, engine type, engine included, engine power, top speed, seats. |
| `minLengthCm`, `maxLengthCm`, `minWidthCm`, `maxWidthCm`, `minWeightKg`, `maxWeightKg`, `berths`, `vehicleLocations` | Caravans, motorhomes, boats, docks and trucks: length, width and weight in FINN's units, berths, Norway or abroad. |
| `attributeFilters` | Any other filter of the vehicle type's own FINN filter list, by FINN's name or label: `{"truck_segment": ["Trekkvogn"]}`. |
| `postedAfter`, `postedWithinHours`, `includeKeywords`, `requireAllKeywords`, `excludeKeywords`, `titleOnly`, `excludeAdIds` | Filters checked on every row; an ad left out is free. |
| `maxItems`, `maxItemsPerSearch`, `maxPagesPerSearch`, `maxRowsPerSearch` | Paid rows per run (default 100), per search, pages per search (50 ads a page), rows read per search, the rows left out by a filter included (no limit by default). |
| `includeDetails` | The ad page (on in the prefill, off by default through the API), included in the Vehicle price. |
| `includeSimilarVehicles` | The similar vehicles add-on (above). |
| `includePersonalData` | The personal data switch (below). |
| `priceSummary`, `includeRawData`, `descriptionFormat`, `descriptionMaxLength`, `outputFields`, `compactOutput`, `excludeEmptyFields`, `extractContacts`, `phoneExtractionMode` | The price summary per search (on by default); FINN's search row; description `asServed`, `text` or `markdown` and a length cut; your own field list or core fields only; empty fields left out; e-mails, phones, websites and social profiles found in the texts. |
| `failIfIncomplete`, `completenessTolerancePercent`, `completenessToleranceAbsolute`, `maxFailedRequestsPercent`, `proxyConfiguration`, `requestsPerSecond`, `maxConcurrency`, `maxRequestRetries` | Fail the run when a search is incomplete or too many reads failed; your own bar for a complete search (FINN's count less a percent and a number of ads, instead of the fixed rule below); your own proxy links; the pace (0.2 to 2 requests a second, default 1), requests in flight (1 to 4, default 4), retries (0 to 5, default 2). |

A run reads at most 300 searches. A setting that belongs to another FINN part (real estate, Torget, jobs) is refused with a free row,
a monitor or alert setting (`monitorName`, `trackChanges`, a Telegram, Slack, Discord, WhatsApp or webhook setting) refuses the run
with a free row that says this Actor keeps no monitor, and an empty input is refused with a free row (only the run's start fee is
charged).

#### Example inputs

Electric SUVs with a towbar in Oslo and Akershus, with the ad page:

```json
{ "vehicleTypes": ["car"], "locations": ["Oslo", "Akershus"], "fuelTypes": ["El"], "bodyTypes": ["SUV/Offroad"], "equipment": ["Hengerfeste"], "includeDetails": true, "maxItems": 200 }
```

Every ad of one dealer, cars and vans, with the dealer card:

```json
{ "dealerIds": ["706939412"], "includeDetails": true, "maxItems": 500 }
```

Which of these cars are for sale on FINN, and at what price:

```json
{ "plates": ["BT27916", "EF 42544"], "vins": ["W1N9N1CB9PJ061095"] }
```

Glass fibre boats of 20 to 30 feet, with FINN's similar boats per ad:

```json
{ "vehicleTypes": ["boat"], "minLengthFeet": 20, "maxLengthFeet": 30, "boatMaterials": ["Glassfiber"], "includeSimilarVehicles": true, "maxItems": 100 }
```

#### Every filter is checked

Every named filter is resolved against the vehicle type's own FINN filter list. A value the list does not offer (a make, a place, a
body type) is a free row that lists the values it does offer, and the search delivers nothing: an unknown value never widens a
search. A filter the vehicle type does not have (engine size on cars) refuses that search with a free row naming the filters it has.
Every page FINN answers must echo back exactly the filters sent; a filter FINN dropped in silence makes that page a free
`search_not_applied` row and the search delivers nothing more.

#### Past FINN's 2,500 ad cap

FINN serves at most 50 pages of one search, 2,500 ads at 50 a page, and answers page 51 with page 1 again; used cars alone counted
about 74,600 ads on 2026-10-23. When FINN counts more ads than that and you want more, the search is split into slices by FINN's own
counts: of FINN's lists of makes and models, makes, boat classes and counties, the first whose counts hold every ad FINN counted (or,
when none does, the one that leaves the fewest out), split again the same way while a slice is past the reach, then price bands, each
read in FINN's own order. An ad met in an earlier slice is skipped free. The coverage row says how many slices were read, how many ads
stayed beyond reach (`adsBeyondReach`) and how many ads FINN counts on no part of its lists (`adsNoSliceHolds`: a few mobile homes
and business vehicles are on no county of FINN's list), and a search is `complete` when no ad stayed beyond reach, no ad sits on no slice
unless every ad FINN counted was met anyway, and its slices met about every ad FINN counted (FINN's count moves while a long search
reads: at least 98 percent, less 2 ads, or your own bar set with `completenessTolerancePercent` and
`completenessToleranceAbsolute`, which applies to every search but the plate and VIN lookups). Measured on this Actor's real runs of 2026-10-23: every boat on FINN, 5,849 of the 5,849 FINN counted, in 3
slices (276 s, complete); every MC, 5,832 of 5,833 (186 s, complete); every mobile home, 2,886 of 2,888 (2 on no county of FINN's
list, counted on the coverage row); every used car, 74,554 of the 74,555 FINN counted, in two runs of half the makes each (28 slices and about 760 pages
each, 1,591 and 1,898 s; FINN's model counts held one ad less than its total in each half, counted on the coverage row as `adsNoSliceHolds`;
half a met 37,258 of 37,259 and half b all 37,296). One run
of every used car bills about $78 at Gold and $109 at the Free plan's prices: set the run's maximum cost high enough.

#### Personal data

A private seller is an ad FINN marks as private (its seller segment "Privat"), and a car a private person sells through a private
sale service that FINN lists under dealers, whose FINN account names itself as such ("Bilen selges av privatperson. Rebil bistår
selger ...": 692 of the 74,554 used cars of 2026-10-23); FINN's own seller filter counts those as dealers. With **Include personal data** off (the default),
these fields are null on a private seller's row: the plate (`plate`, and the plate and VIN entries of the key facts in `attributes`),
the VIN (`vin`), the links that carry the plate (`vehicleRegisterUrl`, `euControlCheckUrl`, `liensCheckUrl`), the seller's FINN id
(`sellerId`), street (`streetAddress`), the seller's own links and documents (`videoUrl`, `externalLink`, `moreInfoLinks`, the
condition report `conditionReport` and `conditionReportUrl`), ad references (`advertiserRef`, `externalAdId`), a lease's return place
(`leasing.returnPlace`), the contacts found in the texts (**Extract contacts from texts**) and the raw search row; a private seller's
map point is rounded to 2 decimals (about 1 km) when FINN gives it to the address. On every ad, a contact person's name, phone and
e-mail (`contacts`) are null with the switch off. Turning the switch on adds all of these. A dealer's name, FINN id, organisation
number, address, phone, e-mail, website and dealer card are business data and always delivered. Titles, descriptions, equipment
texts and the seller's own answers (`sellerKnowledge`) are delivered exactly as FINN serves them, so an ad's own text can name a
person or give a phone number. FINN does not show a private seller's name or phone to visitors who are not logged in, so this Actor
never has them. You are responsible for a lawful use of personal data, GDPR included.

### What this Actor does NOT do

- **No monitor and no alerts.** It keeps no memory between runs: no "new only" rows, no price change, sold or removal tracking
  across runs, no Telegram, Slack, Discord, WhatsApp, webhook or app notifications. Schedule the run in Apify and compare the rows
  in your own sheet or flow (FINN codes are stable).
- **No sort order.** FINN's robots.txt asks robots not to send FINN's sort parameter, so every search is read in FINN's own default
  order (newest first); a pasted link's sort is dropped with a free note.
- **No FINN map tiles, no sitemap walk, no Atom feed.** FINN's robots.txt disallows its map pages, FINN motor has no Atom feed, and a
  whole vehicle type is read through the split past FINN's reach instead of a sitemap.
- **No private seller name or phone.** FINN shows them only to logged in users; this Actor never logs in. FINN's dealer phone button
  is not pressed: the dealer's phone and its contact person's phone are already on the ad page (the contact person's behind the
  personal data switch).
- **No car history report, register data or loan offers.** FINN's car history link leads to a part of FINN robots.txt disallows,
  vehicle register data is Statens vegvesen's (its lookup link is on the row), and FINN's loan and insurance pages are calculators
  with no offer in them; FINN's own loan example is on the row (`loanFromPerMonth`, `loanExample`).
- **No other sites.** Blocket, DBA, Tori and the company registers are other sites; FINN real estate, Torget and jobs are other parts
  of FINN with their own listings (below).
- **No charging power, 0 to 100 time or top speed read from a seller's text.** FINN's used vehicle ad pages show these as no fact of
  their own (none on 30 of 30 electric car ads on 2026-10-23); `chargingPowerKw`, `accelerationSec` and `topSpeedKmh` are filled only
  if FINN's key facts carry them, and a seller who writes them in the description has them in `description`, as written.
- **No sponsored slot.** FINN's paid "Betalt plassering" ad above a search is not read; every row is an organic search result.
- **No guessed spellings.** A value is used as you send it (after trimming and case) or refused with a free row listing FINN's own
  values; a misspelt make or county is never replaced by a near match.
- **No empty input sample.** An input with nothing to search is refused with a free row instead of a billed example run; the prefill
  in the Console is the example.

### API and integrations

Run it from the Apify API, the Apify client for JavaScript or Python, Make, Zapier, n8n or any HTTP client. Example with the API
(put your own token in place of `<YOUR_TOKEN>`):

```bash
curl -X POST "https://api.apify.com/v2/acts/automation_craft~finn-motor-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"vehicleTypes": ["car"], "locations": ["Oslo"], "includeDetails": true, "maxItems": 20}'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('automation_craft/finn-motor-scraper').call({ plates: ['BT27916'], vins: ['W1N9N1CB9PJ061095'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/finn-motor-scraper").call(run_input={"dealerIds": ["706939412"], "includeDetails": True})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

Every row carries `type`; keep `type == "listing"` for the vehicles, and read the coverage rows (`type == "search"`) to see whether
each search was read in full. The run report (`REPORT` in the run's key-value store) sums up the run, the Actor start fee included in its charged events.

### FAQ

#### How do I scrape FINN cars?

Pick the vehicle type (used cars is the default), a place and FINN's filters, or paste a FINN motor search link, and run it: each ad
is one row with make, model, year, mileage, price and the dealer, and with the ad page on, the full vehicle record. A search past
FINN's 2,500 ad reach is split so every ad is read.

#### Is there a FINN.no API for cars?

FINN's own API serves its business partners their own ads. This Actor reads FINN motor's public search and ad pages, logged out, and
gives you the rows through the Apify API, as JSON, CSV or Excel.

#### Can I look up a car on FINN by its plate or VIN?

Yes: put the plates into **Plates to look up** or the VINs into **VINs to look up**. A row is delivered only when the ad page itself
shows the plate or VIN, and each lookup's result (found or not) is on its search's free coverage row; a plate no ad carries costs
nothing.

#### How do I get every car of one dealer on FINN?

Put the dealer's FINN id (the `companyId` of one of its rows, or the number in its FINN page address) into **Dealer ids**. Every ad
of that dealer is read for each vehicle type you pick, with the dealer card on every row when the ad page is read.

#### How do I get the newest cars on FINN every day?

Schedule the run in Apify with **Posted within (hours)** set to 24 (FINN's default order is newest first) and keep the FINN codes you
have already seen in your own sheet or flow: this Actor keeps no memory between runs.

#### Why does this Actor run with limited permissions?

It needs nothing outside its own run: it reads FINN and writes to its own dataset and key-value store. Limited permissions keep it
from touching any other storage of your account.

### Changelog

See the Changelog tab (0.1, the launch).

### More data tools by Automation Craft

- [FINN.no Scraper: Torget, Cars, Homes and Jobs](https://apify.com/automation_craft/finn-scraper)
- [FINN Jobs Scraper: Norway Job Ads, Employers](https://apify.com/automation_craft/finn-jobs-scraper)
- [Mobile.de Scraper: Cars, Prices, Dealers & Ratings](https://apify.com/automation_craft/mobile-de-scraper)
- [AutoScout24 Scraper: EU Car Listings & Prices](https://apify.com/automation_craft/autoscout24-scraper)
- [La Centrale Scraper: Used Cars, Prices & Dealers](https://apify.com/automation_craft/lacentrale-scraper)
- [AutoTrader.ca Scraper: Canadian Cars and Prices](https://apify.com/automation_craft/autotrader-ca-scraper)
- [willhaben Scraper: Immobilien, Cars, Jobs & Ads](https://apify.com/automation_craft/willhaben-scraper)
- [Marktplaats Scraper: Ads, Cars, Sellers & Alerts](https://apify.com/automation_craft/marktplaats-scraper)

# Changelog

This Actor's version history is a separate document: https://apify.com/automation_craft/finn-motor-scraper/changelog.md

# Actor input Schema

## `vehicleTypes` (type: `array`):

Which FINN motor searches to read, each its own search: used cars (vans, new cars, leasing and auctions are filters of it), motorcycles, mopeds and scooters, ATVs, snowmobiles, boats, boat engines, docks, caravans, motorhomes, trucks, buses, construction machinery, tractors, farm tools, combine harvesters, or all business vehicles at once. Left empty: used cars.

## `keywords` (type: `array`):

Search words, each one its own search ("tesla model y", "hengerfeste", "bobil alkove", "RIB"). FINN matches them in the ad texts. Left empty, each vehicle type is searched without words, newest first.

## `dealerIds` (type: `array`):

Every ad of one dealer: FINN dealer ids (the companyId of a dealer row, the number in a dealer's FINN page address such as 706939412), each its own search per vehicle type (FINN's own dealer filter, the one behind "Se forhandlerens annonser"). Not together with plates or vins.

## `plates` (type: `array`):

Norwegian plates such as "BT27916" or "BT 27916" (one to three letters and one to five digits, sent in both forms FINN stores them, with or without the space), or a personalised plate of 2 to 8 letters and digits holding a digit: each looks for the FINN ad of that vehicle in each vehicle type (used cars when vehicleTypes is empty), up to 10 standard plates (each sent in both forms) or 20 personalised plates to one FINN search. A row is delivered only when the ad page itself shows the plate asked; each plate's result (found, not found) is on its search's free coverage row. At most 300 a run; not together with keywords or dealerIds.

## `vins` (type: `array`):

Vehicle identification numbers (11 to 17 letters and digits holding both): each looks for the FINN ad of that vehicle, as plates do, 20 VINs to one FINN search. A row is delivered only when the ad page itself shows the VIN asked; a VIN no ad carries is free (its search's coverage row says not found).

## `locations` (type: `array`):

Counties, municipalities or districts by FINN's Norwegian name ("Oslo", "Bergen", "Trøndelag") or FINN's value ("0.20061"). Several places are one search (any of them).

## `latitude` (type: `number`):

With longitude and radiusKm: search around a point in Norway (FINN's own map radius).

## `longitude` (type: `number`):

With latitude and radiusKm.

## `radiusKm` (type: `integer`):

With latitude and longitude: the distance in kilometres.

## `minPrice` (type: `integer`):

The lowest price in kroner (on leasing ads FINN's price is the monthly price), sent to FINN.

## `maxPrice` (type: `integer`):

The highest price in kroner, sent to FINN.

## `sellerType` (type: `string`):

Private sellers only, or dealers only (FINN's own seller filter of each vehicle type). A car a private person sells through a private sale service is a private seller's row here while FINN files it under dealers: Dealers only leaves it out (free), Private sellers only does not find it, Any seller delivers it.

## `postedToday` (type: `boolean`):

Only ads FINN marks as new ("Nye i dag", the last 24 hours).

## `smoothTradeOnly` (type: `boolean`):

Only ads with FINN's safe trade ("Smidig handel", "Smidig bilhandel", "Smidig MC-handel"), where the vehicle type offers it.

## `makes` (type: `array`):

"Tesla", "Volvo", "Yamaha", "Bavaria" and the other makes FINN lists for the vehicle type.

## `models` (type: `array`):

Cars only, with makes: models or series by FINN's name ("Model Y", "XC60", "Golf").

## `minYear` (type: `integer`):

Every vehicle type with a model year.

## `maxYear` (type: `integer`):

Every vehicle type with a model year.

## `minMileage` (type: `integer`):

Every vehicle type whose FINN search has a mileage filter (FINN's own list; a type without one refuses it free).

## `maxMileage` (type: `integer`):

As minMileage.

## `minPowerHp` (type: `integer`):

Every vehicle type whose FINN search has a power filter (FINN's own list; a type without one refuses it free).

## `maxPowerHp` (type: `integer`):

As minPowerHp.

## `minSeats` (type: `integer`):

Cars only.

## `maxSeats` (type: `integer`):

Cars only.

## `fuelTypes` (type: `array`):

"Bensin", "Diesel", "El", "Hybrid bensin", "Plug-in Bensin" and the other names FINN lists (cars, MC, scooters, boats).

## `transmissions` (type: `array`):

Cars and motorhomes: "Automat" or "Manuell".

## `bodyTypes` (type: `array`):

The body or type FINN lists for the vehicle type: "Stasjonsvogn", "SUV/Offroad", "Kombi 5-dørs" (cars); "Adventure", "Cruiser" (MC); "RIB", "Daycruiser" (boat classes); "Alkove" (motorhomes); farm tool and truck types.

## `wheelDrives` (type: `array`):

Cars and motorhomes: "Firehjulsdrift", "Forhjulsdrift", "Bakhjulsdrift".

## `colours` (type: `array`):

Cars only: "Svart", "Hvit", "Grå", "Blå" and the other names FINN lists.

## `salesForms` (type: `array`):

"Bruktbil til salgs", "Nybil til salgs", "Leasing", "Auksjon" (cars); "Brukt båt", "Ny båt", "Båt til leie", "Båt ønskes" (boats); "Til salgs", "Leies ut" (caravans, motorhomes); "Til salgs", "Til leie", "Ønskes kjøpt" (docks).

## `vansOnly` (type: `boolean`):

Cars only: vans (FINN's registration class "Varebil"). Not together with registrationClasses.

## `registrationClasses` (type: `array`):

Cars only: "Personbil", "Varebil", "Kombinertbil", "Minibuss", "Lett lastebil", "Annet".

## `equipment` (type: `array`):

Cars only: "Hengerfeste" (towbar), "Apple CarPlay", "Bluetooth", "Cruisekontroll", "Klimaanlegg", "Kupévarmer", "Motorvarmer", "Parkeringsensor bak", "Ryggekamera", "Skinn- og semiskinninteriør", "Soltak/glasstak". Several values: any of them.

## `warrantyTypes` (type: `array`):

Cars only: "Garanti" (warranty), "Bytterett" (right to exchange), "Programbil" (a maker's certified used car).

## `conditionDocuments` (type: `array`):

Cars only: "Service" (service history), "Testrapport" (test report), "Tilstandsrapport" (condition report).

## `wheelSets` (type: `array`):

Cars only: "Ett hjulsett" or "To eller flere hjulsett".

## `vehicleConditions` (type: `array`):

MC, caravans and motorhomes: "Ny MC" or "Brukt MC"; "Ny" or "Brukt".

## `vehicleLocations` (type: `array`):

Boats, caravans and motorhomes: "Norge" or "Utlandet".

## `minEngineCc` (type: `integer`):

MC, scooters, ATVs and snowmobiles: FINN's engine size in cubic centimetres.

## `maxEngineCc` (type: `integer`):

As minEngineCc.

## `minLengthFeet` (type: `integer`):

Boats: FINN's length in feet.

## `maxLengthFeet` (type: `integer`):

Boats.

## `minLengthCm` (type: `integer`):

Caravans and motorhomes: FINN's length in centimetres.

## `maxLengthCm` (type: `integer`):

Caravans and motorhomes.

## `minWidthCm` (type: `integer`):

Boats, docks and caravans: FINN's width in centimetres.

## `maxWidthCm` (type: `integer`):

Boats, docks and caravans.

## `minWeightKg` (type: `integer`):

Caravans, motorhomes and trucks: FINN's weight in kilograms (total weight on trucks).

## `maxWeightKg` (type: `integer`):

Caravans, motorhomes and trucks.

## `minTrailerWeightKg` (type: `integer`):

Cars only: the largest trailer weight in kilograms.

## `maxTrailerWeightKg` (type: `integer`):

Cars only.

## `minBoatEngineHp` (type: `integer`):

Boats: the power of the boat's engine.

## `maxBoatEngineHp` (type: `integer`):

Boats.

## `minTopSpeedKnots` (type: `integer`):

Boats.

## `maxTopSpeedKnots` (type: `integer`):

Boats.

## `berths` (type: `array`):

Boats, caravans and motorhomes: FINN's groups "1 - 2", "3 - 4", "5 - 6", "7 eller flere senger".

## `seatGroups` (type: `array`):

Boats and motorhomes: FINN's seat groups such as "4 - 6" or "10 eller flere seter".

## `boatEngineTypes` (type: `array`):

Boats: "Innenbords" (inboard), "Utenbords" (outboard), "Annet". (Boat engines for sale: use bodyTypes.)

## `boatEngineIncluded` (type: `array`):

Boats: FINN's values "Innenbords" (engine included) or "Nei" (none).

## `boatMaterials` (type: `array`):

Boats: "Glassfiber", "Aluminium", "Plast", "Tre", "Annet".

## `attributeFilters` (type: `object`):

Any other filter of the vehicle type's own FINN filter list, by FINN's name or Norwegian label, with values by label or value, or {"min": n, "max": n} for a range. For example {"truck_segment": \["Trekkvogn"], "engine_effect": {"min": 400}}. A filter the vehicle type does not offer is refused with the filters it does offer.

## `postedAfter` (type: `string`):

Only ads published on or after this day in Norway (YYYY-MM-DD), checked on every row.

## `postedWithinHours` (type: `integer`):

Only ads published within this many hours of the run's start, checked on every row.

## `includeKeywords` (type: `array`):

Words an ad must contain (its title, and its description when the ad page is read). Any one of them, or all with requireAllKeywords.

## `requireAllKeywords` (type: `boolean`):

With includeKeywords: every word must be in the ad.

## `excludeKeywords` (type: `array`):

Ads holding any of these words are left out, free.

## `titleOnly` (type: `boolean`):

includeKeywords and excludeKeywords look at the title only.

## `excludeAdIds` (type: `array`):

FINN codes (finnkode) or ad links never to deliver.

## `searchUrls` (type: `array`):

Search pages copied from FINN motor (https://www.finn.no/mobility/search/<type>?...), read with all their filters. FINN's sort order in a link is not sent (FINN asks robots not to); the link is read in FINN's default order, newest first.

## `adUrls` (type: `array`):

Vehicle ad links (https://www.finn.no/mobility/item/<FINN code>, or the older car, boat, MC and business vehicle ad links) or FINN codes (finnkode): each read with its ad page and billed as one Vehicle. A removed or unknown ad is a free row.

## `maxItems` (type: `integer`):

The most paid rows (vehicles) the run delivers, across all searches and links.

## `maxItemsPerSearch` (type: `integer`):

The most paid rows from one search or search link.

## `maxPagesPerSearch` (type: `integer`):

The most result pages read for one search (50 ads a page).

## `maxRowsPerSearch` (type: `integer`):

How many rows of each search are read at most, the rows left out by a filter included (no limit by default).

## `includeDetails` (type: `boolean`):

Read each ad's page: the full description, every key fact and all images, the equipment list, first registration, EU control dates, owners, warranty, whether the service plan was followed, condition report, declared damages, the price with and without the registration fee (and VAT on business vehicles), leasing terms, battery and range, weights, lengths and machine facts, FINN's loan example, and the dealer card (organisation number, address, phone, e-mail, website, opening hours, brands, memberships, years on FINN, ad count). Included in the Vehicle price, no extra event; it takes about a second per row.

## `includeSimilarVehicles` (type: `boolean`):

FINN's own list of up to 6 similar vehicles for each ad (FINN code, link, title, year and mileage text, price, image), read with the ad's vehicle type, every kind. Reads the ad page too (in the Vehicle price). One extra read per row; billed as one Similar vehicles list per row that carries one. An ad FINN lists none for: empty and free.

## `includePersonalData` (type: `boolean`):

Deliver the fields that name or reach a private person: a private seller's plate and VIN (in their fields, in the key facts and in the vehicle register and liens check links that carry the plate), FINN id, street and exact map point (off: the point is rounded to 2 decimals, about 1 km, when FINN gives it to the address), the seller's own links and ad references, contact persons' names, phones and e-mails on any ad, and the contacts found in the texts of private ads. Off: those fields are empty; a dealer's name, FINN id, organisation number, address, website and dealer card (with the phone and e-mail of the dealer's FINN profile) are business data and always delivered, while a contact block on a dealer's ad counts as a person unless it carries the dealer's own FINN name. Plate and VIN lookups work either way. You are responsible for a lawful use, GDPR included.

## `priceSummary` (type: `boolean`):

Each search's coverage row carries the count, lowest, quartiles, median, mean and highest price of the ads it met (free).

## `includeRawData` (type: `boolean`):

Add FINN's search row as served (a private seller's only with personal data on).

## `descriptionFormat` (type: `string`):

How the ad description is delivered.

## `descriptionMaxLength` (type: `integer`):

Cut descriptions to this many characters (descriptionCut marks the row).

## `outputFields` (type: `array`):

Keep only these row fields, by the names the rows carry ("adId", "url", "make", "model", "year", "mileage", "dealer", "similarVehicles"); the row's identity, title, price, place, status and image count, and the fields of every add-on that is billed, always stay. Not together with compactOutput.

## `compactOutput` (type: `boolean`):

Deliver only the most used fields (handy for AI agents).

## `excludeEmptyFields` (type: `boolean`):

Drop fields that are empty on a row.

## `extractContacts` (type: `boolean`):

Add the e-mail addresses, phone numbers, websites and social profiles written in the title and description (dealers' ads always; private ads with includePersonalData on).

## `phoneExtractionMode` (type: `string`):

With extractContacts.

## `failIfIncomplete` (type: `boolean`):

End the run as failed when a search or link could not be read in full (the rows delivered stay).

## `maxFailedRequestsPercent` (type: `integer`):

End the run as failed when more of its reads failed.

## `completenessTolerancePercent` (type: `number`):

Your own bar for a complete search: a search counts as complete when it met at least FINN's count of ads less this percent (and less the number of ads below). Empty: the fixed rule (98 percent of FINN's count less 2 ads on a split search, 99 percent less 2 on one search). Used by the coverage rows' complete and by Fail if incomplete; plate and VIN lookup searches keep their own rule (a lookup says not found only when its search was read to its end).

## `completenessToleranceAbsolute` (type: `integer`):

Your own bar for a complete search, in ads: a search counts as complete when it met at least FINN's count less this many ads (and less the percent above). Empty: the fixed rule.

## `proxyConfiguration` (type: `object`):

Leave as is: FINN motor is read through Apify's datacenter proxy, which every FINN motor door answers. Your own proxy links replace it.

## `requestsPerSecond` (type: `number`):

The pace of the run's one exit (0.2 to 2).

## `maxConcurrency` (type: `integer`):

At most this many requests in flight, inside the pace (FINN is never asked more than requestsPerSecond requests a second): ad pages and add-on pages are read on this many lanes.

## `maxRequestRetries` (type: `integer`):

Tries of a failed read after the first.

## Actor input object example

```json
{
  "vehicleTypes": [
    "car"
  ],
  "locations": [
    "Oslo"
  ],
  "sellerType": "any",
  "postedToday": false,
  "smoothTradeOnly": false,
  "vansOnly": false,
  "requireAllKeywords": false,
  "titleOnly": false,
  "maxItems": 20,
  "includeDetails": true,
  "includeSimilarVehicles": false,
  "includePersonalData": false,
  "priceSummary": true,
  "includeRawData": false,
  "descriptionFormat": "asServed",
  "compactOutput": false,
  "excludeEmptyFields": false,
  "extractContacts": false,
  "failIfIncomplete": false,
  "requestsPerSecond": 1,
  "maxConcurrency": 4,
  "maxRequestRetries": 2
}
```

# Actor output Schema

## `items` (type: `string`):

No description

## `report` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "vehicleTypes": [
        "car"
    ],
    "locations": [
        "Oslo"
    ],
    "maxItems": 20,
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/finn-motor-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "vehicleTypes": ["car"],
    "locations": ["Oslo"],
    "maxItems": 20,
    "includeDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/finn-motor-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "vehicleTypes": [
    "car"
  ],
  "locations": [
    "Oslo"
  ],
  "maxItems": 20,
  "includeDetails": true
}' |
apify call automation_craft/finn-motor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_craft/finn-motor-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8QrpV68aEQWZEfQT1/builds/kyfQQjCJEsXb7lDul/openapi.json
