Gumtree UK Classified Listings Scraper avatar

Gumtree UK Classified Listings Scraper

Pricing

Pay per event

Go to Apify Store
Gumtree UK Classified Listings Scraper

Gumtree UK Classified Listings Scraper

Search Gumtree UK by keyword or URL and export listing prices, locations, descriptions, images, categories, dates, and public seller context.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Search Gumtree UK by keyword or process a public Gumtree search, category, or listing URL and export structured classified listings. The Actor returns stable listing IDs, asking prices, locations, categories, dates, descriptions, images, attributes, canonical URLs, and public seller context for inventory research and price monitoring.

The Actor is designed for repeatable UK marketplace workflows. It preserves the filters in supplied Gumtree URLs, paginates search results up to your limit, removes duplicate listing IDs, and can enrich each result from its public listing page.

What can you do with this Gumtree scraper?

  • Export current second-hand inventory for a keyword, category, or location.
  • Build a dated dataset of asking prices for bicycles, furniture, cars, and other classifieds.
  • Schedule the same input to identify new, removed, or price-changed listings downstream.
  • Enrich search results with full descriptions, all public images, exact timestamps, attributes, and seller type.
  • Process an individual Gumtree URL when you need one listing in a normalized format.
  • Send the default dataset to Google Sheets, a database, a webhook, or your own analysis pipeline.

This Actor covers public listings on gumtree.com in the United Kingdom. It does not cover Gumtree Australia, private messages, account-only data, sold-listing history, or contact details hidden behind login.

Who is this Actor for?

Resale and recommerce teams can refresh local inventory and compare asking prices across categories.

Dealers and marketplace analysts can monitor public trade and private listings in a defined location.

Researchers can collect consistent listing identity, category, condition, price, and time fields for one-time analysis.

Automation builders can schedule a search and compare each run by the stable listingId field.

Developers and data teams can consume typed JSON without maintaining Gumtree page parsing, pagination, retries, or normalization.

Why use this Actor?

The search page already contains useful data, so the Actor uses its embedded structured state instead of rendering a browser. A low-cost Apify datacenter proxy handles shared-IP rate limits. No residential or browser fallback is enabled.

Compared with a search-result-only export, optional detail enrichment adds:

  • the full listing description;
  • exact publication and modification timestamps when exposed;
  • every public image URL;
  • category-specific attributes;
  • public seller type, tenure, rating summary, and other-ads URL when present.

You can disable enrichment for a faster, lower-request monitoring feed while keeping IDs, titles, prices, locations, category, image links, age, and URLs from search results.

What Gumtree listing data is extracted?

FieldMeaning
listingIdStable Gumtree listing ID
urlCanonical public listing URL
titleListing title
price, priceText, currencyNumeric GBP value and displayed price
locationPublic location shown by Gumtree
categoryLeaf listing category
descriptionFull detail description or search preview
postedAt, postedAgeExact timestamp and/or displayed age
lastModifiedAtDetail-page modification timestamp when available
imagesPublic listing image URLs
attributesCondition, brand, colour, seller type, and category-specific values
sellerPublic ID, display name, type, professional flag, tenure, advert counts, rating, and other-ads URL when shown
supportsShippingWhether search results advertise delivery support
sourceUrlInput search or listing URL that produced the row
scrapedAtTimestamp when the record was produced

Fields may be null when Gumtree does not expose the value for that category or seller.

How to get started

  1. Open the Actor in Apify Console.
  2. Add one or more Search keywords, or paste public gumtree.com URLs into Gumtree search or listing URLs.
  3. Set Maximum listings between 1 and 500.
  4. Keep Enrich from listing details enabled for complete descriptions and seller context, or disable it for a lightweight search feed.
  5. Click Start.
  6. Open the Gumtree listings dataset view, download JSON/CSV/Excel, or connect an integration.
  7. For monitoring, schedule the same input and compare records by listingId, price, and lastModifiedAt in your destination.

A simple keyword input:

{
"keywords": ["bicycle"],
"maxItems": 25,
"includeDetails": true
}

A filtered URL input:

{
"startUrls": [
{
"url": "https://www.gumtree.com/search?search_category=cars&search_location=belfast&q=ford"
}
],
"maxItems": 50,
"includeDetails": true
}

Input parameters

keywords

An array of non-empty search terms. Each term is searched across Gumtree UK. Example: bicycle, sofa, or camera lens.

startUrls

Public HTTPS URLs on gumtree.com. Supported pages include:

  • search URLs;
  • category/location URLs that expose Gumtree search results;
  • individual /p/.../<listing-id> pages.

Supplying a filtered URL is the best way to preserve Gumtree category, location, sort, and other public URL filters.

maxItems

Maximum unique listings saved across all keywords and URLs. The default is 25 and the hard maximum is 500. The Actor stops scheduling work when the limit is reached.

includeDetails

Defaults to true. When enabled, the Actor fetches each accepted listing page. When disabled, it emits the rich search-page record without a detail request.

At least one keyword or start URL is required. Non-Gumtree URLs, blank keywords, and out-of-range limits fail with a non-zero run status.

Output example

The following anonymized example reflects the shape produced by a current enriched run:

{
"listingId": "1700123456",
"url": "https://www.gumtree.com/p/city-bikes/hybrid-bicycle/1700123456",
"title": "Hybrid bicycle in good condition",
"price": 85,
"priceText": "£85.00",
"currency": "GBP",
"location": "Belfast City Centre, Belfast",
"category": "City Bikes",
"description": "A well-maintained bicycle with recent servicing.",
"postedAt": "2026-08-15T12:00:00.000Z",
"postedAge": "3 hours ago",
"lastModifiedAt": "2026-08-15T12:05:00.000Z",
"images": [
"https://img.gumtree.com/example-image/86"
],
"attributes": {
"Condition": "Good condition",
"Seller type": "Private"
},
"seller": {
"id": "60012345",
"name": "Example seller",
"type": "Private",
"isProfessional": false,
"postingSince": "2+ years",
"adsPostedLastYear": 4,
"totalAds": 6,
"rating": 4.8,
"ratingCount": 12,
"otherAdsUrl": "https://www.gumtree.com/sellerads/1700123456?userId=60012345"
},
"supportsShipping": false,
"sourceUrl": "https://www.gumtree.com/search?q=bicycle&search_location=uk",
"scrapedAt": "2026-08-15T12:10:00.000Z"
}

The primary output is always the run's default dataset, making it compatible with Apify exports, API clients, schedules, webhooks, and integrations.

How much does it cost to scrape Gumtree UK listings?

The Actor uses pay-per-event pricing:

  • one start event per run;
  • one item event for each unique listing saved to the dataset.

The current start event is $0.005. The current BRONZE item tier is $0.002932 per listing, with lower item prices on higher usage tiers. Detail enrichment does not create a second item event.

TierPrice per listing
FREE$0.0033718
BRONZE$0.002932
SILVER$0.002287
GOLD$0.0017592
PLATINUM$0.0011728
DIAMOND$0.00082096

Example BRONZE totals before any platform-specific account adjustments:

ListingsCalculationActor charge
5$0.005 + 5 × $0.002932$0.01966
25$0.005 + 25 × $0.002932$0.07830
100$0.005 + 100 × $0.002932$0.29820

Apify Console displays the applicable tier and maximum charge before a run. A no-result search incurs only the start event. Failed or malformed records are not charged as items.

Monitoring and integration workflows

Scheduled inventory monitoring

Run the same search daily or hourly, store rows in a database, and use listingId as the source key. Compare the latest and previous snapshots to flag new listings, disappeared IDs, and asking-price changes.

Local price research

Use a Gumtree URL with location and category filters, then group rows by category, condition, seller type, or location. Keep scrapedAt so every observation has a collection time.

Spreadsheet export

Use Apify's Google Sheets integration or download CSV/Excel from the dataset. Arrays and objects remain available in JSON for richer processing.

Webhooks and data pipelines

Attach a run-succeeded webhook to send the dataset ID into your ETL job. The sourceUrl field lets a multi-search pipeline trace every row back to its input.

Use the Actor through the Apify API

Set APIFY_TOKEN in your environment rather than hard-coding it.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~gumtree-uk-classified-listings-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["bicycle"],"maxItems":25,"includeDetails":true}'

To wait for completion and return dataset items:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~gumtree-uk-classified-listings-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["sofa"],"maxItems":10,"includeDetails":true}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/gumtree-uk-classified-listings-scraper').call({
keywords: ['bicycle'],
maxItems: 25,
includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/gumtree-uk-classified-listings-scraper').call(
run_input={
'keywords': ['bicycle'],
'maxItems': 25,
'includeDetails': True,
}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use Gumtree data with MCP and AI agents

Add the Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/gumtree-uk-classified-listings-scraper"

Claude Desktop

Add this server in Claude Desktop's MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/gumtree-uk-classified-listings-scraper"
}
}
}

Cursor

Add the same apify HTTP server URL in Cursor's MCP settings, then enable the Actor tool for your workspace.

VS Code

Add the same apify HTTP server URL through your VS Code MCP extension or workspace MCP configuration.

Example prompts:

  • "Run the Gumtree UK scraper for bicycle, return 20 enriched listings, and summarize median asking price by location."
  • "Process this filtered Gumtree Belfast cars URL and save the structured records."
  • "Compare these Gumtree listing IDs with yesterday's dataset and identify new or price-changed items."

The AI agent can start the Actor and inspect its dataset; comparison across runs must be performed by the agent or your downstream storage.

Tips for reliable results

  • Prefer a filtered Gumtree URL when category or location precision matters.
  • Start with a small maxItems while validating a new workflow.
  • Disable includeDetails when search-result fields are enough and freshness matters more than enrichment.
  • Keep stable snapshots outside the run dataset if you need historical comparisons; each run has a separate default dataset.
  • Use the exact listingId rather than a title as the deduplication and join key.
  • Expect listings to disappear between search and detail retrieval. In that case, the Actor preserves the useful search record rather than discarding it.

Limits and failure behavior

Gumtree controls the public data and may change page structure, filters, availability, or rate limits. The Actor validates recognizable embedded listing data and fails rather than silently emitting empty output for a challenge or unknown page shape.

Transient network errors, HTTP 429 responses, HTTP 5xx responses, and shared-IP blocks are retried up to three times with fresh datacenter proxy routes and backoff. Stable invalid URLs are not retried blindly.

A genuinely empty search completes successfully with zero item events. A URL that is public but is not a recognizable search or listing page fails clearly.

The Actor does not:

  • log in to Gumtree;
  • reveal hidden phone numbers or private messages;
  • scrape Gumtree Australia or other country domains;
  • reconstruct sold or deleted listing history;
  • send alerts or compare snapshots by itself;
  • guarantee that every seller supplies every field.

Responsible use and legality

Use the Actor only for public data you are permitted to collect. Review Gumtree's terms, robots guidance, and applicable laws before running at scale.

Do not use public seller data for harassment, discrimination, spam, or unlawful profiling. Minimize stored personal data, secure exports, set retention periods, and honor valid deletion or access requests. The Actor intentionally excludes login-only contact details and session tokens.

You are responsible for your input, schedule, downstream processing, and compliance with privacy, consumer-protection, intellectual-property, and database-rights rules in your jurisdiction.

Troubleshooting

Why did my run return zero listings?

Open the same keyword or URL in Gumtree and confirm it currently has results. A valid no-result search completes with zero dataset rows. Check that location/category filters are not too restrictive.

Why did the run fail on my URL?

Only public HTTPS URLs on gumtree.com are accepted. Seller dashboards, private account pages, other country domains, and unrelated URLs are unsupported. Use a public search/category URL or an individual /p/ listing URL.

Why are some fields null?

Gumtree categories and sellers expose different fields. Keep detail enrichment enabled for the richest record. A listing removed between search and detail collection may retain search fields while detail-only fields remain null.

How do I diagnose an upstream change?

Inspect the run log for the status code and parser message, then check the same public URL. The Actor reports unrecognized page data as an error instead of treating it as an empty search.

Use this Actor when the buyer job is specifically UK Gumtree inventory and asking-price monitoring.

FAQ

Can I search several keywords in one run?

Yes. Add multiple values to keywords. maxItems applies across all keywords and URLs, and duplicate Gumtree IDs are saved only once.

Can I scrape one listing URL?

Yes. Put the public Gumtree /p/ URL in startUrls. The Actor emits one enriched record if the listing remains public.

Does the Actor download images?

No. It exports public image URLs without downloading image binaries, which keeps runs lightweight.

Does it monitor prices automatically?

It produces timestamped snapshots suitable for monitoring. Use Apify schedules plus a database, spreadsheet, or automation workflow to compare runs.

Are detail records charged twice?

No. Each saved listing emits one item event whether detail enrichment is enabled or disabled.

What happens when a listing disappears during a run?

If the listing was found in a search but its detail page becomes unavailable, the Actor keeps the useful search record and logs the enrichment failure. An explicitly supplied unavailable listing URL fails because there is no valid fallback record.