# Gumtree UK Scraper - 11 Categories, No Login (`gio21/gumtree-uk-scraper`) Actor

Scrape Gumtree UK classifieds (cars, property, jobs, electronics, furniture, services, pets, baby, sports, music, books) by category, keyword or URL. Title, price, location, description, images. No login required. $3/1,000 listings.

- **URL**: https://apify.com/gio21/gumtree-uk-scraper.md
- **Developed by:** [Gio](https://apify.com/gio21) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 17 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 listing 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/actors/running/actors-in-store.md#pay-per-event

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

## Gumtree UK Scraper - 11 Categories, No Login

Scrape classifieds from gumtree.com, the UK's largest classifieds site, across
11 categories (cars, property, jobs, electronics, furniture, services, pets,
baby, sports, music, books) by category, keyword or any search URL you build
on the site itself. No login required.

### Why use this scraper

Gumtree is where millions of UK sellers list cars, rentals, jobs and
second-hand goods every day, but the listings turn over fast and the site has
no public API. Anyone tracking a local market, whether used-car prices in a
city, rental listings in a postcode, or resale demand for a product category,
ends up refreshing search pages by hand. This actor turns any Gumtree UK
search (by category, keyword or a direct URL) into structured data in one
run, so you get price, location and description for every listing without
opening a single page.

Gumtree listings also disappear once sold or expire, so a run from last week
already misses what is live today. Scheduling this actor against the same
category, location or keyword keeps a dataset current without anyone manually
re-checking the site.

### Overview

Point the actor at a Gumtree UK category, a keyword search, or a direct
search URL you built on gumtree.com, and it paginates through the results
automatically, returning one record per listing with title, price, location,
description and images. A 50-listing run (the default) finishes in under a
minute. Cost is $0.003 per listing, so a 1,000-listing batch costs $3.

### Supported inputs

- **Category** (`category`, default `cars`) - one of Gumtree's own category
  slugs: `cars`, `property`, `jobs`, `electronics`, `furniture`, `services`,
  `pets`, `baby`, `sports`, `music`, `books`.
- **Location** (`location`, default `london`) - any UK city or region slug
  Gumtree accepts, e.g. `manchester`, `birmingham`, `glasgow`, `bristol`.
- **Keywords** (`keywords`) - optional free-text search term, combined with
  category and location.
- **Custom start URL** (`startUrl`) - a full Gumtree search URL you built on
  the site (with any filters already applied there, such as price range).
  Overrides category, location and keywords when set.
- **Max listings** (`maxItems`, default 50, capped at 500) and **max pages**
  (`maxPages`, default 5) - how many listings and search-result pages to
  fetch.

### Use cases

- **Used-car dealers and classifieds aggregators** - pull current car and van
  listings for a city to benchmark prices against their own stock.
- **Letting agents and relocation services** - track rental listings in a
  postcode or city to see what is actually on the market this week.
- **Local service businesses** - monitor the `services` category in their
  area to see what competitors charge and advertise.
- **Resale and second-hand market research** - run the same keyword (e.g.
  "iphone", "nintendo switch") across cities to compare asking prices for the
  same product nationwide.
- **Recruiters** - pull the `jobs` category for a city and keyword to see
  which local employers are hiring right now.

### How it works

The actor builds a Gumtree search URL from the category, location and
keywords you give it (or uses your own `startUrl` directly), then follows the
site's own result pagination up to `maxPages`. Each listing card on the page
is parsed into a flat record: title, price, location, description and up to
5 images, with the listing ID and URL taken from the ad's own link. No login
or session is required because listing data is public on the search page
itself.

### Input configuration

**Mode 1: category + location**

```json
{
  "category": "cars",
  "location": "manchester",
  "maxItems": 30
}
```

**Mode 2: keyword search inside a category**

```json
{
  "category": "electronics",
  "location": "london",
  "keywords": "nintendo switch",
  "maxItems": 20
}
```

**Mode 3: a filtered search URL built on the site**

```json
{
  "startUrl": "https://www.gumtree.com/search?search_category=property&search_location=bristol",
  "maxItems": 50
}
```

### Output sample

Real output from a run against the electronics category (keyword "nintendo
switch"):

```json
{
  "listingId": "1803478621",
  "title": "Nintendo Switch Console with Case and Game - Good Condition",
  "price": 110,
  "priceText": "£110",
  "currency": "GBP",
  "location": "Chislehurst, London",
  "category": "electronics",
  "postedAt": null,
  "description": "Nintendo Switch console in good working order, screen is clear and responsive. Comes with a protective travel case and a game cartridge, showing minor signs of use. Includes the original box, power adapter, and HDMI cable.",
  "images": [
    "https://img.gumtree.com/ePR8PyKf84wPHx7_RYmEag/6c05efcf2331459baf_40e02e6238b2/86"
  ],
  "url": "https://www.gumtree.com/p/other-games-consoles/nintendo-switch-console-with-case-and-game-good-condition/1803478621",
  "scrapedAt": "2026-10-05T08:04:31.448Z"
}
```

A second real record:

```json
{
  "listingId": "1803443437",
  "title": "Brand New Nintendo switch 2",
  "price": 320,
  "priceText": "£320",
  "currency": "GBP",
  "location": "Romford, London",
  "category": "electronics",
  "postedAt": null,
  "description": "Brand-new Nintendo Switch 2 console Completely unopened and unused.",
  "images": [
    "https://img.gumtree.com/ePR8PyKf84wPHx7_RYmEag/7d3a214bd41e4fda8a_ea3c39ad9efe/86"
  ],
  "url": "https://www.gumtree.com/p/other-games-consoles/brand-new-nintendo-switch-2-/1803443437",
  "scrapedAt": "2026-10-05T08:04:31.448Z"
}
```

### Key output fields

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | String | Gumtree's own numeric ad ID |
| `title` | String | Listing headline as posted |
| `price` | Number | Parsed asking price (null when the ad lists no price, e.g. "Free" or "Swap") |
| `priceText` | String | The price exactly as shown on the page |
| `currency` | String | Always `GBP` |
| `location` | String | Area/city as shown on the listing card |
| `category` | String | Echoes the `category` you passed in, so you can tell results apart when fanning out multiple runs |
| `postedAt` | String | When the ad was posted, when Gumtree's card exposes it |
| `description` | String | Short description text from the listing card (not the full ad body) |
| `images` | Array | Up to 5 image URLs from the listing card |
| `url` | String | Direct link to the ad |
| `scrapedAt` | String | ISO timestamp of the scrape |

### Pricing

| Event | Price |
|-------|-------|
| Listing scraped | $0.003 |

Pay-per-result. A 1,000-listing run costs $3; the default 50-listing run
costs $0.15.

### What makes this richer than the competition

- **memo23/gumtree-cheerio** (34 users/30d) covers Gumtree across Australia,
  UK, New Zealand and South Africa in one actor, at $1.75 per 1,000 items.
  It is a broader, multi-country tool rather than a UK-focused one.
- **bovi/gumtree-scraper** (3 users/30d) is UK-only like this actor, at $1.69
  per 1,000 items, but does not expose a dedicated category input: it is
  built around keyword search.

This actor is UK-specific and lets you target any of Gumtree's 11 categories
directly (not just cars or a single vertical), combine category, location and
keyword in one call, or hand it a fully custom search URL when you need
filters Gumtree itself does not expose as simple parameters (price range,
specific postcode).

### Notes & limitations

- `postedAt` depends on Gumtree showing a posting date on the listing card
  itself; on many cards today it does not, so this field is frequently
  `null`. The actor never guesses a date.
- `price` is `null` when the seller did not put a number on the ad (common
  for "Free", "Swap" or "Contact for price" listings). The actor reports
  exactly what Gumtree shows, it does not invent a price.
- `description` is the short text shown on the search-results card, not the
  full description from the ad's own page.
- Covers Gumtree UK only. Gumtree Australia, South Africa and other regional
  sites are out of scope for this actor.
- The actor follows Gumtree's own result pagination up to `maxPages`; for a
  category with more listings than you need in one run, narrow by location
  or keyword instead of raising `maxPages` very high.

### FAQ

**Does it need a Gumtree account or API key?**
No, listing data is public on the search results page; no login or key is
required.

**Can I search more than one category at once?**
No, each run covers one category (or a custom URL). Run it once per category
and compare results by the `category` field you passed in.

**Why is `price` sometimes `null`?**
Because the seller posted the ad without a price (e.g. "Free" or "Swap
only"). The actor never fills in a guessed number.

**Can I filter by price range or other site filters?**
Yes: build the filtered search on gumtree.com itself, copy the resulting URL,
and pass it as `startUrl`. The actor will follow its pagination as-is.

**What is the maximum number of listings per run?**
`maxItems` caps at 500. For larger coverage, split by category, location or
keyword and run multiple times.

**Can I track price changes on the same search over time?**
Yes: save the `category`/`location`/`keywords` combination (or the
`startUrl`) and run the actor on a schedule, comparing each run's output to
the previous one by `listingId`.

### For AI Agents & LLM Apps

This actor is callable from any MCP-compatible AI assistant through the
[Apify MCP server](https://mcp.apify.com), and directly from code through the
Apify API.

**Via MCP** (`mcp.apify.com`): add the Apify MCP server to your AI assistant
(Claude, ChatGPT, or any MCP client) and call the `gio21/gumtree-uk-scraper`
actor by name with a `category`, `location` or `keywords`. The assistant gets
back structured JSON it can reason over directly.

**Via API** (`run-sync-get-dataset-items`), for a synchronous call that
returns the dataset items in the same request:

```bash
curl "https://api.apify.com/v2/acts/gio21~gumtree-uk-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"category": "cars", "location": "manchester", "maxItems": 30}'
```

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by,
or sponsored by Gumtree or Adevinta. All trademarks mentioned are the
property of their respective owners.

### SEO Keywords

gumtree uk scraper, gumtree classifieds scraper, gumtree cars scraper, gumtree property scraper, gumtree api, gumtree listings scraper

# Actor input Schema

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

Gumtree category (cars, property, jobs, electronics, furniture, services, pets, baby, sports, music, books). Leave empty for all.

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

UK city/region (e.g. london, manchester, birmingham, glasgow)

## `keywords` (type: `string`):

Optional search keyword

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

Optional: direct Gumtree search URL. Overrides category/location/keywords.

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

Max listings. Each costs $0.003. Capped at 500.

## `maxPages` (type: `integer`):

Maximum number of search result pages to scrape.

## Actor input object example

```json
{
  "category": "cars",
  "location": "london",
  "maxItems": 20,
  "maxPages": 3
}
```

# Actor output Schema

## `results` (type: `string`):

Classifieds with title, price, location, 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 = {
    "category": "cars",
    "location": "london",
    "maxItems": 20,
    "maxPages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("gio21/gumtree-uk-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 = {
    "category": "cars",
    "location": "london",
    "maxItems": 20,
    "maxPages": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("gio21/gumtree-uk-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 '{
  "category": "cars",
  "location": "london",
  "maxItems": 20,
  "maxPages": 3
}' |
apify call gio21/gumtree-uk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gio21/gumtree-uk-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/lOeaCySwyFU8FDFsa/builds/iRZHGOO9nlpmWK5rH/openapi.json
