Gumtree UK Classified Listings Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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?
| Field | Meaning |
|---|---|
listingId | Stable Gumtree listing ID |
url | Canonical public listing URL |
title | Listing title |
price, priceText, currency | Numeric GBP value and displayed price |
location | Public location shown by Gumtree |
category | Leaf listing category |
description | Full detail description or search preview |
postedAt, postedAge | Exact timestamp and/or displayed age |
lastModifiedAt | Detail-page modification timestamp when available |
images | Public listing image URLs |
attributes | Condition, brand, colour, seller type, and category-specific values |
seller | Public ID, display name, type, professional flag, tenure, advert counts, rating, and other-ads URL when shown |
supportsShipping | Whether search results advertise delivery support |
sourceUrl | Input search or listing URL that produced the row |
scrapedAt | Timestamp 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
- Open the Actor in Apify Console.
- Add one or more Search keywords, or paste public
gumtree.comURLs into Gumtree search or listing URLs. - Set Maximum listings between 1 and 500.
- Keep Enrich from listing details enabled for complete descriptions and seller context, or disable it for a lightweight search feed.
- Click Start.
- Open the Gumtree listings dataset view, download JSON/CSV/Excel, or connect an integration.
- For monitoring, schedule the same input and compare records by
listingId,price, andlastModifiedAtin 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
startevent per run; - one
itemevent 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.
| Tier | Price 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:
| Listings | Calculation | Actor 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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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
maxItemswhile validating a new workflow. - Disable
includeDetailswhen 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
listingIdrather 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.
Related Automation Lab Actors
- Bazoš Czech Classifieds Scraper for Czech classified listings.
- OLX Brazil Classifieds Scraper for Brazilian marketplace inventory.
- Facebook Marketplace Public Listings Scraper for supported anonymous public Marketplace searches.
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.