# Sellpy Scraper (`mrdoe/sellpy-scraper`) Actor

- **URL**: https://apify.com/mrdoe/sellpy-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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

![Sellpy Scraper hero](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/sellpy-scraper--hero.png)

### What does Sellpy Scraper do?

Sellpy Scraper collects second-hand fashion listings from [Sellpy](https://www.sellpy.se) (sellpy.se), Sweden's largest pre-owned clothing marketplace, and returns them as clean, structured data — one row per item. Paste a category or search URL (or just a keyword), press **Start**, and download a dataset with each item's brand, title, category, size, condition, price in SEK, any active discount, colour, material, and image URLs.

Use it for price monitoring, resale and sourcing research, brand and category trend analysis, building a second-hand inventory feed, or academic research into the circular fashion economy.

### Why use Sellpy Scraper?

- **Structured second-hand data** – brand, garment type, size, condition grade and material come out as separate fields, not buried in a title string.
- **Prices and discounts in SEK** – current price, the price before the latest markdown, and the discount percentage.
- **Whole categories or targeted searches** – point it at a category page, a keyword search, or a mix of both.
- **Individual items too** – paste one or more `sellpy.se/item/...` URLs to fetch just those.
- **Real pagination** – it walks the listing page by page up to your item cap.
- **Clean, normalised output** – prices as numbers, ISO timestamps, images as a list, missing values as `null`, deduplicated by item ID.

### What makes this different?

Sellpy is a client-rendered single-page app, so a plain HTML scrape returns almost nothing. This Actor talks to the same public catalogue backend the website itself uses, which means every field the site shows on a listing card is available in one pass — no browser automation, no rendering, fast and cheap.

### What data can you extract?

![Sellpy Scraper dataset output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/sellpy-scraper--output.png)

![Sellpy Scraper data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/sellpy-scraper--fields.png)

| Field                         | Description                                                              |
| ----------------------------- | ---------------------------------------------------------------------- |
| `id`                          | Sellpy item ID                                                        |
| `url`                         | Item page URL                                                         |
| `title`                       | Display title (brand + type + size, as Sellpy composes it)           |
| `brand`                       | Brand name                                                            |
| `type`                        | Garment / product type (e.g. "Vinterkappa", "Jeans")               |
| `category`                    | Deepest category name                                                 |
| `categoryPath`                | Full category trail as one string                                     |
| `breadcrumbs`                 | Category trail as an array                                            |
| `department`                  | Target demographic (e.g. "Kvinna", "Man", "Barn")                 |
| `segment`                     | Marketplace segment (e.g. "women")                                  |
| `size`                        | Primary size label                                                    |
| `sizes`                       | All size labels on the listing                                        |
| `condition`                   | Condition grade (Sellpy's Swedish grade, e.g. "Bra", "Utmärkt")   |
| `color`                       | Colour(s)                                                             |
| `pattern`                     | Pattern (e.g. "Enfärgat", "Randigt")                              |
| `material`                    | Material(s)                                                           |
| `price`                       | Current price                                                         |
| `currency`                    | Always `SEK`                                                          |
| `priceBeforeDrop`             | Price before the most recent markdown, or `null`                     |
| `discountPercent`             | Percentage off `priceBeforeDrop`, or `null`                          |
| `image` / `images`            | First image URL / all image URLs                                      |
| `status`                      | `available`, `reserved`, or `unavailable`                            |
| `isReserved` / `isForSale`    | Raw availability flags                                                |
| `lastChance`                  | Whether the item is in its final markdown window                      |
| `saleType`                    | Sale type (e.g. `regular`)                                            |
| `p2p`                         | Whether it is a peer-to-peer listing                                  |
| `favouriteCount`              | Number of users who favourited the item                              |
| `sellerId`                    | Opaque seller identifier (no name, no contact details)              |
| `listedAt` / `createdAt`      | When the item went on sale / was first created (ISO 8601)            |

Sellpy's public listing data does not include an original retail (RRP) price; `priceBeforeDrop` is the closest available reference and reflects Sellpy's own earlier asking price.

### How to use Sellpy Scraper

![How Sellpy Scraper works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/sellpy-scraper--how-it-works.png)

1. Open the Actor.
2. Paste one or more Sellpy **category / search URLs** — for example a category page like `https://www.sellpy.se/search/Kvinna/Kl%C3%A4der`, a keyword search, or an item URL. Leave it empty to use the fields below.
3. Optional — instead of a URL, type a **Search keyword** and/or a **Category path** (`Kvinna > Kläder > Klänningar`).
4. Choose a **Sort order** and set **Max items per start URL**.
5. Press **Start**.
6. Download the dataset as JSON, CSV, Excel, or XML, or pull it from the API.

### Input Parameters

| Parameter            | Type    | Required | Default                              | Description                                                                                             |
| -------------------- | ------- | -------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| `startUrls`          | Array   | No       | Women's clothing category            | Sellpy category, search, or item URLs to scrape.                                                       |
| `search`             | String  | No       | –                                    | Keyword to search for when no start URL is given.                                                      |
| `category`           | String  | No       | –                                    | Category path with `>` separators, e.g. `Kvinna > Kläder`.                                              |
| `sortBy`             | String  | No       | `relevance`                          | `relevance`, `newest`, `price_asc`, or `price_desc`.                                                   |
| `availableOnly`      | Boolean | No       | `true`                               | Skip items another buyer has already reserved.                                                         |
| `maxItems`           | Integer | No       | `5`                                  | Maximum listings per category / search URL. Item URLs always return one row.                            |
| `proxyConfiguration` | Object  | No       | Apify Proxy                          | Proxy for outgoing requests. Apify Proxy is recommended.                                                |

### Output Data

```json
{
    "id": "kFO3WKx1WR",
    "url": "https://www.sellpy.se/item/kFO3WKx1WR",
    "title": "Bershka Vinterkappa WMN-INT-S",
    "brand": "Bershka",
    "type": "Vinterkappa",
    "category": "Dun & Vadderade jackor",
    "categoryPath": "Kvinna > Kläder > Jackor & Ytterkläder > Dun & Vadderade jackor",
    "breadcrumbs": ["Kvinna", "Kläder", "Jackor & Ytterkläder", "Dun & Vadderade jackor"],
    "department": "Kvinna",
    "segment": "women",
    "size": "WMN-INT-S",
    "sizes": ["WMN-INT-S"],
    "condition": "Bra",
    "color": ["Beige"],
    "pattern": "Enfärgat",
    "material": ["Polyester", "Syntetfiber"],
    "price": 190,
    "currency": "SEK",
    "priceBeforeDrop": 210,
    "discountPercent": 10,
    "image": "https://prod.images.sellpy.net/photoRobot-standard-1-k-10/kFO3WKx1WR-152d-0.jpg",
    "images": [
        "https://prod.images.sellpy.net/photoRobot-standard-1-k-10/kFO3WKx1WR-152d-0.jpg",
        "https://prod.images.sellpy.net/phone-images/kFO3WKx1WR-fab3.jpg"
    ],
    "status": "available",
    "isReserved": false,
    "isForSale": true,
    "lastChance": false,
    "saleType": "regular",
    "p2p": false,
    "favouriteCount": 17,
    "sellerId": "wE51aoDJSO",
    "listedAt": "2026-08-31T09:15:07.615Z",
    "createdAt": "2026-04-14T09:26:08.000Z"
}
```

### Usage Examples

**A whole category**

- `startUrls`: `https://www.sellpy.se/search/Kvinna/Kl%C3%A4der`, `maxItems`: 500

**Newest listings for a brand**

- `search`: `arket`, `sortBy`: `newest`, `maxItems`: 200

**Cheapest items in a sub-category**

- `category`: `Herr > Skor`, `sortBy`: `price_asc`

**Specific items**

- `startUrls`: one or more `https://www.sellpy.se/item/<id>` URLs

### Tips for Best Results

- Sellpy's catalogue backend serves at most the first 1,000 results of any single query. To go deeper, split a broad category into its sub-categories, or add a keyword or price sort.
- For price-drop tracking, schedule the Actor and diff `price` / `discountPercent` between runs.
- Set `availableOnly` to `false` if you want reserved (nearly-sold) items in the data too.
- Category names are in Swedish — copy them straight from a Sellpy category page's breadcrumb.

### Known Limitations

- Only the Swedish market (sellpy.se) is covered, so all prices are in SEK.
- Any single search or category is capped at ~1,000 results by the source; use narrower categories or sorts for a full export.
- Condition grades and category names are Sellpy's own Swedish labels.
- No original retail (RRP) price is published; `priceBeforeDrop` is Sellpy's previous asking price, not the brand's list price.
- A row is a snapshot — prices, discounts and availability change continuously.
- An item URL for a listing that has already sold returns a row with `status: "unavailable"` and null fields.

### Integrations

Connect results to Google Sheets, Make, Zapier, Slack, or your own systems via the Apify API and webhooks. Schedule runs to build a price history.

### Export Formats

JSON, CSV, Excel, and XML from the Dataset tab or the Apify API.

### Frequently Asked Questions

**Do I need a Sellpy account?**
No. The Actor only reads publicly visible listing data.

**Can I scrape more than 1,000 items from one category?**
Not in a single query — the source limits it. Split the category into sub-categories or add a keyword / price sort and combine the runs.

**Which currency are prices in?**
Swedish krona (SEK). This Actor targets sellpy.se only.

**Does it return sold items?**
Category and search runs return currently listed items. If you pass an item URL for something already sold, you get a row marked `unavailable`.

**How are duplicates handled?**
Items are deduplicated by Sellpy item ID within a run.

### Support

Found a problem or need an extra field? Open an issue on the Actor's **Issues** tab in the Apify Console.

### Legal / Responsible Use

You are responsible for how you use this Actor and the data it collects, including compliance with Sellpy's Terms of Service and any data-protection laws that apply to you. This Actor collects publicly displayed marketplace listings for analysis. It does not log in, place orders, or contact sellers. The only seller-related value returned is an opaque `sellerId` — no names, addresses, or contact details are collected; still, treat any identifier as personal data and process it lawfully.

### Preview

![Sellpy Scraper input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/sellpy-scraper--input.png)

# Actor input Schema

## `startUrls` (type: `array`):

Sellpy category or search pages to scrape, e.g. https://www.sellpy.se/search/Kvinna/Kl%C3%A4der or a keyword search URL. You can also paste individual item URLs (https://www.sellpy.se/item/<id>). Leave empty to use the "Search keyword" / "Category" fields below, or to fall back to the women's clothing listing.

## `search` (type: `string`):

A keyword to search Sellpy for, e.g. "levis jeans". Used when no start URL is given.

## `category` (type: `string`):

A Sellpy category path using ">" as the separator, e.g. "Kvinna > Kläder > Klänningar". Combine with a keyword to narrow a search, or use alone to walk a whole category.

## `sortBy` (type: `string`):

Order in which listings are collected.

## `availableOnly` (type: `boolean`):

Skip listings another buyer has already reserved. Turn off to include reserved items.

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

Maximum number of listings to return for each category / search URL (or keyword). Item URLs always return one row each.

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

Proxy used for outgoing requests. Apify Proxy is enabled by default and is recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.sellpy.se/search/Kvinna/Kl%C3%A4der"
    }
  ],
  "sortBy": "relevance",
  "availableOnly": true,
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listings` (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 = {
    "startUrls": [
        {
            "url": "https://www.sellpy.se/search/Kvinna/Kl%C3%A4der"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/sellpy-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 = {
    "startUrls": [{ "url": "https://www.sellpy.se/search/Kvinna/Kl%C3%A4der" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/sellpy-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 '{
  "startUrls": [
    {
      "url": "https://www.sellpy.se/search/Kvinna/Kl%C3%A4der"
    }
  ],
  "maxItems": 5
}' |
apify call mrdoe/sellpy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/sellpy-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/Bl1g1KrjoM5B9xM42/builds/fmooqAIhQfxiF6TLz/openapi.json
