FINN APIfinn.no ↗
Search and retrieve car, real estate, and second-hand listings from FINN.no via 5 structured endpoints. Get prices, locations, mileage, and more.
What is the FINN API?
The FINN.no API gives developers access to Norway's largest marketplace through 5 endpoints covering used cars, real estate, and second-hand goods (Torget). The search_cars endpoint returns structured vehicle data including make, model, year, mileage, and price, while get_listing_by_finnkode lets you fetch any individual listing by its unique FINN code regardless of category.
curl -X GET 'https://api.parse.bot/scraper/8e177814-56e1-4622-963b-991831796634/search_cars?page=1&rows=5&query=Tesla' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace finn-no-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.finn_no_scraper_api import Finn, VehicleListing, MarketplaceItem, VehicleCategory
finn = Finn()
# Search for Tesla cars
for car in finn.vehiclelistings.search(query="Tesla", limit=5):
print(car.heading, car.year, car.make, car.model)
print(car.price.amount, car.price.currency_code)
print(car.canonical_url)
# Search boats via category
for boat in finn.vehiclelistings.search_by_category(category=VehicleCategory.BOATS, limit=3):
print(boat.heading, boat.year, boat.location)
# Search marketplace for second-hand items
for item in finn.marketplaceitems.search(query="iphone 15", limit=3):
print(item.heading, item.brand, item.trade_type)
print(item.price.amount, item.price.currency_code)
# Search real estate
for prop in finn.propertylistings.search(query="Oslo", limit=3):
print(prop.heading, prop.area, prop.location)
# Get a specific listing's details
detail = finn.listingdetails.get(finnkode="466534318")
print(detail.id, detail.url, detail.source, detail.title)
Search for used and new car listings on FINN.no. Returns paginated results with vehicle metadata including make, model, mileage, price, year, and location. Without a query, returns all available car listings sorted by publication date.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed) |
| rows | integer | Number of results per page |
| query | string | Search keyword (e.g. 'Tesla', 'BMW X5') |
{
"type": "object",
"fields": {
"docs": "array of car listing objects with id, heading, location, price, year, mileage, make, model, canonical_url",
"filters": "array of available filter objects for refining results",
"metadata": "object with result_size, paging, sort, title"
},
"sample": {
"data": {
"docs": [
{
"id": "466534318",
"fuel": "El",
"make": "Tesla",
"type": "motor",
"year": 2023,
"model": "Model Y",
"price": {
"amount": 369900,
"price_unit": "kr",
"currency_code": "NOK"
},
"heading": "Tesla Model Y",
"mileage": 68500,
"location": "Rådal",
"transmission": "Automat",
"canonical_url": "https://www.finn.no/mobility/item/466534318"
}
],
"filters": [],
"metadata": {
"paging": {
"last": 50,
"param": "page",
"current": 1
},
"result_size": {
"group_count": 1824,
"match_count": 1824
}
}
},
"status": "success"
}
}About the FINN API
Vehicle and Mobility Search
The search_cars endpoint accepts optional query, page, and rows parameters and returns paginated listing objects with fields such as heading, make, model, year, mileage, price, location, and canonical_url. A filters array and a metadata object containing result_size and paging details accompany every response. For other mobility categories — boats, motorcycles, campervans, caravans, and commercial vehicles — the search_generic endpoint takes a required category parameter and returns similarly structured results with fields that vary by vehicle type.
Real Estate and Second-Hand Marketplace
The search_real_estate endpoint searches property-for-sale listings and returns objects with id, heading, prices, location, area, and image_url, plus a metadata object with a total_results count. Note that this endpoint does not support a rows parameter — only page and query. The search_torget endpoint covers the general second-hand marketplace and requires a query string; results include heading, price, location, brand, trade_type, image, and canonical_url, along with filters and full metadata.
Fetching Individual Listings
The get_listing_by_finnkode endpoint accepts any numeric FINN code and returns structured data for mobility listings (source: 'search_api') or a title plus advertising_metadata object for other listing types (source: 'html'). The source field in the response tells you which data shape to expect, so you can branch logic accordingly. This makes it useful for resolving listing URLs discovered in search results to their full detail records.
The FINN API is a managed, monitored endpoint for finn.no — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when finn.no changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official finn.no API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate Norwegian used-car inventory by querying
search_carswith make or model keywords and tracking price and mileage trends over time. - Build a real estate price monitor for specific Oslo neighbourhoods using
search_real_estatewith location-based queries and thepricesfield. - Resolve FINN codes collected from external sources into full listing details using
get_listing_by_finnkodeto populate a product database. - Compare second-hand electronics prices on Torget using
search_torgetwith product-name queries and thebrandandpriceresponse fields. - Track boat or campervan availability across Norway by polling
search_genericwith the appropriatecategoryand filtering bylocation. - Identify listing freshness and volume in a vehicle category by inspecting the
metadata.result_sizeandmetadata.sortfields returned bysearch_generic.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does FINN.no have an official developer API?+
What does `get_listing_by_finnkode` return for a non-vehicle listing, such as a job posting or rental?+
source: 'html' along with a title string and an advertising_metadata object. The structured data object present for mobility listings is not included in this case. The source field indicates which shape to expect.Does `search_real_estate` cover rental listings in addition to properties for sale?+
search_real_estate covers property-for-sale listings. Rental listings are not exposed through this endpoint. You can fork the API on Parse and revise it to add a rental-focused search endpoint.Are job listings on FINN.no accessible through this API?+
How does pagination work across the search endpoints?+
page parameter (1-indexed). search_cars and search_generic also accept a rows parameter to control results per page. The metadata object in each response includes result_size and paging details so you can calculate total pages and iterate through them.