# Gumtree Scraper — UK Classifieds & Marketplace Data (`studio-amba/gumtree-scraper`) Actor

Scrape classified listings from Gumtree.com — the UK's #1 marketplace for cars, furniture, jobs and pets. Search by keyword, category, location and price. No login or cookies required.

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

## Pricing

from $2.00 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Gumtree Scraper

Extract classified listings from [Gumtree.com](https://www.gumtree.com), the UK's
largest marketplace — cars, furniture, jobs, pets, property and services — by
keyword, category, location and price. No login, no cookies.

### Why use this actor?

Gumtree has millions of live UK classifieds but no public API. This actor turns
any search into clean, structured JSON: title, price, location, condition,
seller, posted date and every image. Use it for price research, market and
demand analysis, lead generation, resale sourcing, or feeding a downstream
dataset. You point it at a search; it returns rows you can drop straight into a
spreadsheet, database or BI tool.

### What it does

- Searches Gumtree by keyword and (optionally) category, location and price range
- Paginates automatically until it hits your `maxResults` limit (30 per page)
- Optionally opens each listing to collect posted date, seller name & rating,
  condition, full description and all photos
- Returns absolute URLs, numeric prices and ISO timestamps
- Works without any account, cookie or login

### How to scrape Gumtree data

1. Add the actor to your Apify account and open its input form.
2. Type a **Search Query** (for example `sofa`, `ford focus`, `labrador puppy`).
3. Optionally pick a **Category** (Cars, Property, Jobs, Pets, ...), set a
   **Location** slug (`london`, `manchester`), a price range, or a sort order.
4. Set **Max Results** to how many listings you want.
5. Leave **Fetch Full Listing Details** on for the richest data (posted date,
   seller, condition, all images) or turn it off for a faster list-only scrape.
6. Keep the **UK residential proxy** prefill — Gumtree is behind Cloudflare and a
   GB residential proxy gives the most reliable, geo-consistent results.
7. Click **Start**. When the run finishes, export the dataset as JSON, CSV,
   Excel or feed it through the Apify API.

You can also run it on a schedule to track new listings, price changes or
inventory in a category over time.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Keyword to search (e.g. `sofa`, `iphone 15`). Leave empty to browse a category. Defaults to `sofa` if nothing is provided. |
| `category` | String | No | Top-level category: `all`, `for-sale`, `cars-vans-motorbikes`, `flats-houses`, `jobs`, `pets`, `community`, `services`, `business-services` |
| `location` | String | No | Location slug to search around (e.g. `london`, `manchester`). Empty = UK-wide |
| `sortBy` | String | No | `relevance` (default), `newest`, `cheapest`, `most-expensive` |
| `minPrice` | Number | No | Minimum price filter (GBP) |
| `maxPrice` | Number | No | Maximum price filter (GBP) |
| `fetchDetails` | Boolean | No | Open each listing for full data (default `true`) |
| `maxResults` | Integer | No | Maximum listings to scrape (default 100) |
| `proxyConfiguration` | Object | No | Proxy settings — UK residential recommended |

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `itemId` | String | `"1508249780"` |
| `name` | String | `"Dover Corner Sofa Bed (grey) with storage"` |
| `description` | String | Full or preview listing text |
| `price` | Number | `230` (null when the ad has no price) |
| `currency` | String | `"GBP"` |
| `location` | String | `"Leigh-on-Sea, Essex"` |
| `postcode` | String | `"SS92QS"` |
| `category` | String | `"Sofa Beds & Futons"` |
| `condition` | String | `"As good as new"` |
| `sellerType` | String | `"Private"` or `"Business"` |
| `sellerName` | String | `"Graeme"` |
| `sellerRating` | Number | `5` |
| `sellerReviewCount` | Number | `12` |
| `featured` | Boolean | `false` |
| `imageUrl` | String | Primary image URL |
| `imageUrls` | Array | All image URLs |
| `postedAt` | String | `"2026-07-06T16:34:50.853Z"` |
| `url` | String | Full listing URL |
| `scrapedAt` | String | ISO 8601 timestamp |

Fields marked as detail-only (`postcode`, `category`, `condition`, `sellerType`,
`sellerName`, `sellerRating`, `sellerReviewCount`, `postedAt`, full `imageUrls`
and description) are populated when **Fetch Full Listing Details** is on.

### Example output

```json
{
    "itemId": "1508249780",
    "name": "Dover Corner Sofa Bed (grey) with storage",
    "description": "Dover Corner Sofa Bed (grey) with storage. Excellent condition, like new. Was £799 new. Overall: W260cm x D150cm x H91cm.",
    "price": 230,
    "currency": "GBP",
    "location": "Leigh-on-Sea, Essex",
    "postcode": "SS92QS",
    "category": "Sofa Beds & Futons",
    "condition": "As good as new",
    "sellerType": "Private",
    "sellerName": "Graeme",
    "sellerRating": 5,
    "sellerReviewCount": 12,
    "featured": false,
    "imageUrl": "https://img.gumtree.com/ePR8PyKf84wPHx7_RYmEag/caf84dd68e7b47f19d_787a10856a4a/86",
    "imageUrls": [
        "https://img.gumtree.com/ePR8PyKf84wPHx7_RYmEag/caf84dd68e7b47f19d_787a10856a4a/86",
        "https://img.gumtree.com/ePR8PyKf84wPHx7_RYmEag/a823f5d42d6d471895_0bdefb193239/86"
    ],
    "postedAt": "2026-07-06T16:34:50.853Z",
    "url": "https://www.gumtree.com/p/sofa-beds-futons/dover-corner-sofa-bed-grey-with-storage-/1508249780",
    "scrapedAt": "2026-07-06T18:23:25.396Z"
}
```

### Tips

- **Free items** show `price: 0` — Gumtree has a lot of "*FREE*" listings, this
  is real data, not a parsing error. Ads with no fixed price return `null`.
- **Category vs keyword**: you can browse a whole category by picking a
  `category` and leaving `searchQuery` empty.
- **Faster runs**: turn off `fetchDetails` when you only need the list view
  (title, price, location, thumbnail, URL). That's one request per 30 listings.
- **Deeper runs**: with `fetchDetails` on, each listing is one extra request, so
  scraping 1,000 listings is ~1,030 requests. Use a residential proxy pool.

### Cost estimate

With **Fetch Full Listing Details** off, the actor makes roughly one request per
30 listings — very cheap. With details on (the default), it makes about one
request per listing, so budget accordingly for large runs. Actual cost depends
on your Apify plan and proxy choice.

### Limitations

- Some ads list "Please contact" instead of a price — `price` is `null` there.
- Seller rating/review counts are only present for sellers who have reviews.
- Data is scraped from the public website and may change without notice.
- Respect Gumtree's terms of service and use the data responsibly.

### Related scrapers

Building a cross-market classifieds or marketplace dataset? Pair this with our
other actors:

- **2dehands Scraper** — Belgium's #1 classifieds (2dehands.be / 2ememain.be)
- **Kleinanzeigen Scraper** — Germany's #1 classifieds
- **Bazos Scraper** — Czech & Slovak classifieds
- **AutoScout24 Scraper** — pan-European used cars
- **Funda Scraper** — Dutch property listings

### 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`):

Keyword to search (e.g. 'sofa', 'iphone 15', 'ford focus', 'labrador puppy'). Leave empty to browse a category.

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

Optional top-level Gumtree category to restrict the search.

## `location` (type: `string`):

Optional location slug to search around (e.g. 'london', 'manchester', 'birmingham'). Leave empty for UK-wide results.

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

How to sort the results.

## `minPrice` (type: `number`):

Minimum price filter in pounds.

## `maxPrice` (type: `number`):

Maximum price filter in pounds.

## `fetchDetails` (type: `boolean`):

Open each listing to collect posted date, seller name & rating, condition, full description and all images. Slower but far richer. Turn off for a fast list-only scrape (title, price, location, image).

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

Maximum number of listings to scrape across all pages (30 per search page).

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

Proxy settings. Gumtree is behind Cloudflare, so a UK residential proxy is strongly recommended for reliable, geo-consistent results.

## Actor input object example

```json
{
  "searchQuery": "sofa",
  "category": "all",
  "sortBy": "relevance",
  "fetchDetails": true,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

# 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": "sofa",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GB"
    }
};

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

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/gumtree-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": "sofa",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}' |
apify call studio-amba/gumtree-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/gumtree-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6bixOqojtlzk5qCiZ/builds/umrj4SoTpNrrdJzmf/openapi.json
