# Elgiganten Products Scraper 🛒 (`shahidirfan/elgiganten-products-scraper`) Actor

Scrape Elgiganten products and extract prices, brands, categories, specifications, ratings, reviews, images, availability, discounts, and product URLs. Ideal for electronics price monitoring, competitor analysis, e-commerce research, market intelligence, and AI datasets.

- **URL**: https://apify.com/shahidirfan/elgiganten-products-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

### What does Elgiganten Product Listing Scraper do?

Elgiganten Product Listing Scraper collects structured product listing data from Elgiganten.se search results. Enter a keyword or a search URL, choose how many records you need, and receive a clean dataset with product names, prices, stock signals, categories, ratings, and product URLs.

The Actor is built for price monitoring, catalog enrichment, assortment research, and market analysis across the Swedish electronics market. Results are saved in batches as they are collected, so you can download the dataset while a larger run is still in progress.

### Why use Elgiganten Product Listing Scraper?

- **Ready-to-use product data** - Collect names, prices, VAT prices, stock signals, categories, ratings, and seller information in one run.
- **Keyword or URL input** - Start from a simple keyword such as `mobile` or from a filtered Elgiganten search URL.
- **Pagination built in** - The Actor follows the listing pages until your result limit or page limit is reached.
- **Clean output** - Empty fields are removed, category paths are flattened, and optional raw records are available when you need more detail.
- **Automatic recovery** - Refreshes its search configuration during a run and keeps already-collected results if a later page fails.
- **Automation ready** - Schedule repeat runs, export to CSV or Excel, or send results to your own systems through the Apify API.

### What data can you extract from Elgiganten?

| Field                  | Description                                                       |
| ---------------------- | ----------------------------------------------------------------- |
| `title`                | Product name as shown in the listing                              |
| `productId`            | Elgiganten article number                                         |
| `sku`                  | Article number, useful for matching and deduplication             |
| `url`                  | Direct product page URL                                           |
| `brand`                | Product brand                                                     |
| `sellerName`           | Seller or marketplace merchant                                    |
| `priceCurrent`         | Current price including VAT                                       |
| `priceCurrentExVat`    | Current price excluding VAT                                       |
| `priceBefore`          | Previous price when a discount is active                          |
| `priceDiscountAmount`  | Discount amount when published                                    |
| `priceCurrency`        | Currency code, normally `SEK`                                     |
| `ratingScore`          | Average product rating when available                             |
| `ratingCount`          | Number of product ratings when available                          |
| `onlineStockInStock`   | Online stock availability flag                                    |
| `onlineStockLevel`     | Online stock level text such as `50+`                             |
| `storesWithStockCount` | Number of physical stores with stock                              |
| `taxonomy`             | Clean category names in path order                                |
| `categoryPath`         | Human-readable category path joined with `>`                      |
| `leafCategory`         | Lowest-level category name                                        |
| `bulletPoints`         | Product selling points                                            |
| `imageUrl`             | Product image URL                                                 |
| `shortDescription`     | Short product description when available                          |
| `gtin`                 | GTIN or EAN when published                                        |
| `releaseDate`          | Product release date when available                               |
| `isBuyableOnline`      | Whether the product can be bought online                          |
| `isBuyableInStore`     | Whether the product can be bought in a store                      |
| `isMarketplaceProduct` | Whether the seller is a marketplace partner                       |
| `apiRecord`            | Optional cleaned source record when `includeRawRecord` is enabled |

### How to use Elgiganten Product Listing Scraper

1. Open the Actor on Apify Store.
2. Enter a keyword such as `iphone` or paste an Elgiganten search URL.
3. Set `results_wanted` and, optionally, `max_pages`.
4. Run the Actor.
5. Download the dataset as JSON, CSV, or Excel, or connect it to your workflow.

### Input Parameters

| Parameter            | Type    | Required | Default  | Description                                            |
| -------------------- | ------- | -------- | -------- | ------------------------------------------------------ |
| `keyword`            | String  | No       | `mobile` | Search keyword used when no search URL is supplied     |
| `startUrl`           | String  | No       | -        | Elgiganten search URL. Takes precedence over `keyword` |
| `results_wanted`     | Integer | No       | `20`     | Maximum number of product records to collect           |
| `max_pages`          | Integer | No       | `10`     | Maximum number of listing pages to request             |
| `includeRawRecord`   | Boolean | No       | `false`  | Adds a cleaned source record to each item              |
| `proxyConfiguration` | Object  | No       | No proxy | Optional Apify proxy settings                          |

### Output Data

| Field                  | Type    | Description                                    |
| ---------------------- | ------- | ---------------------------------------------- |
| `source`               | String  | Data source label                              |
| `resultType`           | String  | Result type, normally `product`                |
| `searchQuery`          | String  | Query used for the run                         |
| `page`                 | Integer | Listing page number                            |
| `position`             | Integer | Position on the listing page                   |
| `searchTotalResults`   | Integer | Total matching products reported by Elgiganten |
| `productId`            | String  | Product article number                         |
| `sku`                  | String  | Article number for matching and deduplication  |
| `title`                | String  | Product title                                  |
| `url`                  | String  | Product page URL                               |
| `brand`                | String  | Brand name                                     |
| `sellerName`           | String  | Seller name                                    |
| `priceCurrent`         | Number  | Current price including VAT                    |
| `priceCurrentExVat`    | Number  | Current price excluding VAT                    |
| `priceCurrency`        | String  | Currency code                                  |
| `ratingScore`          | Number  | Average rating                                 |
| `ratingCount`          | Integer | Number of ratings                              |
| `onlineStockInStock`   | Boolean | Online stock availability                      |
| `onlineStockLevel`     | String  | Online stock level text                        |
| `storesWithStockCount` | Integer | Number of stores with stock                    |
| `isBuyableOnline`      | Boolean | Whether the product can be bought online       |
| `isBuyableInStore`     | Boolean | Whether the product can be bought in a store   |
| `taxonomy`             | Array   | Category names in path order                   |
| `categoryPath`         | String  | Category path joined with `>`                  |
| `leafCategory`         | String  | Lowest-level category name                     |
| `bulletPoints`         | Array   | Product selling points                         |
| `imageUrl`             | String  | Product image URL                              |
| `apiRecord`            | Object  | Optional cleaned source record                 |

### Usage Examples

#### Collect products for a keyword

Collect the first 20 products for the keyword `mobile`:

```json
{
    "keyword": "mobile",
    "results_wanted": 20,
    "max_pages": 3
}
```

#### Collect products from a filtered search URL

Use a search URL when you want to reuse the filters you already selected on Elgiganten:

```json
{
    "startUrl": "https://www.elgiganten.se/search?q=samsung%20tv&view=products",
    "results_wanted": 50,
    "max_pages": 5
}
```

#### Include the cleaned source record

Enable `includeRawRecord` when you need additional source fields for enrichment or debugging:

```json
{
    "keyword": "iphone",
    "results_wanted": 100,
    "max_pages": 5,
    "includeRawRecord": true
}
```

### Sample Output

```json
{
    "source": "elgiganten-search",
    "resultType": "product",
    "searchQuery": "mobile",
    "page": 1,
    "position": 2,
    "searchTotalResults": 100348,
    "productId": "1000290",
    "sku": "1000290",
    "title": "DJI Osmo Mobile 8 gimbalstabilisator",
    "url": "https://www.elgiganten.se/product/sport-fritid/foto-bild-kamera/kameratillbehor/kamerahandtag/dji-osmo-mobile-8-gimbalstabilisator/1000290",
    "brand": "DJI",
    "sellerName": "Elgiganten",
    "taxonomy": ["Sport & Fritid", "Foto, Bild & Kamera", "Kameratillbehör", "Kamerahandtag"],
    "categoryPath": "Sport & Fritid > Foto, Bild & Kamera > Kameratillbehör > Kamerahandtag",
    "leafCategory": "Kamerahandtag",
    "bulletPoints": ["ActiveTrack 7.0-stabilisering", "Inbyggd förlängningsstång & stativ", "10 timmars batteritid"],
    "priceCurrency": "SEK",
    "priceCurrent": 1949,
    "priceCurrentExVat": 1559.2,
    "ratingScore": 4,
    "ratingCount": 4,
    "onlineStockInStock": true,
    "onlineStockLevel": "50+",
    "storesWithStockCount": 50,
    "isBuyableOnline": true,
    "isBuyableInStore": true,
    "imageUrl": "https://next-media.elkjop.com/image/dv_web_D18000136010389/1000290/dji-osmo-mobile-8-gimbalstabilisator.jpg"
}
```

### Tips for Best Results

- Use a short, specific keyword such as `iphone 17` or `oled tv` for focused results.
- Keep `results_wanted` modest for test runs, then raise it when the output looks correct.
- Use `max_pages` as a safety limit for scheduled runs.
- Search URLs take precedence over the keyword. Clear the keyword field when you want a URL-only run.
- Some fields are omitted when Elgiganten does not publish a value, for example unrated products have no `ratingScore`.
- Results can change during campaigns and stock updates, so compare runs over time rather than a single snapshot.

### Integrations

- **Google Sheets** - Send results to a spreadsheet for price tracking and analysis.
- **Webhooks** - Trigger downstream workflows after each run.
- **Make or Zapier** - Connect results to no-code automations.
- **API** - Read datasets programmatically from your own applications.
- **CSV and Excel** - Download the dataset in formats your BI tools already use.

### Frequently Asked Questions

#### Can I export Elgiganten product data to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, and other supported formats from the run page.

#### Can I run this Actor on a schedule?

Yes. Schedule the Actor in Apify Console to refresh product data hourly, daily, weekly, or at another interval.

#### Can I scrape more than one keyword in one run?

Run the Actor once per keyword, or create separate scheduled tasks for each keyword. The Actor accepts one keyword or one search URL per run.

#### Why are some fields missing in some items?

Fields are included only when Elgiganten publishes a value. For example, products without ratings do not include `ratingScore` or `ratingCount`, and products without a discount do not include `priceBefore`.

#### Does the Actor collect review text?

No. This Actor collects product listing data. Rating values that appear in the listing are included when Elgiganten publishes them, but individual review text is not collected.

#### What happens if the search returns no products?

The Actor reports a warning and finishes with an empty dataset. Check the keyword spelling or open the same search on Elgiganten to confirm that products are available.

#### What happens if Elgiganten changes its search setup?

The Actor refreshes its search configuration automatically and retries. If a later page fails after some results were saved, it keeps the results already collected and stops gracefully.

#### Is it legal to collect Elgiganten product data?

Collecting public product data can be legal, but you are responsible for complying with applicable laws, Elgiganten's terms, and data usage rules in your jurisdiction.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is designed for legitimate collection of publicly available product data. Users are responsible for using the data responsibly and complying with applicable laws and website terms.

# Actor input Schema

## `startUrl` (type: `string`):

Optional Elgiganten search URL. When supplied, it takes precedence over the keyword. The q parameter (or /search/<term> path) is used as the search query.

## `keyword` (type: `string`):

Search keyword used when no search URL is supplied.

## `results_wanted` (type: `integer`):

Maximum number of product records to collect.

## `max_pages` (type: `integer`):

Safety limit for paginated search requests.

## `includeRawRecord` (type: `boolean`):

When enabled, adds a cleaned apiRecord object with the source fields (noisy store and attribute maps removed).

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

Optional proxy settings. You can choose datacenter, residential, or no proxy.

## Actor input object example

```json
{
  "keyword": "mobile",
  "results_wanted": 20,
  "max_pages": 10,
  "includeRawRecord": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "keyword": "mobile"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/elgiganten-products-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 = { "keyword": "mobile" }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/elgiganten-products-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 '{
  "keyword": "mobile"
}' |
apify call shahidirfan/elgiganten-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/elgiganten-products-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/oB8L7ztktQnsBC9Hl/builds/r7pkdsfFsOKTpsgSR/openapi.json
