K-Ruoka Scraper — Finnish Grocery Products & Prices
Pricing
from $1.20 / 1,000 result scrapeds
K-Ruoka Scraper — Finnish Grocery Products & Prices
Scrape products, prices, and availability from K-Ruoka.fi (Kesko's Finnish grocery chain). Returns EAN, brand, category, and per-unit pricing. No login required.
Pricing
from $1.20 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
K-Ruoka Scraper
Scrape grocery products, prices, and stock status from K-Ruoka.fi — the online storefront for Kesko's K-Citymarket, K-Supermarket, K-Market, and Neste K chains, one of Finland's two largest grocery groups alongside S-Group (Prisma). Returns EAN codes, brand, category breadcrumb, and per-unit pricing for each product a search query matches.
Input
| Field | Type | Description |
|---|---|---|
searchQuery | string | Finnish search term (default: "kahvi" for coffee) |
maxResults | integer | Limit, capped at 100 (default: 100) — see Limitations |
sbrWsCdp | string | Bright Data Scraping Browser CDP endpoint. Optional — the actor ships with one preconfigured |
proxyConfiguration | object | Unused (kept for platform convention) — see Anti-bot handling |
Output
| Field | Type | Example |
|---|---|---|
name | string | "Pirkka Costa Rica kahvi 500g vaalea paahto" |
brand | string | "Pirkka" |
price | number | null | 5.99 |
currency | string | "EUR" |
originalPrice | number | 6.79 (only present during an active promotion) |
pricePerUnit | string | "11.98 €/kg" |
discount | string | "−11 %" |
ean | string | "6410405181190" |
sku | string | Kesko internal PIM code |
productId | string | Site product ID (matches EAN) |
inStock | boolean | null | true — null when the store doesn't publish availability for this item, never assumed false |
imageUrl | string | Product image URL |
category | string | "Juomat > Kahvi ja suodatinpussit > Jauhettu kahvi vaalea" |
url | string | Full product page URL |
searchQuery | string | Input echo |
searchStoreId | string | Kesko store the price/availability is scoped to (site-determined default, see below) |
scrapedAt | string | ISO 8601 timestamp |
Anti-bot handling
K-Ruoka.fi runs Cloudflare Bot Management on every route, including the
sitemap. Plain HTTP requests and headless-Chromium navigations both get a
hard 403 "Pyyntö estetty" (Request blocked) page — confirmed live, this isn't
a solvable interactive challenge. Bright Data Web Unlocker also fails on this
domain: its expect_element heuristic waits for a .nav-button selector that
never appears and times out after 30 seconds on every attempt, homepage and
API alike.
The only working route is a real, fully-rendered browser session — this
actor connects to a Bright Data Scraping Browser over CDP, navigates the
search page, and reads the JSON response the page's own client code requests
from K-Ruoka's /kr-api/v2/product-search/ endpoint. No DOM scraping is
involved: the JSON already carries EAN, brand, category, per-unit pricing,
and the image URL. A programmatic fetch() injected into the same page
against that endpoint gets a 404 (the site appears to fingerprint request
origin beyond headers alone), so the actor only reads the network response
the page generates on real navigation — block detection is content-based
(checking the rendered page title/body for "estetty"/"blocked"), not just
the HTTP status code, since Cloudflare's deny page itself returns as a
normal-looking response from the browser's point of view.
Limitations
- Up to ~100 results per search query. K-Ruoka's search API returns a single batch of up to 100 products per query and no further pagination (infinite scroll, a "show more" click, and offset-based navigation were all tested — none returned additional results). Run the actor again with a different search term for broader catalogue coverage.
- Store-scoped pricing. K-Ruoka prices and stock are set per physical
store. The site resolves a default store automatically (Bright Data's
Finnish exit currently resolves to store
N106, K-Citymarket Iso Omena) — this isn't user-selectable input today, but every record carriessearchStoreIdso you know which store's pricing you're looking at. - Per-result cost: this actor uses a Bright Data Scraping Browser session (one browser page load per search query, not per product), so cost is dominated by the flat per-run Scraping Browser session rather than scaling per item — see Cost estimate.
- Usage cost for a run only settles once the run reaches SUCCEEDED — a run that fails partway through is not billed for completed items.
How to use K-Ruoka Scraper
- Open the Input tab and enter a Finnish search term (e.g.
maito,leipä,jauheliha) - Adjust
maxResultsif you want fewer than the default 100 - Click Start and wait for the run to complete (typically under a minute)
- Download results from the Output tab in JSON, CSV, Excel, XML, or HTML
- Schedule recurring runs from the Schedule tab for ongoing price tracking
How to scrape K-Ruoka data
This actor automates extracting structured product data from K-Ruoka.fi. Run it directly from the Apify Console, the Apify API, or any of the official SDKs (JavaScript, Python). It handles the Cloudflare bypass, network interception, and retries — you get clean JSON, not raw HTML to parse.
Typical workflows:
- One-off export: enter a search term, set
maxResults, and run - Scheduled monitoring: set a daily cron in the Schedule tab to track K-Ruoka prices and promotions over time
- Programmatic integration: trigger runs from your backend via the Apify API and pull the dataset when finished
- Webhook automation: receive a callback the moment a run completes and pipe results into Zapier, Make, n8n, BigQuery, or Google Sheets
- Cross-retailer comparison: pair with Prisma Scraper to compare K-Ruoka (Kesko) against Prisma (S-Group) — Finland's two largest grocery chains
Why use K-Ruoka Scraper
- Price monitoring — track K-Ruoka prices, promotions, and stock at scale
- Competitive intelligence — benchmark your catalogue against Kesko's pricing and assortment
- Market research — analyze category trends and promotional patterns in the Finnish grocery market
- Data feeds — build product datasets for affiliate sites, price comparison tools, or price-tracking apps
- No login required — public search data, no account or cookies needed
Cost estimate
Pricing on the Apify platform is usage-based — you pay for what you actually run. As a rough guide:
- A single search (up to 100 products): a few cents
- 10 searches (up to ~1,000 products): typically under $1 USD
Cost is dominated by the Bright Data Scraping Browser session needed to pass
Cloudflare, not by result count — running more searches per call (higher
maxResults within the 100 cap) is more cost-efficient than many small runs.
Tips for best results
- Use specific Finnish terms — generic English queries return few or no matches; try the Finnish product/category name
- Start small — run with
maxResults: 10to verify your search term before scaling up - Combine multiple searches — since each run covers one query, chain several search terms in a Task or via the API for broader catalogue coverage
- Schedule runs — daily or weekly runs are usually enough for price monitoring on a fixed product list
FAQ and support
Is it legal to scrape K-Ruoka? This actor extracts publicly available product data. Always review the website's Terms of Service before scraping at scale, and respect rate limits.
Why am I getting fewer than 100 results? The search term may simply have
fewer matching products — check totalHits isn't the bottleneck by trying a
broader term.
Can I pick a specific store? Not directly today — the site resolves a
default store server-side. Every record includes searchStoreId so you can
see which store's pricing was returned.
The actor fails immediately. This almost always means the preconfigured
Bright Data Scraping Browser endpoint is temporarily unavailable — retry the
run, or supply your own sbrWsCdp endpoint in the input.
For issues, feature requests, or bug reports, open a ticket in the Issues tab on the actor page. We monitor every actor and ship fixes quickly when sites change.