FINN.no Listings Scraper
Pricing
from $1.20 / 1,000 item extracteds
FINN.no Listings Scraper
Search public FINN.no property, jobs, mobility, and Torget listings and export normalized records with category-specific market fields.
Pricing
from $1.20 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Search public FINN.no listings across property, jobs, mobility, and Torget in one run.
The Actor exports normalized listing IDs, titles, URLs, locations, prices, timestamps, seller or employer context, images, and category-specific public fields.
Use it for recurring Norwegian market monitoring, one-time analysis, spreadsheet exports, and data-pipeline inputs.
No login, browser, or proxy is required for the supported public search pages.
What does FINN.no Listings Scraper do?
The Actor accepts either:
- a keyword plus one or more FINN.no categories; or
- FINN.no search URLs containing filters you selected on the website.
It requests public search-result pages, follows numbered pagination, removes duplicate ads, normalizes each category into one stable dataset contract, and stops at your limit.
A cross-category run divides its result allowance across the selected searches so one busy category does not crowd out every other category.
The default dataset remains easy to load into Google Sheets, Excel, BigQuery, PostgreSQL, a BI tool, or another Actor.
Which FINN.no categories are supported?
| Input category | Public FINN.no surface | Useful category fields |
|---|---|---|
property | Homes, lettings, new-build, leisure, and plot search URLs | asking price, total price, area, bedrooms, property type, ownership type, agent, viewing |
jobs | Job search | job title, employer, location, publication time, deadline, number of positions, coordinates |
mobility | Car and other mobility search URLs | make, model, year, mileage, fuel, transmission, registration number, dealer type |
torget | Torget / recommerce search | price, location, seller labels, brand, trade type, shipping signal |
The built-in mobility search starts with cars.
Supply a FINN.no mobility search URL to use another supported mobility subcategory or detailed website filters.
Who is it for?
Market analysts
Build recurring snapshots of asking prices, listing counts, locations, and inventory mix in Norway.
Recruiters and labor-market teams
Track public vacancies by keyword and retain stable ad IDs for change detection.
Vehicle dealers and pricing teams
Export current vehicle inventory with normalized price, make, model, year, mileage, and seller classification.
Recommerce teams
Monitor public Torget inventory, price points, brands, and shipping availability.
Data engineers
Feed one consistent cross-category schema into scheduled ETL and warehouse jobs.
Why use a normalized multi-category dataset?
FINN.no categories expose different fields, but monitoring workflows usually need the same core identity and provenance columns.
Every row includes:
listingId;category;title;- canonical
url; location;priceNokandpriceCurrencywhen available;sellerOrEmployerwhen available;sourceSearchUrl;scrapedAt.
Category-only columns remain null outside their category.
That makes appends and comparisons predictable without pretending that a job has a vehicle mileage or that a Torget item has bedrooms.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
categories | array | all four | Categories used when startUrls is empty |
query | string | empty | Keyword applied to each selected category |
startUrls | array | empty | Public FINN.no search URLs; takes precedence over category and query |
maxItems | integer | 20 | Maximum unique rows across the run, from 1 to 10,000 |
maxPagesPerSearch | integer | 20 | Per-search pagination safety limit, from 1 to 200 |
requestDelayMillis | integer | 150 | Delay between search pages, from 0 to 10,000 ms |
Only HTTPS URLs on www.finn.no or finn.no are accepted.
A supplied URL must be a supported property, jobs, mobility, or Torget search page.
Detail-page and arbitrary external URLs are rejected rather than interpreted ambiguously.
Get started
- Open the Actor input page.
- Select one or more categories.
- Enter a keyword such as
Oslo,sykepleier,Tesla, orsofa. - Keep
maxItemssmall for your first run. - Click Start.
- Open Dataset to inspect the normalized rows.
- Export JSON, CSV, Excel, XML, or RSS from the dataset controls.
- Schedule the same input when you need recurring snapshots.
For exact website filters, configure a search on FINN.no, copy its search URL, and paste it into startUrls.
Example inputs
Search public nursing vacancies:
{"categories": ["jobs"],"query": "sykepleier","maxItems": 10,"maxPagesPerSearch": 2}
Extract a filtered car search:
{"startUrls": [{ "url": "https://www.finn.no/mobility/search/car?sort=PUBLISHED_DESC" }],"maxItems": 25}
Create an evenly represented Oslo snapshot:
{"categories": ["property", "jobs", "mobility", "torget"],"query": "Oslo","maxItems": 100}
Output example
This anonymized example uses the real output shape produced by the current mobility parser:
{"listingId": "123456789","category": "mobility","title": "Example electric vehicle","url": "https://www.finn.no/mobility/item/123456789","location": "Oslo","priceNok": 349000,"priceCurrency": "NOK","publishedAt": "2025-01-15T12:00:00.000Z","sellerOrEmployer": "Example dealer AS","imageUrls": [],"labels": [],"latitude": 59.91,"longitude": 10.75,"propertyType": null,"ownershipType": null,"areaSqm": null,"bedrooms": null,"totalPriceNok": null,"monthlyCostNok": null,"viewing": null,"jobTitle": null,"applicationDeadline": null,"positions": null,"make": "Example make","model": "Example model","year": 2022,"mileageKm": 45000,"fuel": "Elektrisitet","transmission": "Automat","registrationNumber": "AB12345","sellerType": "Forhandler","brand": null,"tradeType": null,"shippingAvailable": null,"sourceSearchUrl": "https://www.finn.no/mobility/search/car","scrapedAt": "2025-01-15T12:00:01.000Z"}
Null values mean FINN.no did not expose that field for the listing or the field belongs to another category.
How much does it cost to extract FINN.no listings?
The Actor uses pay-per-event pricing:
- Actor start: $0.00005 once per run.
- Listing: one event for each unique row saved.
- Filtered, duplicate, malformed, and failed records are not charged as listings.
The per-listing price depends on your Apify pricing tier.
| Tier | Price per listing |
|---|---|
| FREE | $0.00230 |
| BRONZE | $0.00200 |
| SILVER | $0.00156 |
| GOLD | $0.00120 |
| PLATINUM | $0.00120 |
| DIAMOND | $0.00120 |
At the FREE tier, 10 saved listings cost about $0.02305, and 100 cost about $0.23005, including the start event.
At BRONZE, 10 saved listings cost about $0.02005, and 100 cost about $0.20005.
The input limit is the clearest way to control spend.
Recurring monitoring workflow
The Actor outputs a stable category plus listingId key and a fresh scrapedAt timestamp.
A practical scheduled workflow is:
- Run the same category, query, or filtered URL daily.
- Append the dataset to durable storage.
- Join rows on
categoryandlistingId. - Flag IDs that appear for the first time.
- Compare price, title, labels, location, or category fields with the prior snapshot.
- Notify your team through a webhook, Slack automation, email service, or another Actor.
The Actor returns snapshots; it does not itself retain history, compute diffs, or send alerts.
Export and integration patterns
Spreadsheet review
Download CSV or Excel from the Dataset tab and filter by category, location, price, employer, or vehicle attributes.
Warehouse ingestion
Use the dataset API with clean=true and map nullable category fields into a wide table or category-specific views.
Webhooks
Attach an Apify run webhook to trigger downstream processing after a successful scheduled run.
Actor-to-Actor workflows
Call this Actor from a monitoring, enrichment, or notification Actor and pass the dataset ID to the next step.
Run with the Apify API using cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~finn-no-multi-category-listings/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"categories": ["jobs"],"query": "sykepleier","maxItems": 10}'
Never commit your Apify token to source control.
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/finn-no-multi-category-listings').call({categories: ['property', 'jobs', 'mobility', 'torget'],query: 'Oslo',maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Run with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/finn-no-multi-category-listings").call(run_input={"categories": ["mobility"],"query": "Tesla","maxItems": 25,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use through MCP
Claude Code setup
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/finn-no-multi-category-listings"
Claude Desktop setup
Claude Desktop can use this MCP configuration.
Cursor setup
Cursor accepts the same remote MCP server JSON.
VS Code setup
VS Code MCP extensions can use the same server URL and configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/finn-no-multi-category-listings"}}}
Example prompts:
- “Search FINN.no jobs for sykepleier and return 25 vacancies.”
- “Export the newest 20 cars from this FINN.no search URL.”
- “Create a 40-row Oslo snapshot across property, jobs, mobility, and Torget.”
Reliability and polite use
The implementation requests server-rendered search pages and embedded public application state.
It does not load listing images, execute a browser, or fetch every detail page.
Transient network errors, rate limits, and temporary server errors receive up to two bounded retries.
Stable client errors are not retried blindly.
The default delay reduces request pressure between pages.
Lower concurrency and smaller scheduled runs are safer than a single very large burst.
Limits and failure behavior
- FINN.no can change its public HTML or embedded application data.
- Search-result fields can be less complete than a listing detail page.
- The Actor does not reveal logged-in, private, hidden, or paid contact information.
- It does not bypass access controls or CAPTCHA challenges.
maxItemsapplies across the whole run.- Multi-search runs split the allowance approximately evenly across searches.
- Results depend on inventory available when the run starts.
- A recognizable no-result search completes with zero rows.
- An unsupported URL, malformed limit, HTTP failure, or unrecognizable page shape fails the run with a diagnostic log.
Troubleshooting
Why did my run return fewer rows than maxItems?
The source may have fewer matching ads, a selected category may be sparse, the per-search page limit may have been reached, or duplicates may have been removed.
Why are some fields null?
The field may not apply to that category or FINN.no may not expose it on the public search card.
Why was my URL rejected?
Use a public FINN.no search URL, not a detail ad, account page, short link, or external website.
How do I preserve detailed filters?
Set filters on FINN.no and copy the resulting search URL into startUrls.
What should I do after a source-format failure?
Inspect the run log and retry later only if FINN.no had a temporary outage. Repeated “unrecognizable search data” errors usually require an Actor update rather than repeated runs.
Responsible and legal use
This Actor extracts information displayed on public FINN.no search pages.
You are responsible for complying with FINN.no terms, robots guidance, applicable privacy and database laws, and your contractual obligations.
Collect only what you need.
Avoid using listing data for harassment, discrimination, unwanted contact, or decisions that require human review.
Do not attempt to access private accounts, hidden contact details, or restricted pages through this Actor.
When processing personal data, establish a lawful basis, apply retention limits, honor data-subject rights, and secure your exports.
This documentation is operational guidance, not legal advice.
Related Automation Lab Actors
This Actor is intentionally standalone in the current public portfolio because the earlier category-specific FINN.no Actors are not public Store products.
Choose it when one normalized run across several FINN.no categories is the main requirement.
Future public category-specific Actors may be linked here only after their Store availability is verified.
FAQ
Does it require a FINN.no account?
No. It supports public search pages only.
Does it require an Apify proxy?
No. The current implementation uses direct HTTP requests and exposes no automatic proxy fallback.
Can I search several categories at once?
Yes. Select any combination of property, jobs, mobility, and Torget.
Can I use exact FINN.no filters?
Yes. Pass one or more filtered search URLs in startUrls.
Does it scrape full descriptions and phone numbers?
No. This release intentionally uses search-page data and public seller or employer context. It does not fan out to every detail page.
Can I detect new or changed listings?
Yes, downstream. Schedule repeat runs and compare rows by category plus listingId. The Actor does not store history itself.
Are duplicate listings charged twice?
No. Duplicate category-and-ID pairs are discarded within the run before the listing event is charged.