Gumtree AU Scraper - Listings, Sellers & Reviews
Pricing
from $1.10 / 1,000 listing results
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
Maintained by CommunityActor stats
1
Bookmarked
20
Total users
7
Monthly active users
11 days ago
Last modified
Categories
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.
| Field | Example |
|---|---|
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 / priceType | 32990 / "$32,990" / "FIXED" |
currency | "AUD" |
minimumOfferPrice / previousPriceString | 30000 / "$34,990" |
isFree / isNegotiable / isSwapTrade / isDriveAway | false / 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 / imageCount | array of photo URLs / 8 |
hasVideo / videos | false / [] (video URLs are not currently extracted) |
attributes | flattened 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 / isTopAd | prominence flags set by the seller's ad package |
numberOfViews / numberOfReplies / numberOfOffers | 340 / 12 / 3 |
sellerName / seller | "Example Motors" / nested rating object, see below |
isWanted / adType | false / "OFFER" (also "WANTED") |
detailFetched / detailStatus | true / "enriched" (meaningful only when Fetch full listing detail is on) |
fullDescription | the untruncated advert text (detail enrichment only) |
latitude / longitude / postcode / suburb / mapAddress | precise 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
- Pick a Search mode:
search(build a query from category, location and keyword) orurl(paste one or more gumtree.com.au URLs). - 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. - Set Max listings and Max result pages per search to control the size and cost of the run.
- 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.
| Shape | Example |
|---|---|
| category location | https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435 |
| paginated | https://www.gumtree.com.au/s-cars-vans-utes/sydney/page-2/c18320l3003435 |
| category only | https://www.gumtree.com.au/s-cars-vans-utes/c18320 |
| region | https://www.gumtree.com.au/s-cars-vans-utes/nsw/c18320l3008839 |
| category no location | https://www.gumtree.com.au/s-cars-vans-utes/c18320l3003435 |
| keyword k0 | https://www.gumtree.com.au/s-cars-vans-utes/sydney/toyota+hilux/k0c18320l3003435 |
| keyword only | https://www.gumtree.com.au/s-toyota/k0 |
| all categories | https://www.gumtree.com.au/s-all/c0 |
| location only | https://www.gumtree.com.au/s-sydney/c0l3003435 |
| sort date | https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?sort=date |
| price filter | https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?price=5000__10000 |
| view gallery | https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?view=gallery |
| real estate | https://www.gumtree.com.au/s-property-for-sale/sydney/c18364l3003435 |
| jobs | https://www.gumtree.com.au/s-jobs/sydney/c9302l3003435 |
| detail | https://www.gumtree.com.au/web/listing/cars-vans-utes/1344633156 |
| legacy ad | https://www.gumtree.com.au/s-ad/1344633156 |
| legacy ad long | https://www.gumtree.com.au/s-ad/sydney/cars-vans-utes/x/1344633156 |
Run it from your code
Python:
from apify_client import ApifyClientclient = 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
| Input | What it does |
|---|---|
keywordList, locationList | One search per keyword x location, de-duplicated across searches. |
sellerType | private or trade, from each listing's dealer flag. |
carMake, carModel, carYearMin, carYearMax, carMileageMin, carMileageMax, carFuelType, carTransmission | Narrow 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). |
listingStartDate | Listings posted on or after a date, from the site's relative age (approximate to the day). |
priceChangeMonitoring | drops 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.
- Authorize a connector once under Apify โ Settings โ Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build a query) or url (paste gumtree.com.au URLs). |
urls | array | one example URL per supported shape (see URL table) | gumtree.com.au search or listing URLs (url mode). |
category | string | all | Top-level vertical to search: all categories, cars and vehicles, real estate, jobs, services, and more (search mode). |
location | string | none (prefill: Sydney) | Suburb, city, region or state (search mode). Empty searches all of Australia. |
keywords | string | none | Free-text keyword (search mode). Empty browses the whole category. |
keywordList | array | none | Several keywords; one search per keyword x location, de-duplicated (search mode). |
locationList | array | none | Several locations; combined with keywordList (search mode). |
sellerType | string | none | private or trade listings only. |
carMake | string | none | Vehicle make filter, applied after fetching. |
carModel | string | none | Vehicle model filter, applied after fetching. |
carYearMin | integer | none | Earliest vehicle year. |
carYearMax | integer | none | Latest vehicle year. |
carMileageMin | integer | none | Minimum mileage (km). |
carMileageMax | integer | none | Maximum mileage (km). |
carFuelType | string | none | Vehicle fuel type filter. |
carTransmission | string | none | Vehicle transmission filter. |
listingStartDate | string | none | Only listings posted on or after this date (approximate to the day). |
priceChangeMonitoring | string | none | none, drops or any; with incremental mode on, only price-changed listings are emitted and rows carry previousPrice. |
adType | string | none | Retired hidden field, kept only so saved Task inputs keep loading; the value is not read and has no effect. |
sortBy | string | none | Sort order: best match, most recent, price, or (for motors) mileage and year. |
minPrice | integer | none | Only return listings priced at or above this amount (AUD). |
maxPrice | integer | none | Only return listings priced at or below this amount (AUD). |
radius | integer | none | Expand the search around the chosen location by this many kilometres. |
fetchDetails | boolean | false | Also fetch each listing's page for the full description, precise location and seller phone. |
maxItems | integer | 100 | Stop after this many listings across the whole run (0 = no limit, bounded by Max pages; schema maximum 100000). |
maxPages | integer | 0 | How 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. |
proxy | object | Apify Residential proxy, country AU | Connection settings. |
resumeFromRunId | string | none | Paste 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. |
incrementalMode | boolean | false | For 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. |
stateKey | string | none | Optional 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. |
emitUnchanged | boolean | false | Also return (and pay for) listings with no change since the previous incremental run. |
emitExpired | boolean | false | Also 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. |
ignoreFieldsForChanges | array | none | Field 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[]. |
mcpConnectors | array | none | Optional: send a summary of each listing to apps you authorized under Integrations. |
notionParentPageUrl | string | none | Notion connector only: page under which items are created. |
maxNotifyListings | integer | 50 | Cap 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;
changedFieldsnames the top-level fields that changed. - UNCHANGED: present before, nothing changed. Suppressed by default so a recurring run returns and bills only what changed;
emitUnchangedalso 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
emitExpiredon, 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.
Is it legal to scrape Gumtree?
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.