Gumtree AU Scraper - Listings, Sellers & Reviews avatar

Gumtree AU Scraper - Listings, Sellers & Reviews

Pricing

from $1.10 / 1,000 listing results

Go to Apify Store
Gumtree AU Scraper - Listings, Sellers & Reviews

Gumtree AU Scraper - Listings, Sellers & Reviews

Scrape gumtree.com.au classifieds across every vertical: for-sale goods, motors, real estate, jobs and services. Get title, description, price, all photos, GPS coordinates, category attributes, and seller profile + aggregate rating. Search by category + location + keyword, or paste any Gumtree URL.

Pricing

from $1.10 / 1,000 listing results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

20

Total users

7

Monthly active users

11 days ago

Last modified

Share

Gumtree Australia Scraper: Listings, Prices and Seller Ratings

Gumtree Australia Scraper turns gumtree.com.au into structured classifieds data. Get listing details, prices, photos, category attributes and the seller's aggregate rating for every vertical Gumtree carries: for-sale goods, motors, real estate, jobs and services. Search by category, location and keyword, or paste any gumtree.com.au URL you already refined in your browser, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • Two ways to find listings. Build a query from category, location and keyword, or paste a gumtree.com.au category-and-location search or listing URL directly.
  • Every vertical in one actor. Motors, real estate, jobs, services and for-sale goods, each carrying its own category-specific attributes flattened into one object.
  • Seller rating on every listing. The overall score, the number of ratings behind it and any trust badges, with a null value whenever Gumtree simply has not published one for that seller yet.
  • Optional detail enrichment. Turn on Fetch full listing detail to add the untruncated description, precise location (latitude, longitude, postcode, suburb, map address) and the seller's published phone number, and pay only for the listings actually enriched.
  • Attributable enrichment. Every enriched record carries a status field, so a listing with no location is always attributable to a specific outcome rather than looking like data that was simply never collected.
  • Tuned for Australia. Default connection settings are built around the fact that gumtree.com.au serves Australian visitors.
  • Pipe results into your apps. Send a summary of each listing straight into Notion, Linear or Airtable through MCP connectors, no separate integration to build.

Use Cases

  • Vehicle marketplaces and pricing tools: track make, model, price and mileage across Australian sellers, with a link to the vehicle history report where one exists.
  • Classifieds aggregators: mirror for-sale, real estate, jobs and services listings from Gumtree into your own search index.
  • Lead generation and CRM enrichment: capture seller name, rating and, with detail enrichment on, a published phone number for outreach, subject to your own obligations under Australian privacy law.
  • Property research: pull real estate listings by suburb, city or state with bedroom and bathroom attributes for rent and sale comparisons.
  • Market and pricing research: build price datasets for a category or keyword across regions and track how listings move over time.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id"1300000000"
url"https://www.gumtree.com.au/web/listing/cars-vans-utes/1300000000"
title / description"2016 Toyota HiLux SR5 Dual Cab" / "One owner, full service history..."
price / priceText / priceType32990 / "$32,990" / "FIXED"
currency"AUD"
minimumOfferPrice / previousPriceString30000 / "$34,990"
isFree / isNegotiable / isSwapTrade / isDriveAwayfalse / true / false / false
vertical"motors" (also "property", "jobs", "services", "for-sale")
categoryId / categoryName"9299" / "Cars, Vans & Utes"
location / locationArea / locationState"Parramatta" / "Western Sydney" / "NSW"
age"2 hours ago"
images / imageCountarray of photo URLs / 8
hasVideo / videosfalse / [] (video URLs are not currently extracted)
attributesflattened category fields, for example mileage, body type and transmission for cars, or bedrooms and bathrooms for property
carVin / carRecordReportUrl"MMSAAAAAAAA000000" / a vehicle history report link (motors only, when present)
isFeatured / isUrgent / isHighlighted / isPremium / isTopAdprominence flags set by the seller's ad package
numberOfViews / numberOfReplies / numberOfOffers340 / 12 / 3
sellerName / seller"Example Motors" / nested rating object, see below
isWanted / adTypefalse / "OFFER" (also "WANTED")
detailFetched / detailStatustrue / "enriched" (meaningful only when Fetch full listing detail is on)
fullDescriptionthe untruncated advert text (detail enrichment only)
latitude / longitude / postcode / suburb / mapAddressprecise geo (detail enrichment only)
scrapedAt"2026-07-04T00:00:00+00:00"

A record built from a search result carries the coarse locality (location / locationArea, where locationArea actually holds the postcode / locationState), the search snippet in description, and the flattened category attributes; a record built by pasting a single listing URL carries the listing page's own structured data instead, so categoryName, priceText, priceType, age and attributes are not populated for that record, and detailFetched, detailStatus, fullDescription, latitude, longitude, postcode, suburb and mapAddress only appear once detail is fetched (always for a pasted listing URL, or when Fetch full listing detail is on for a search result). When detail is fetched, description is replaced with the full listing text, matching fullDescription. vertical is always "for-sale" regardless of category, and every is* flag plus hasVideo is always false; none of these are meaningfully populated by this actor. The seller object always carries name, type ("dealer" when Gumtree flags the poster as a dealer, otherwise null, there is no separate "private" value), rating, reviewCount and ratingBadges; phone, phoneExists and phoneVerified are filled only when Fetch full listing detail is on. Gumtree publishes only an aggregate seller rating, an overall score, the number of ratings behind it and any trust badges, never the individual buyer reviews or a star-by-star breakdown, so reviews and ratingDistribution are always null. Business and service ads may also carry a website field with the seller's linked site.

How to Use

  1. Pick a Search mode: search (build a query from category, location and keyword) or url (paste one or more gumtree.com.au URLs).
  2. For search mode, choose a category, a location and an optional keyword, then refine with price, sort order and radius. For URL mode, paste search-result or listing URLs; the category, location, page, price range and sort order already in the URL are respected, so the category, location, keyword, price, sort and radius fields are ignored, while on pasted search URLs every seller, vehicle and listing-date filter applies; on pasted listing URLs only make, model and year apply, because a listing page does not carry seller type, mileage, fuel, transmission or post age. Price change monitoring applies to every result. Keyword paths (.../toyota+hilux/k0c...) are read; attribute filters other than price and sort are not.
  3. Set Max listings and Max result pages per search to control the size and cost of the run.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search for cars in a price range:

{
"mode": "search",
"category": "cars-vehicles",
"location": "Sydney",
"keywords": "toyota hilux",
"sortBy": "price_asc",
"minPrice": 10000,
"maxPrice": 40000,
"maxItems": 100,
"maxPages": 5
}

Browse a whole category across a state:

{
"mode": "search",
"category": "real-estate",
"location": "NSW",
"maxItems": 50
}

Paste a gumtree.com.au search URL:

{
"mode": "url",
"urls": [
"https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435"
],
"maxItems": 200,
"maxPages": 10
}

Paste a single listing URL with full detail enrichment:

{
"mode": "url",
"urls": [
"https://www.gumtree.com.au/s-ad/parramatta/cars-vans-utes/2016-toyota-hilux-sr5-dual-cab/1300000000"
],
"fetchDetails": true
}

Supported URL shapes (URL mode)

If you leave urls untouched in URL mode, the actor now runs the example list below (one URL per shape) instead of doing nothing, so set your own URLs or maxItems first. Seller pages and bare /<id> links are not supported: each is skipped with a warning, and a run where no URL is supported fails with a clear message.

ShapeExample
category locationhttps://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435
paginatedhttps://www.gumtree.com.au/s-cars-vans-utes/sydney/page-2/c18320l3003435
category onlyhttps://www.gumtree.com.au/s-cars-vans-utes/c18320
regionhttps://www.gumtree.com.au/s-cars-vans-utes/nsw/c18320l3008839
category no locationhttps://www.gumtree.com.au/s-cars-vans-utes/c18320l3003435
keyword k0https://www.gumtree.com.au/s-cars-vans-utes/sydney/toyota+hilux/k0c18320l3003435
keyword onlyhttps://www.gumtree.com.au/s-toyota/k0
all categorieshttps://www.gumtree.com.au/s-all/c0
location onlyhttps://www.gumtree.com.au/s-sydney/c0l3003435
sort datehttps://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?sort=date
price filterhttps://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?price=5000__10000
view galleryhttps://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?view=gallery
real estatehttps://www.gumtree.com.au/s-property-for-sale/sydney/c18364l3003435
jobshttps://www.gumtree.com.au/s-jobs/sydney/c9302l3003435
detailhttps://www.gumtree.com.au/web/listing/cars-vans-utes/1344633156
legacy adhttps://www.gumtree.com.au/s-ad/1344633156
legacy ad longhttps://www.gumtree.com.au/s-ad/sydney/cars-vans-utes/x/1344633156

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/gumtree-au-scraper").call(run_input={
"mode": "search",
"category": "cars-vehicles",
"location": "Sydney",
"maxItems": 50,
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["title"], listing["priceText"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/gumtree-au-scraper').call({
mode: 'search',
category: 'cars-vehicles',
location: 'Sydney',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Filters, multi-search and price monitoring

InputWhat it does
keywordList, locationListOne search per keyword x location, de-duplicated across searches.
sellerTypeprivate or trade, from each listing's dealer flag.
carMake, carModel, carYearMin, carYearMax, carMileageMin, carMileageMax, carFuelType, carTransmissionNarrow vehicle results using the listing's attributes. A listing missing the attribute is skipped when its filter is set. These are applied after fetching, so a tight filter scans more pages (bounded by maxPages).
listingStartDateListings posted on or after a date, from the site's relative age (approximate to the day).
priceChangeMonitoringdrops or any. With incremental mode on, rows carry previousPrice and only price-changed listings are emitted. With incremental mode off there is no previous run to compare, so drops and any behave the same: they keep only listings the site itself flags as price-dropped.

Extra output fields: totalImages, status and phoneNumberExists (the last two need fetchDetails), and previousPrice on updated incremental rows. On pasted search URLs every filter applies; on pasted listing URLs only make, model and year apply, because a listing page does not carry seller type, mileage, fuel, transmission or post age (the run logs a warning when other filters are set). priceChangeMonitoring applies to both. A listing that fails a filter is neither pushed nor billed. Filters change only which rows are kept; billing is unchanged.

Send results into your apps (MCP connectors)

Optionally pipe the scraped listings into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each listing, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (build a query) or url (paste gumtree.com.au URLs).
urlsarrayone example URL per supported shape (see URL table)gumtree.com.au search or listing URLs (url mode).
categorystringallTop-level vertical to search: all categories, cars and vehicles, real estate, jobs, services, and more (search mode).
locationstringnone (prefill: Sydney)Suburb, city, region or state (search mode). Empty searches all of Australia.
keywordsstringnoneFree-text keyword (search mode). Empty browses the whole category.
keywordListarraynoneSeveral keywords; one search per keyword x location, de-duplicated (search mode).
locationListarraynoneSeveral locations; combined with keywordList (search mode).
sellerTypestringnoneprivate or trade listings only.
carMakestringnoneVehicle make filter, applied after fetching.
carModelstringnoneVehicle model filter, applied after fetching.
carYearMinintegernoneEarliest vehicle year.
carYearMaxintegernoneLatest vehicle year.
carMileageMinintegernoneMinimum mileage (km).
carMileageMaxintegernoneMaximum mileage (km).
carFuelTypestringnoneVehicle fuel type filter.
carTransmissionstringnoneVehicle transmission filter.
listingStartDatestringnoneOnly listings posted on or after this date (approximate to the day).
priceChangeMonitoringstringnonenone, drops or any; with incremental mode on, only price-changed listings are emitted and rows carry previousPrice.
adTypestringnoneRetired hidden field, kept only so saved Task inputs keep loading; the value is not read and has no effect.
sortBystringnoneSort order: best match, most recent, price, or (for motors) mileage and year.
minPriceintegernoneOnly return listings priced at or above this amount (AUD).
maxPriceintegernoneOnly return listings priced at or below this amount (AUD).
radiusintegernoneExpand the search around the chosen location by this many kilometres.
fetchDetailsbooleanfalseAlso fetch each listing's page for the full description, precise location and seller phone.
maxItemsinteger100Stop after this many listings across the whole run (0 = no limit, bounded by Max pages; schema maximum 100000).
maxPagesinteger0How many result pages to walk forward per search (24 listings per page). 0 = the built-in limit of 5 pages; values above 100 are capped at 100 pages per search.
proxyobjectApify Residential proxy, country AUConnection settings.
resumeFromRunIdstringnonePaste a previous run id or dataset id to continue an interrupted crawl: listings already collected there are skipped so this run returns only the delta.
incrementalModebooleanfalseFor a search you run on a schedule: the actor remembers the previous run itself and returns only NEW / UPDATED / REAPPEARED / EXPIRED listings, plus UNCHANGED ones if you ask for them.
stateKeystringnoneOptional label isolating one search's incremental state. Leave empty to derive it from the mode, URLs, category, location, keywords, sort, price and radius filters and the detail toggle.
emitUnchangedbooleanfalseAlso return (and pay for) listings with no change since the previous incremental run.
emitExpiredbooleanfalseAlso return (and pay for) listings no longer found, once, with changeType EXPIRED. Only after a run that reached the natural end of results, never after a capped or cut-short run.
ignoreFieldsForChangesarraynoneField names whose changes never mark a listing UPDATED in incremental mode. age and the numberOfViews, numberOfReplies and numberOfOffers counters are ignored by default (they move on their own). Entries can be top-level fields or nested paths like seller.rating, seller.* or images[].
mcpConnectorsarraynoneOptional: send a summary of each listing to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which items are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Resume and recurring updates

Two independent features share the ๐Ÿ” Resume & recurring updates section.

Resume from run continues one interrupted crawl. Paste the interrupted run's id (or its dataset id) into resumeFromRunId and the run skips every listing that crawl already collected, returning only the delta. If the id cannot be read, the run stops with a clear message instead of re-collecting everything.

Incremental mode is for monitoring the same search on a schedule. Turn incrementalMode on and each run remembers the previous run itself, in a private state store keyed on your full filter set (or on stateKey, if you give one). Every listing is classified:

  • NEW: not in the saved state.
  • UPDATED: present before, with a changed field; changedFields names the top-level fields that changed.
  • UNCHANGED: present before, nothing changed. Suppressed by default so a recurring run returns and bills only what changed; emitUnchanged also returns them.
  • REAPPEARED: previously EXPIRED, found again.
  • EXPIRED: tracked before, absent this run after the scan reached the natural end of results. Returned once with emitExpired on, then dropped from tracking. A capped or cut-short run never marks anything EXPIRED, so a live listing is never wrongly declared gone.

Each returned record carries changeType, changedFields, firstSeenAt and lastSeenAt. Fields that change on their own never bill a listing as UPDATED: age (the relative listed-time string) and the view/reply/offer counters are ignored by default, and ignoreFieldsForChanges lets you exclude any other field or nested path the same way.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"id": "1300000000",
"url": "https://www.gumtree.com.au/web/listing/cars-vans-utes/1300000000",
"title": "2016 Toyota HiLux SR5 Dual Cab",
"description": "One owner, full service history, tow bar and canopy included. Logbooks available, always garaged.",
"price": 32990,
"priceText": "$32,990",
"priceType": "FIXED",
"currency": "AUD",
"vertical": "for-sale",
"categoryId": "9299",
"categoryName": "Cars, Vans & Utes",
"location": "Parramatta",
"locationArea": "Western Sydney",
"locationState": "NSW",
"age": "2 hours ago",
"images": [
"https://images.gumtree.com.au/image/private/t_$_35/move/aaaaaaaa-1111-2222-3333-444444444444"
],
"imageCount": 8,
"attributes": {
"carmileageinkms": "98000 km",
"carbodytype": "Ute",
"cartransmission": "Auto"
},
"carVin": "MMSAAAAAAAA000000",
"sellerName": "Example Motors",
"seller": {
"name": "Example Motors",
"type": "dealer",
"rating": 4.6,
"reviewCount": 38,
"ratingBadges": ["ID_VERIFIED"],
"ratingDistribution": null,
"reviews": null,
"phone": "+61491570006",
"phoneExists": true,
"phoneVerified": false
},
"detailFetched": true,
"detailStatus": "enriched",
"fullDescription": "One owner, full service history, tow bar and canopy included. Logbooks available, always garaged.",
"latitude": -33.8150,
"longitude": 151.0000,
"postcode": "2150",
"suburb": "Parramatta",
"state": "NSW",
"mapAddress": "Parramatta NSW 2150",
"numberOfViews": 340,
"numberOfReplies": 12,
"numberOfOffers": 3,
"isFeatured": true,
"scrapedAt": "2026-07-04T00:00:00+00:00"
}

Plan Requirement

This actor needs residential proxy access. gumtree.com.au answers datacenter addresses with an empty 403 block page (measured 2026-10-15 through the Apify datacenter group and the automatic group), so the default is Apify Residential proxy with country set to Australia, which is included on paid Apify plans (or supply your own proxy URLs). On a free plan, which has no residential proxies, the run logs this warning and continues on a backup connection where some pages may still be unavailable:

The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable. For residential access, upgrade at https://apify.com/pricing or supply your own proxy URLs.

If the backup connection serves pages, the log notes: "Served over the backup connection (the default connection was unavailable)." If no page loads, the run fails with one of these messages instead of returning a silent empty dataset: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required", "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Gumtree pages", or "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search."

FAQ

How much does it cost?

You pay per listing returned in the dataset (the dataset-item event) plus the actor start event. Detail enrichment has its own detail-enrichment event, charged once per listing actually enriched when Fetch full listing detail is on; it is registered to take effect from 2026-10-22, so before that date enrichment is not billed. The Pricing tab shows the exact current rates. Use Max listings to cap the cost of any run.

This actor collects only publicly available classified listings and their aggregate seller rating. You are responsible for how you use the data: follow Gumtree's terms and the laws that apply to you, including Australian privacy law if you collect and use the seller phone numbers that detail enrichment exposes.

Can I run it on a schedule to catch only new listings?

You can schedule the actor from the Schedules tab. For recurring runs that return only what changed, turn on incrementalMode (see "Resume and recurring updates" under Input Parameters): each run remembers the previous one itself and returns only NEW / UPDATED / REAPPEARED / EXPIRED listings, so you no longer need to de-duplicate on your side. Without incremental mode, each scheduled run returns every listing that matches your filters again.

Why do some sellers show no rating?

Gumtree publishes only an aggregate rating, an overall score and how many ratings back it, never the individual buyer reviews or a star-by-star breakdown, so reviews and ratingDistribution are always null. Many private sellers simply have no rating yet, in which case rating is null and reviewCount is 0.

Why did my run fail instead of returning an empty dataset?

In URL mode, a pasted listing URL that cannot be loaded at all is skipped rather than failing the run, so that run instead finishes successfully with no listings found. If no results page can be loaded at all, the run fails with a clear connection message (see Plan Requirement) rather than looking like an empty search. A search that loads but matches nothing, or an unsupported URL shape or unknown location, ends with an explanatory message.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each listing into Notion, Linear or Airtable.

๐Ÿ”— Want more Gumtree data?

Pair this actor with these related scrapers from the same team:

๐Ÿท๏ธ Gumtree.com Scraper
Scrape Gumtree.com classifieds across motors, property, jobs, services, pets and goods...
๐Ÿš— EasyAuto123 Scraper
Scrape EasyAuto123 vehicle listings into clean structured data. Extract prices, VINs...
๐Ÿš— Trade Me NZ Scraper
Scrape trademe.co.nz across all five sections: Marketplace goods and auctions, Property...
๐Ÿš— Carsales.com.au Scraper
Scrape structured vehicle listings from Carsales.com.au from $1 per 1K results. Built to...
๐Ÿท๏ธ Tutti.ch Scraper
Scrape listings from tutti.ch across all 23 categories, including vehicles, property...
๐Ÿท๏ธ OLX Scraper
Fast OLX scraper across 9 countries, including Poland, Romania, Portugal, Ukraine...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.