# Coop Sverige Scraper — Swedish Supermarket Prices (`studio-amba/coop-se-scraper`) Actor

Scrape products, prices, unit prices, brands, EANs, categories and promotions from coop.se — Coop Sverige, Sweden's #2 supermarket chain. Search by keyword. No login or cookies required.

- **URL**: https://apify.com/studio-amba/coop-se-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Coop Sverige Scraper — Swedish Supermarket Products & Prices

Scrape products, prices, unit prices, brands, EANs, categories and promotions
from [coop.se](https://www.coop.se), Coop Sverige — Sweden's #2 supermarket
chain. Search by keyword and get clean, structured product data back as JSON,
CSV, or Excel.

No login. No cookies. No browser automation on your side — you give the actor
a search term, it returns the matching products with live prices.

### What this actor does

Coop Sverige runs one of Sweden's largest grocery networks (Coop, Stora Coop,
Coop Konsum, Coop X:tra). Its online store's own search box calls a public
JSON API behind the scenes, and this actor calls the same API directly and
returns one row per product.

For each product you get:

- **name** — the product name in Swedish
- **brand** — manufacturer / brand (e.g. Arla, Coop, Löfbergs)
- **productId** — Coop's internal article id
- **ean** — EAN/GTIN barcode
- **price** — current consumer price
- **currency** — always `SEK`
- **pricePerUnit** — comparison price (e.g. price per litre / kilo)
- **unit** — pack / size description (e.g. `1.5 l`, `500 g`)
- **promotion** — the offer text when a product is on offer (e.g. `2 för 37 kr`)
- **vatRate** — VAT percentage
- **category** — most specific (leaf) category
- **categories** — full category breadcrumb, root to leaf
- **countryOfOrigin** — country of origin, when declared
- **productDescription** — description or ingredient list
- **url** — direct link to the product page
- **imageUrl** — product image
- **inStock** — whether the product is available for online purchase
- **scrapedAt** — ISO timestamp of the scrape

### How to scrape Coop Sverige data

1. Set **Search Query** to a Swedish keyword — for example `mjölk` (milk),
   `kaffe` (coffee), `bröd` (bread), `pasta`, or `ost` (cheese). Leave it empty
   and the actor falls back to a sensible default so you still get results.
2. Set **Max Results** to how many products you want back (default 20).
3. Leave **Store ID** on the default unless you need a specific store's
   prices. Prices and assortment vary a little by store. The default
   (`251300`) returns the general online assortment and works for most use
   cases.
4. Leave **Proxy Configuration** on the default Apify proxy. The product API
   has no anti-bot wall and no geo lock, so proxy is used only for IP
   rotation and rate-limit resilience.
5. Click **Start** and collect the dataset when the run finishes.

#### How the data is fetched

coop.se itself sits behind Cloudflare and runs as an EPiServer site, but the
search box on every page calls a separate JSON API directly, with no
challenge in front of it:

```
POST https://external.api.coop.se/personalization/search/global
     ?api-version=v1&store={storeId}&groups=CUSTOMER_PRIVATE&device=desktop&direct=false
Header: Ocp-Apim-Subscription-Key: <public key>
Body:   { "query": "kaffe", "resultsOptions": { "skip": 0, "take": 100 } }
```

The subscription key is not a secret — coop.se ships it in cleartext inside
its own page HTML on every page load, the same pattern used by other
Azure-APIM-fronted sites in this fleet. The search response already returns
fully decorated products (name, price, brand, EAN, category, image and more)
in one call — no second lookup needed. The actor pages through results with
`skip`/`take` until it reaches your `maxResults` or the site's real result
count, whichever comes first.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `searchQuery` | string | Swedish keyword to search for. Defaults to `mjölk`. |
| `maxResults` | integer | Max number of products to return (1–5000). |
| `storeId` | string | Coop online store id. Default `251300`. |
| `proxyConfiguration` | object | Proxy settings. Default Apify proxy is fine. |

#### Example input

```json
{
  "searchQuery": "kaffe",
  "maxResults": 50,
  "storeId": "251300",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

### Output

Each dataset item looks like this:

```json
{
  "name": "Mellanmjölk Längre Hållbarhet",
  "brand": "Coop",
  "productId": "7300156573186",
  "ean": "7300156573186",
  "price": 16.27,
  "currency": "SEK",
  "pricePerUnit": "10.85 kr/lit",
  "unit": "1.5 l",
  "promotion": null,
  "vatRate": 6,
  "category": "Mellanmjölk",
  "categories": ["Mejeri & Ägg", "Mjölk", "Mellanmjölk"],
  "countryOfOrigin": "Sverige",
  "productDescription": "INGREDIENSER: Högpastöriserad MJÖLK (Sverige), vitamin D.",
  "url": "https://www.coop.se/redirect/ecommerce/product/7300156573186",
  "imageUrl": "https://res.cloudinary.com/coopsverige/image/upload/v1780931497/cloud/700440.tiff",
  "inStock": true,
  "scrapedAt": "2026-09-12T19:41:17.098Z"
}
```

You can export the dataset as JSON, CSV, Excel, or XML, or pull it through the
Apify API.

### Common use cases

- **Price monitoring** — track Coop shelf prices for a basket of products
  over time and compare against other Swedish grocers (ICA, Willys).
- **Promotion tracking** — spot when products go on offer (`promotion`).
- **Assortment research** — see which brands, sizes and categories Coop
  stocks.
- **Market analysis** — feed structured Swedish grocery data into pricing
  models.

### How much does it cost?

This actor is billed $0.02 per run plus $0.002 per result:

- **100 products**: ~$0.22
- **1,000 products**: ~$2.02

Your run's usage cost only settles after the run reports SUCCEEDED — reading
a mid-run dataset understates the eventual cost.

### Notes and limits

- Prices reflect the selected store and the moment of the scrape.
- Coop promotions observed live are multi-buy offers (e.g. `2 för 37 kr`),
  so the `promotion` field carries the offer text rather than a computed
  single-unit discounted price.
- `inStock` is `null` (not `false`) on the rare item where the site does not
  report online availability — never treat a missing value as "out of
  stock".
- The actor fails fast with a clear error if it gets zero products, so a
  successful run always means real data.

### FAQ

#### Do I need a Coop account or cookies?

No. The actor calls the same public search API the site's own search box
uses. No login, no cookies.

#### Do I need Swedish proxies?

No. The product API has no geo lock and is reachable from any IP. The
default Apify proxy is used for IP rotation only.

#### Can I scrape a whole category?

Yes — search for a broad term and raise `maxResults`. The actor pages
through the search results until it reaches your limit or the real result
count for that query.

#### How is this different from the other Coop scrapers in this catalog?

Coop Sverige (coop.se) is a separate company from Coop Danmark, Coop
Switzerland and the UK's Central England Co-operative ("Coop" in the UK) —
different national retailers that happen to share the Coop brand and
co-operative structure. This actor is for the Swedish site only.

### Related Scrapers

- [ICA Scraper](https://apify.com/studio-amba/ica-scraper) — Sweden's #1
  supermarket chain
- [Willys Scraper](https://apify.com/studio-amba/willys-scraper) — Swedish
  discount supermarket chain
- [Coop Denmark Scraper](https://apify.com/studio-amba/coop-scraper) — Coop's
  Danish chains (Kvickly, SuperBrugsen, Brugsen, 365discount)
- [Coop Switzerland Scraper](https://apify.com/studio-amba/coop-ch-scraper) —
  Switzerland's Coop chain

### Maintained by Studio Amba

We run 700+ scrapers for European websites, and the priority is keeping
every one of them working. Automated runs test this actor against the live
site and verify the output is complete. When the website changes, the
scraper usually gets repaired the same day, without you having to report
anything. Questions and issues go straight to the people who built it, and
most get an answer the same day.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for products by name or keyword in Swedish (e.g., 'mjölk', 'kaffe', 'bröd', 'pasta', 'ost'). Leave empty to scrape a sample of products from the catalog.

## `maxResults` (type: `integer`):

Maximum number of products to return.

## `storeId` (type: `string`):

Coop online store id used to resolve regional assortment and prices. Prices and stock can vary by store. The default (251300) works for most use cases. Leave as-is unless you need another store's prices.

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

Proxy settings for IP rotation and rate-limit resilience. The default Apify proxy works fine — the Coop Sverige product API has no anti-bot wall and no geo lock.

## Actor input object example

```json
{
  "searchQuery": "mjölk",
  "maxResults": 20,
  "storeId": "251300",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "mjölk",
    "maxResults": 20,
    "storeId": "251300",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/coop-se-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 = {
    "searchQuery": "mjölk",
    "maxResults": 20,
    "storeId": "251300",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/coop-se-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 '{
  "searchQuery": "mjölk",
  "maxResults": 20,
  "storeId": "251300",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/coop-se-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/coop-se-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/kJQoNlaq0ffoqWU6w/builds/HpIVvTDQjedOmTioe/openapi.json
