# Gumtree Classifieds Scraper (`rambunctious_fingerprint/gumtree-scraper`) Actor

Scrape Australian classifieds from Gumtree.com.au — extract listing titles, prices, descriptions, locations, and seller details by search query.

- **URL**: https://apify.com/rambunctious\_fingerprint/gumtree-scraper.md
- **Developed by:** [Casey Marsh](https://apify.com/rambunctious_fingerprint) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.75 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Australia Classifieds Scraper

Extract classified ad listings from Gumtree Australia — the country's largest online marketplace for second-hand goods, vehicles, real estate, jobs, and services. Get listing titles, prices, locations, descriptions, seller types, images, and category metadata. Ideal for market research, price comparison, deal hunting, and lead generation.

### Summary

The Gumtree Australia Classifieds Scraper is a production-grade Apify actor that extracts listings from [gumtree.com.au](https://www.gumtree.com.au), which hosts millions of active classified ads across hundreds of categories including cars, electronics, home & garden, jobs, real estate, and services. Whether you're tracking used car prices, monitoring rental markets, researching competitor pricing, or building a deal alert system, this actor provides clean structured data ready for analysis.

Built on Crawlee's CheerioCrawler with Apify residential proxy rotation, the actor handles Gumtree's anti-scraping measures, rate limiting, and variable page structures. It uses an extensive array of CSS selector fallbacks to maintain reliability across Gumtree's frequent frontend updates, automatically paginates through multi-page results, and gracefully logs errors without data loss.

### How It Works

1. **Input**: Provide a full Gumtree search URL, or build one from category, location, search term, price range, condition, and seller type parameters.
2. **URL Construction**: If no `searchUrl` is given, the actor constructs the correct Gumtree URL pattern (`/s-{location}/{category}/page-1/{categoryId}`) with optional query parameters.
3. **Listing Detection**: The actor tries multiple CSS selectors to find listing cards — Gumtree's class names change frequently, so a cascade of fallbacks ensures resilience.
4. **Field Extraction**: For each card, all available fields are extracted: title, price, location, listing age, image URL, category, description, seller type, featured/urgent badges, and ad ID.
5. **Pagination**: The actor follows pagination controls (Next button, page-number links) or uses the `/page-N/` URL pattern to continue scraping until the max listings limit is reached.
6. **Error Handling**: Blocked pages, rate limits, and timeouts are detected and automatically retried with fresh residential proxy IPs. Failed requests after all retries are saved as error records.
7. **Output**: Structured JSON saved to your Apify dataset with ISO 8601 scrape timestamps for every listing.

### Input Parameters

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `searchUrl` | string | No | — | Full Gumtree search URL to scrape directly (e.g., `https://www.gumtree.com.au/s-cars/sydney`) |
| `searchTerm` | string | No | — | Keywords to search within the category (e.g., `corolla`, `iphone 15`) |
| `category` | string | No | `cars-vans-utes` | Category slug (e.g., `cars-vans-utes`, `home-garden`, `electronics-computers`) |
| `categoryId` | string | No | `c18320` | Numeric category ID from Gumtree's URL structure |
| `location` | string | No | — | Australian city/region (e.g., `sydney`, `melbourne`, `brisbane`, `perth`) |
| `minPrice` | number | No | — | Minimum price filter in AUD |
| `maxPrice` | number | No | — | Maximum price filter in AUD |
| `condition` | string | No | — | Item condition: `new`, `used`, or `demo` |
| `sellerType` | string | No | — | Seller type: `private` or `dealer` |
| `sortBy` | string | No | — | Sort order: `price_ascending`, `price_descending`, `time_updated_descending`, `distance` |
| `maxListings` | integer | No | `100` | Maximum number of listings to scrape (1–1000) |

### Output Example

```json
{
  "title": "2019 Toyota Corolla Ascent Sport - Low KMs, Full Service History",
  "price": "$22,500",
  "link": "https://www.gumtree.com.au/s-ad/sydney-city/cars-vans-utes/2019-toyota-corolla/1234567890",
  "location": "Sydney CBD, NSW 2000",
  "listedDate": "2 hours ago",
  "imageUrl": "https://i.ebayimg.com/images/g/abc123/s-l800.jpg",
  "category": "Cars & Vehicles",
  "description": "Excellent condition 2019 Corolla, 45,000km, full Toyota service history, rego until Dec 2026...",
  "sellerType": "Private",
  "isFeatured": false,
  "isUrgent": false,
  "adId": "1234567890",
  "searchCategory": "cars-vans-utes",
  "searchLocation": "sydney",
  "searchTerm": "corolla",
  "scrapedAt": "2026-07-04T10:30:00.000Z"
}
````

### Pricing

This actor uses Apify's pay-per-result pricing model — you only pay for the listings you successfully extract. No monthly fees, no subscriptions, no minimum usage requirements. A typical run of 100 Gumtree listings costs a few cents of Apify platform credit.

Residential proxies are the default configuration due to Gumtree's bot detection. CheerioCrawler (not Playwright) keeps per-request costs low — each page is downloaded and parsed in 1–3 seconds without the overhead of a headless browser. You can adjust the `proxyConfig` input to use datacenter proxies for reduced costs, though this may trigger rate limiting on larger runs.

### Use Cases

- **Market Research and Price Comparison**: Track asking prices for cars, electronics, furniture, and other goods across Australian cities. Build price indices and depreciation curves for specific makes and models.
- **Deal Hunting and Alerts**: Monitor newly listed items matching your criteria (e.g., specific car models under a price threshold) and receive automated alerts when bargains appear.
- **Second-Hand Market Analysis**: Understand supply and demand dynamics in the Australian second-hand economy. Track listing volumes, average prices, and time-to-sell across categories.
- **Lead Generation**: Identify sellers who frequently list high-value items, or find listings that have been active for extended periods (indicating motivated sellers open to negotiation).
- **Vehicle Market Intelligence**: For car dealers and buyers, track competitor inventory, monitor price positioning, and identify market gaps by make, model, year, and location.
- **Rental Property Monitoring**: Scrape Gumtree's real estate rental listings to track rental prices, vacancy indicators, and market movements in specific suburbs.

### FAQ

**Q: Do I need a Gumtree account?**
A: No. This actor scrapes publicly visible Gumtree listings. No account, login, or API key is required.

**Q: Can I scrape any Gumtree category?**
A: Yes. Any category accessible on gumtree.com.au can be scraped. Use the `searchUrl` parameter with any valid Gumtree search/browse URL, or build the URL from the category and location parameters.

**Q: How do I find the correct `categoryId`?**
A: Browse Gumtree to your desired category and copy the number from the URL. For example, `https://www.gumtree.com.au/s-cars-vans-utes/c18320` — the category ID is `c18320`. If you provide a `searchUrl` directly, you don't need the category ID.

**Q: What if Gumtree changes its HTML structure?**
A: The actor uses an extensive cascade of CSS selector fallbacks for listing cards and individual fields. If primary selectors fail, alternates are tried automatically. The actor also includes a last-resort fallback that extracts ad links directly from anchor tags. Failed card extractions are logged but don't stop the overall crawl.

**Q: Can I scrape Gumtree in other countries?**
A: This actor is configured for gumtree.com.au (Australia). Gumtree operates in other countries (UK, South Africa, Poland, etc.) with similar but not identical page structures. You can try using the `searchUrl` parameter with a non-Australian URL, but field extraction may be less reliable.

**Q: How does the actor handle featured and urgent listings?**
A: The actor detects featured and urgent badges via CSS class detection and captures them as boolean flags (`isFeatured`, `isUrgent`) in the output. This is useful for separating organic listings from paid promotions.

**Q: Can I scrape seller contact details?**
A: Gumtree hides seller phone numbers and emails behind a "Reveal" button that requires JavaScript interaction. This Cheerio-based actor does not interact with JavaScript — for contact details, you would need a Playwright/Puppeteer-based scraper that can click buttons and handle modals.

***

**Actor ID**: `gumtree-scraper` · **Runtime**: Node.js 20 · **Type**: CheerioCrawler

# Actor input Schema

## `searchUrl` (type: `string`):

Full Gumtree search URL to scrape (default: https://www.gumtree.com.au/s-cars-vans-utes/c18320)

## `maxListings` (type: `integer`):

Maximum number of listings to scrape

## Actor input object example

```json
{
  "searchUrl": "https://www.gumtree.com.au/s-cars-vans-utes/c18320",
  "maxListings": 5
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("rambunctious_fingerprint/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("rambunctious_fingerprint/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 '{}' |
apify call rambunctious_fingerprint/gumtree-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Gumtree Classifieds Scraper",
        "description": "Scrape Australian classifieds from Gumtree.com.au — extract listing titles, prices, descriptions, locations, and seller details by search query.",
        "version": "0.0",
        "x-build-id": "0nKd4S2dlcIxD2CSz"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/rambunctious_fingerprint~gumtree-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-rambunctious_fingerprint-gumtree-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/rambunctious_fingerprint~gumtree-scraper/runs": {
            "post": {
                "operationId": "runs-sync-rambunctious_fingerprint-gumtree-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/rambunctious_fingerprint~gumtree-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-rambunctious_fingerprint-gumtree-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchUrl": {
                        "title": "Search URL",
                        "type": "string",
                        "description": "Full Gumtree search URL to scrape (default: https://www.gumtree.com.au/s-cars-vans-utes/c18320)",
                        "default": "https://www.gumtree.com.au/s-cars-vans-utes/c18320"
                    },
                    "maxListings": {
                        "title": "Max Listings",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
