# Shpock Scraper — AT/DE/UK/IT Classifieds Marketplace Data (`studio-amba/shpock-scraper`) Actor

Scrape second-hand classifieds listings from Shpock.com across Austria, Germany, the UK, and Italy. Search by keyword or category, get title, price, currency, location, photos, and listing URL. No login required.

- **URL**: https://apify.com/studio-amba/shpock-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Lead generation
- **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

## Shpock Scraper

Scrape second-hand classifieds listings from [Shpock.com](https://www.shpock.com) — the #2 classifieds marketplace in Austria, Germany, and the UK, also live in Italy. One actor covers all four markets: search by keyword or category, pick a country, and get structured listing data. No login or cookies required.

### Why use this actor?

Shpock is a major player in second-hand goods across AT/DE/UK, with real inventory in Italy too. Whether you're tracking resale prices, sourcing deals, or researching local second-hand markets, this actor turns Shpock search results into structured data without manual browsing.

**Use cases:**

- **Price monitoring** — track resale prices for specific products (phones, electronics, furniture) across four markets
- **Market research** — compare second-hand pricing and inventory between AT, DE, UK, and IT
- **Inventory sourcing** — find deals across categories like Electronics, Fashion, Home & Garden
- **Cross-border arbitrage research** — the same product category, four currencies, one dataset
- **Academic / consumer research** — study second-hand market dynamics

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Free-text keyword search (e.g. "iphone", "sofa", "bike") |
| `category` | String | No | Shpock category ID, e.g. `el` (Electronics), `fa` (Fashion & Accessories), `hg` (Home & Garden), `sl` (Sport & Leisure) |
| `country` | String | No | Market to search: `AT`, `DE`, `GB`, or `IT`. Default `AT` |
| `maxResults` | Integer | No | Maximum listings to return (default 90, max 500 — see Limitations) |
| `proxyConfiguration` | Object | No | Proxy settings. RESIDENTIAL is required — see Limitations |

At least one of `searchQuery` or `category` should be set; if both are empty the actor falls back to a default `iphone` search so a run always returns data.

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `itemId` | String | `"aqGUgM8osDjRC9Pd"` |
| `title` | String | `"Iphone 15 pro Max 256gb"` |
| `description` | String | Full listing description |
| `price` | Number | null | `590` |
| `originalPrice` | Number | null | `null` (set only when `isOnSale` is true) |
| `currency` | String | `"EUR"` or `"GBP"` |
| `isNew` | Boolean | `false` |
| `isSold` | Boolean | `false` |
| `isFree` | Boolean | `false` |
| `isOnSale` | Boolean | `false` |
| `isBoosted` | Boolean | `false` |
| `isShippable` | Boolean | `false` |
| `isExpired` | Boolean | `false` |
| `locality` | String | null | `"1010 Wien"` |
| `country` | String | `"AT"` |
| `imageUrl` | String | null | 800x800 image URL |
| `imageCount` | Number | `1` |
| `url` | String | Canonical listing URL |
| `scrapedAt` | String | ISO timestamp |

### Example output

```json
{
    "itemId": "aqGUgM8osDjRC9Pd",
    "title": "Iphone 15 pro Max 256gb",
    "description": "Wegen Neukauf zu verkaufen ist sehr gut beinander immer mit Schutzhülle und Schutzfolie verwenden\n\nOriginal Verpackung vorhanden!\n\nPreis Verhandelbar!",
    "price": 590,
    "originalPrice": null,
    "currency": "EUR",
    "isNew": false,
    "isSold": false,
    "isFree": false,
    "isOnSale": false,
    "isBoosted": false,
    "isShippable": false,
    "isExpired": false,
    "locality": "1010 Wien",
    "country": "AT",
    "imageUrl": "https://m1.secondhandapp.at/2.0/6aa19480cf28b038d11b21f5?height=800&width=800",
    "imageCount": 1,
    "url": "https://www.shpock.com/de-at/i/aqGUgM8osDjRC9Pd/iphone-15-pro-max-256gb",
    "scrapedAt": "2026-09-13T19:43:32.989Z"
}
```

### How to use the API

Call the actor via the Apify API:

```bash
curl "https://api.apify.com/v2/acts/studio-amba~shpock-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -X POST \
  -d '{"searchQuery": "iphone", "country": "DE", "maxResults": 60}' \
  -H "Content-Type: application/json"
```

### Cost estimate

This actor calls Shpock's own GraphQL search API directly — no browser overhead, one HTTP request per 30 results. It charges $0.005 per run (start fee, based on its 1 GB memory allocation) plus $0.002 per result scraped. 90 results (a full single-search run) costs about $0.19. A run's usage cost only settles after it reports SUCCEEDED.

### Why country selection needs a proxy

Shpock's search is not scoped by language or URL — `/en-gb/`, `/de-de/`, `/de-at/` all return the exact same results. The site ranks listings purely by distance from the requester's IP address. Selecting `country` in this actor's input routes the request through a residential proxy physically located in that country, which is what actually determines whether you see Austrian, German, UK, or Italian inventory (and the correct local currency). This is why RESIDENTIAL proxies are required rather than optional here — there is no anti-bot to defend against, but there is no other way to pick a market.

### Limitations

- **Guest search cap:** Shpock limits unauthenticated search access to roughly 90 results (3 pages of 30) per search. The actor stops cleanly and returns everything collected if this limit is hit — this is not a scraper failure. To cover more ground, run multiple narrower searches (different keywords or categories) rather than raising `maxResults` past ~90.
- Border regions can return listings from a neighbouring country if they're geographically closer to the proxy's exit point than same-country listings — this mirrors Shpock's own "nearby" ranking, not a scraper bug.
- `originalPrice` is only populated for discounted listings.
- Respect the website's terms of service and use responsibly.

### How to scrape Shpock data

1. Go to this actor's page on the [Apify Store](https://apify.com/store).
2. Click **Try for free** to open it in Apify Console.
3. Enter a search query and/or category, pick the country market (AT/DE/GB/IT), and set the maximum number of results.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or connect it to your workflow via API.

You can also schedule regular runs, set up webhooks for real-time notifications, or integrate the results directly into your application using the [Apify API](https://docs.apify.com/api).

### Related scrapers

Shpock is one part of the wider European classifieds landscape. If you need coverage beyond Shpock, check out:

- [Kleinanzeigen Scraper](https://apify.com/studio-amba/kleinanzeigen-scraper) — Germany's largest general classifieds site
- [Willhaben Scraper](https://apify.com/studio-amba/willhaben-scraper) — Austria's largest classifieds and property portal
- [Vinted Scraper](https://apify.com/studio-amba/vinted-scraper) — secondhand fashion across 15+ European markets
- [OLX Scraper](https://apify.com/studio-amba/olx-scraper) — classifieds across Central/Eastern Europe
- [2dehands Scraper](https://apify.com/studio-amba/2dehands-scraper) — Belgium's largest classifieds marketplace

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

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

Free-text keyword search (e.g. 'iphone', 'sofa', 'bike'). Leave empty to browse a category, or combine both.

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

Shpock category ID to filter results, e.g. 'el' for Electronics, 'fa' for Fashion & Accessories, 'hg' for Home & Garden, 'sl' for Sport & Leisure. Find more IDs by browsing shpock.com and checking the '?category=' URL parameter.

## `country` (type: `string`):

Which Shpock market to search. Shpock's search is IP-geolocation based (not a URL locale) — this selects a residential proxy IP physically located in that country so results and currency match the local market.

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

Maximum number of listings to scrape. Each page returns up to 30 results. Note: Shpock caps unauthenticated search access at roughly 90 results (3 pages) per search — the run stops cleanly and returns what it collected if that cap is hit. Narrow your search (keyword + category) rather than raising this value to get more total coverage.

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

Proxy settings. Shpock has no anti-bot, but result geography is IP-based — RESIDENTIAL proxies scoped to the selected country are required to get market-correct listings and currency.

## Actor input object example

```json
{
  "searchQuery": "iphone",
  "country": "AT",
  "maxResults": 90,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AT"
  }
}
```

# 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": "iphone",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/shpock-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": "iphone",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/shpock-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": "iphone",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AT"
  }
}' |
apify call studio-amba/shpock-scraper --silent --output-dataset

```

## MCP server setup

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