# Senukai.lt API Scraper (`rl1987/senukai-api-scraper`) Actor

Scrape Senukai.lt product listings (PLP) and full product detail (PDP) directly from the Senukai mobile API — names, prices, discounts, EAN/GTIN, images and URLs.

- **URL**: https://apify.com/rl1987/senukai-api-scraper.md
- **Developed by:** [R.L.](https://apify.com/rl1987) (community)
- **Categories:** E-commerce
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 plp row (listing data)s

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Senukai.lt Scraper 🛒 — Scrape Senukai Products, Prices, EAN/GTIN & Images

**Senukai.lt Scraper** extracts product data from **Senukai.lt** — Lithuania's largest home,
garden and DIY retailer — at scale. It pulls **listings, full product detail, prices,
discounts, loyalty prices, EAN/GTIN barcodes, images and product URLs**, and exports them to
**JSON, CSV, Excel, or an API**. It talks to Senukai's own mobile API directly, so it's
**fast, reliable and complete** — no flaky HTML parsing and no headless browser.

Point it at a **category ID** or a **search query**, and get clean, structured Senukai product
data in seconds. Great for **price monitoring, competitor research, catalog building,
dropshipping and market analysis.**

***

### ✨ Why use this Senukai Scraper?

- 🟢 **No code required** — enter a search term or category ID, click **Start**, download data.
- ⚡ **Fast & accurate** — structured JSON straight from Senukai's mobile API, not rendered HTML.
- 🧾 **Rich data** — names, regular/loyalty prices, discounts, **EAN & GTIN barcodes**, images.
- 🔁 **Full pagination** — scrapes a whole category or search to your `maxItems` cap.
- 🛡️ **Cloudflare-ready** — Safari TLS impersonation plus proxy support get you through the WAF.
- 💸 **Transparent pay-per-result pricing** — pay only for the rows you get.
- 📤 **Export anywhere** — JSON, CSV, Excel, XML, or pull it live via the Apify API.

***

### 🎯 What can you do with Senukai product data?

- **Price monitoring & repricing** — track Senukai prices, discounts and loyalty prices over time.
- **Competitor & market analysis** — benchmark assortment, pricing and availability in Lithuania.
- **Catalog building & dropshipping** — import Senukai products (with EAN/GTIN) into your store.
- **Product matching** — join Senukai items to other retailers on EAN/GTIN barcodes.
- **Data science & trend research** — build datasets of the Lithuanian DIY/home market.

***

### 📥 What data does the Senukai Scraper extract?

**Listing (PLP) data** — product id, name, current price, regular price, discount, loyalty
(cashback) price and points, currency, online-sellable flag, images and product URL.

**Product detail (PDP) data** — everything above **plus** the full description, manufacturer
info, **EAN and GTIN barcodes**, and product specifications (attribute groups).

Each row is stamped with `source` and `scrapedAt`.

***

### 🚀 How to scrape Senukai.lt (3 steps)

1. **Add an input.** Enter a **search query** (e.g. `grąžtas`) *or* a numeric **category ID**.
2. **Pick your options** — turn on `includePdp` for full detail, set `maxItems`, choose a proxy.
3. **Run & export** — click **Start**, then download the dataset as JSON/CSV/Excel or via the API.

***

### ⚙️ Input

Provide **either** a `searchQuery` **or** a `categoryId`. Everything else is optional.

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `searchQuery` | string | – | Free-text Senukai search, e.g. `"grąžtas"`. |
| `categoryId` | integer | – | Numeric Senukai category ID (`f[category_id]` filter). |
| `includePdp` | boolean | `false` | Also fetch full PDP detail (description, EAN/GTIN, specs) per product. |
| `maxItems` | integer | `50` | Hard cap on products pushed to the dataset. |
| `perPage` | integer | `20` | Products per listing API page. |
| `proxyConfiguration` | object | Residential (LT) | Proxy settings — residential recommended (Cloudflare blocks datacenter IPs). |
| `proxyUrl` | string | – | Optional direct proxy URL; overrides `proxyConfiguration`. Read only at runtime, never stored. |

#### Example input

```jsonc
{
  "searchQuery": "grąžtas",
  "maxItems": 50,
  "includePdp": true,
  "perPage": 20,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "LT" }
}
```

***

### 📤 Output

#### Listing (PLP) product

```jsonc
{
  "id": 1852461,
  "name": "Konstruktorius LEGO® „FIFA World Cup™“ oficiali taurė 43020, 2842 vnt.",
  "ycode": "Y00002102880",
  "price": 145.0,
  "regularPrice": 189.99,
  "currency": "EUR",
  "pricing": {
    "type": "loyalty", "regular": 189.99, "reduced": 145.0,
    "discount": "-24%", "discountedAmount": 44.99, "cashbackPointsEarned": 145
  },
  "isSellableOnline": true,
  "images": ["https://new.ksd-images.lt/display/aikido/store/%E2%80%A6.jpeg"],
  "imageUrl": "https://new.ksd-images.lt/display/aikido/store/%E2%80%A6.jpeg",
  "url": "https://www.senukai.lt/p/%E2%80%A6/13pd9",
  "source": "senukai.lt",
  "isDetail": false,
  "scrapedAt": "2026-07-02T10:00:00+00:00"
}
```

#### Product detail (PDP) product — adds

```jsonc
{
  "description": "Sudėtingas LEGO rinkinys suaugusiems.",
  "manufacturerInfo": "LEGO System A/S",
  "ean": ["5702018069608"],
  "gtin": "2105098",
  "specifications": { "Detalių skaičius": "2842" },
  "isDetail": true
}
```

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

***

### 🧾 Data table

| Field | Where | Description |
| --- | --- | --- |
| `id` | PLP+PDP | Senukai product id |
| `name` | PLP+PDP | Product name |
| `price` / `regularPrice` | PLP+PDP | Current (reduced/loyalty) price and regular price |
| `pricing` | PLP+PDP | Full pricing breakdown (discount, loyalty, cashback) |
| `currency` | PLP+PDP | Always `EUR` |
| `ean` / `gtin` | PDP | Barcodes for product matching |
| `images` / `imageUrl` | PLP+PDP | Product image URLs |
| `url` | PLP+PDP | Product page URL |
| `description` / `specifications` | PDP | Full copy and attribute specs |

***

### 💰 Pricing — pay per result

| You scrape | Price |
| --- | --- |
| **Listing (PLP) row** — name, price, discount, image, URL | **$1.00 per 1,000 rows** |
| **Product detail (PDP) row** — all PLP fields **plus** description, EAN/GTIN, specs | **$2.00 per 1,000 rows** |

You're billed as a **PDP row** whenever `includePdp` is on, otherwise as a **PLP row**. Set
`maxItems` to stay within budget. Apify platform usage (compute + proxy) is billed on top.

***

### 🔌 Use the Senukai Scraper via API

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~senukai-api-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{ "searchQuery": "grąžtas", "maxItems": 50, "includePdp": true }'
```

Run it on a **schedule** (e.g. daily price checks) and integrate with **Make, Zapier, n8n,
Google Sheets** or webhooks — all from the Apify platform.

***

### ❓ FAQ

**Is it legal to scrape Senukai?**
Scraping publicly available data is generally permitted, but you are responsible for complying
with Senukai's Terms of Service and applicable laws (including copyright and data-protection
rules) in your jurisdiction. Use the data responsibly.

**Do I need a proxy?**
Yes, in practice. Senukai's API is fronted by Cloudflare and blocks datacenter/hosting IPs.
Use Apify **Residential** proxies (Lithuania works best), or paste a direct `proxyUrl`.

**Do I need a Senukai account?**
No. The actor creates an anonymous guest session automatically.

**How do I find a category ID?**
Use a `searchQuery` if you don't have one. Category IDs come from the app/site navigation
(the `f[category_id]` filter value).

**How do I export the data?**
Download from the dataset as **JSON, CSV, Excel, or XML**, or fetch it through the API.

***

### 🛠️ How it works

The scraper talks to Senukai's own mobile API (`mobile-api.senukai.lt`) — the same endpoints
that power the Senukai app. It creates an anonymous **guest session**, then paginates the
**product listing** endpoint for a category or search, and optionally fetches the **product
detail** endpoint per product. It uses **curl\_cffi Safari TLS impersonation** plus a proxy to
pass Cloudflare, and stays polite with a small delay between calls.

***

*Not affiliated with, endorsed by, or sponsored by Senukai / Kesko Senukai. "Senukai" and
related marks are trademarks of their respective owners and are used here for descriptive
purposes only.*

***

### Global marketplace toolkit

Part of the **Global marketplace toolkit** — product and pricing data across international B2B/B2C marketplaces and classifieds sites:

- [Shopify API Scraper](https://apify.com/rl1987/shopify-api-scraper) — Get product data from almost any Shopify store's public API.
- [DHgate API Scraper](https://apify.com/rl1987/dhgate-api-scraper) — Scrapes DHgate product search results and detail pages via mobile API.
- [Made-in-China.com API Scraper](https://apify.com/rl1987/made-in-china-api-scraper) — Scrapes product search results and details from Made-in-China.com's mobile app API.
- [Back Market API Scraper](https://apify.com/rl1987/backmarket-api-scraper) — Scrape refurbished-device listings and full product detail from Back Market's API.
- [Kleinanzeigen API Scraper](https://apify.com/rl1987/kleinanzeigen-api-scraper) — Scrape Kleinanzeigen (Germany) classified-ad listings and full details via mobile API.
- [Algolia API Scraper](https://apify.com/rl1987/algolia-api-scraper) — Generalised scraper for any Algolia-powered search index — scrape hits or discover facets.

### Did you find this useful?

⭐ Rate this actor on Apify! Your feedback helps other users find it and helps us keep improving it.

# Actor input Schema

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

Free-text search on Senukai.lt (e.g. "grąžtas", "gręžtuvas"). Products are paginated through fully via the mobile search API. Provide EITHER a searchQuery or a categoryId. Uses the app's real search endpoint (suggest.json) and returns the top products that actually match the query, ranked by relevance (the mobile search returns up to ~10 matches).

## `categoryId` (type: `string`):

Pick a product category to browse (the dropdown shows the Senukai catalogue tree as ‘Department › Subcategory’). Selecting a parent department includes all products beneath it. Provide EITHER a Category or a Search keyword. (Advanced: you can also type a raw category id.)

## `includePdp` (type: `boolean`):

For every product found on the listing, also fetch the full product-detail page — description, manufacturer info, EAN/GTIN and specifications. Slower: one extra API call per product.

## `maxItems` (type: `integer`):

Hard cap on how many products to push to the dataset.

## `perPage` (type: `integer`):

Products requested per listing API page.

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

Proxy settings. Senukai is fronted by Cloudflare and blocks datacenter IPs — RESIDENTIAL proxies (ideally Lithuania) are strongly recommended. You may instead paste a direct proxy URL below.

## `proxyUrl` (type: `string`):

Optional single proxy URL (e.g. http://user:pass@host:port) to use instead of the proxy picker above. Takes precedence over proxyConfiguration when set. Not stored — read only at runtime.

## Actor input object example

```json
{
  "searchQuery": "grąžtas",
  "includePdp": false,
  "maxItems": 50,
  "perPage": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "LT"
  }
}
```

# 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": "grąžtas"
};

// Run the Actor and wait for it to finish
const run = await client.actor("rl1987/senukai-api-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": "grąžtas" }

# Run the Actor and wait for it to finish
run = client.actor("rl1987/senukai-api-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": "grąžtas"
}' |
apify call rl1987/senukai-api-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rl1987/senukai-api-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/zh3prrLvzjc0J7EoV/builds/nLTbjoglGhWv0iAWW/openapi.json
