{
  "openapi": "3.0.1",
  "info": {
    "title": "Gumtree AU Scraper - Listings, Sellers & Reviews",
    "description": "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.",
    "version": "0.3",
    "x-build-id": "3eYqPNzBvhY05gkZD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~gumtree-au-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-gumtree-au-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/abotapi~gumtree-au-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-gumtree-au-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/abotapi~gumtree-au-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-gumtree-au-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": {
          "mode": {
            "title": "1. Search mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode = build the query from the category / location / keyword filters below. URL mode = paste any gumtree.com.au search or listing URL you already refined in a browser (best for complex filters and sub-categories).",
            "default": "search"
          },
          "urls": {
            "title": "Search or listing URLs (URL mode)",
            "type": "array",
            "description": "gumtree.com.au search-result URLs or listing URLs. Tip: open gumtree.com.au, choose a category + location + filters, then paste the resulting URL here. In URL mode the category, location, keyword, price, sort and radius fields are ignored (the URL decides them); 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. Supported: category/location/keyword (k0), paginated, sorted, price-filtered and gallery search URLs across all verticals, and listing URLs (/web/listing/... or legacy /s-ad/...). Seller pages and bare /<id> links are skipped with a warning.",
            "items": {
              "type": "string"
            },
            "default": [
              "https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435",
              "https://www.gumtree.com.au/s-cars-vans-utes/sydney/page-2/c18320l3003435",
              "https://www.gumtree.com.au/s-cars-vans-utes/c18320",
              "https://www.gumtree.com.au/s-cars-vans-utes/nsw/c18320l3008839",
              "https://www.gumtree.com.au/s-cars-vans-utes/sydney/toyota+hilux/k0c18320l3003435",
              "https://www.gumtree.com.au/s-toyota/k0",
              "https://www.gumtree.com.au/s-all/c0",
              "https://www.gumtree.com.au/s-sydney/c0l3003435",
              "https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?sort=date",
              "https://www.gumtree.com.au/s-cars-vans-utes/sydney/c18320l3003435?price=5000__10000",
              "https://www.gumtree.com.au/s-property-for-sale/sydney/c18364l3003435",
              "https://www.gumtree.com.au/s-jobs/sydney/c9302l3003435",
              "https://www.gumtree.com.au/web/listing/cars-vans-utes/1344633156"
            ]
          },
          "category": {
            "title": "Category / vertical",
            "enum": [
              "all",
              "cars-vehicles",
              "real-estate",
              "jobs",
              "services",
              "home-garden",
              "electronics-computer",
              "pets",
              "baby-children",
              "clothing-jewellery",
              "sport-fitness",
              "antiques-art",
              "books-music-games",
              "boats-jetskis",
              "community",
              "miscellaneous-goods",
              "tickets"
            ],
            "type": "string",
            "description": "Top-level category to search. 'All categories' searches every vertical. Covers Gumtree's main verticals: motors (Cars & Vehicles), property (Real Estate), Jobs, Services, plus the for-sale goods categories.",
            "default": "all"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Suburb, city, region or state to search in (e.g. 'Sydney', 'Melbourne', 'Brisbane', 'NSW'). Leave empty to search all of Australia. Names are resolved against Gumtree's own location index."
          },
          "keywords": {
            "title": "Keyword",
            "type": "string",
            "description": "Free-text keyword to search for (e.g. 'toyota hilux', 'iphone 15'). Optional — leave empty to browse the whole category."
          },
          "keywordList": {
            "title": "Keywords (several searches)",
            "type": "array",
            "description": "Run one search per keyword (combined with the single Keyword field and every location). Results are de-duplicated across searches.",
            "items": {
              "type": "string"
            }
          },
          "locationList": {
            "title": "Locations (several searches)",
            "type": "array",
            "description": "Run one search per location, such as 'Sydney' or 'Victoria' (combined with the single Location field).",
            "items": {
              "type": "string"
            }
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "private",
              "trade"
            ],
            "type": "string",
            "description": "Keep only private sellers or trade/dealer sellers. Decided from the dealer flag on each listing, so it is reliable for motors. Leave empty for both. Not applied to pasted listing URLs (a listing page does not show the dealer flag)."
          },
          "carMake": {
            "title": "Car make",
            "type": "string",
            "description": "Keep only vehicles of this make (for example toyota). Applied to the listing's make attribute or title. Also applies to pasted listing URLs (title fallback)."
          },
          "carModel": {
            "title": "Car model",
            "type": "string",
            "description": "Keep only vehicles of this model (for example hilux). Also applies to pasted listing URLs (title fallback)."
          },
          "carYearMin": {
            "title": "Car year from",
            "minimum": 1900,
            "type": "integer",
            "description": "Earliest vehicle year."
          },
          "carYearMax": {
            "title": "Car year to",
            "minimum": 1900,
            "type": "integer",
            "description": "Latest vehicle year."
          },
          "carMileageMin": {
            "title": "Mileage from (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum odometer reading in km. Listings without a mileage are skipped when this is set. Not applied to pasted listing URLs (a listing page does not carry it)."
          },
          "carMileageMax": {
            "title": "Mileage to (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum odometer reading in km. Listings without a mileage are skipped when this is set. Not applied to pasted listing URLs (a listing page does not carry it)."
          },
          "carFuelType": {
            "title": "Fuel type",
            "enum": [
              "petrol",
              "diesel",
              "electric",
              "hybrid"
            ],
            "type": "string",
            "description": "Keep only vehicles with this fuel type. Not applied to pasted listing URLs (a listing page does not carry it)."
          },
          "carTransmission": {
            "title": "Transmission",
            "enum": [
              "automatic",
              "manual"
            ],
            "type": "string",
            "description": "Keep only automatic or manual vehicles. Not applied to pasted listing URLs (a listing page does not carry it)."
          },
          "listingStartDate": {
            "title": "Listed since (YYYY-MM-DD)",
            "type": "string",
            "description": "Keep only listings posted on or after this date. Gumtree publishes a relative age ('3 days ago'), so the date is approximate to the day; listings with no age are skipped. Not applied to pasted listing URLs (a listing page does not carry its post age)."
          },
          "priceChangeMonitoring": {
            "title": "Price change monitoring",
            "enum": [
              "none",
              "drops",
              "any"
            ],
            "type": "string",
            "description": "drops = only listings whose price fell; any = only listings whose price changed. With Incremental mode on it compares against your last run and sets previousPrice. With Incremental mode off there is nothing to compare, so drops and any behave the same and keep only listings the site flags as price-dropped. Applies to search results and pasted listing URLs.",
            "default": "none"
          },
          "adType": {
            "title": "Ad type",
            "type": "string",
            "description": "Retired. Gumtree's search API no longer carries the wanted / offering facet, so this field is kept only so saved Task inputs keep loading; the value is ignored."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "rank",
              "date",
              "price_asc",
              "price_desc",
              "mileage_asc",
              "mileage_desc",
              "year_asc",
              "year_desc"
            ],
            "type": "string",
            "description": "How to order results. Mileage / year options apply to motor listings."
          },
          "minPrice": {
            "title": "Minimum price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings priced at or above this amount."
          },
          "maxPrice": {
            "title": "Maximum price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings priced at or below this amount."
          },
          "radius": {
            "title": "Search radius (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Expand the search around the chosen location by this many kilometres. Leave empty for the location's default radius."
          },
          "fetchDetails": {
            "title": "Fetch full listing detail (description, map location, seller phone)",
            "type": "boolean",
            "description": "Each enriched listing costs one extra page load. Enriched rows carry detailFetched=true; a row whose page could not be read keeps every search field and says detailFetched=false.",
            "default": false
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of listings to return across the whole run. 0 = no limit (bounded by Max pages). Maximum 100000.",
            "default": 100
          },
          "maxPages": {
            "title": "Max result pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "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.",
            "default": 0
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Gumtree serves Australian visitors — Apify Residential proxy with country = AU is recommended for reliable access. IP rotation is handled automatically.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AU"
            }
          },
          "resumeFromRunId": {
            "title": "Resume from run/dataset ID",
            "type": "string",
            "description": "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. Leave empty for a normal run. Combine with incrementalMode only to bootstrap a fresh monitoring campaign from an older crawl — when incremental mode already has saved state for this search, the run stops and asks you to remove this id or use another State key."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring updates)",
            "type": "boolean",
            "description": "For a search you run on a schedule. When on, the actor remembers this search's previous run and classifies every listing as NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED instead of returning the same listings every time. Compared fields: everything in the record (title, price, location, images, attributes, seller and so on). Excluded by default: scrapedAt, age and the numberOfViews / numberOfReplies / numberOfOffers counters (still present in every row); add more in the ignore-fields input. Default off (every run returns the full result set as today). Resume from run/dataset ID above must stay empty once saved state exists.",
            "default": false
          },
          "stateKey": {
            "title": "State key (incremental mode, optional)",
            "type": "string",
            "description": "Optional label to isolate this search's incremental state, useful if you run the same filters under two different schedules. Leave empty to derive the state automatically from the mode/URLs/category/location/keywords/sort/price/radius filters and the detail-enrichment toggle — two different filter setups never share a baseline."
          },
          "emitUnchanged": {
            "title": "Also return UNCHANGED listings (incremental mode)",
            "type": "boolean",
            "description": "When on, listings with no change since the previous incremental run are still returned (and billed) instead of being suppressed. Off by default so a recurring run bills only for what changed.",
            "default": false
          },
          "emitExpired": {
            "title": "Also return EXPIRED listings (incremental mode)",
            "type": "boolean",
            "description": "When on, listings that were tracked before but are no longer found are returned once (and billed) with changeType EXPIRED, then dropped from tracking. Only emitted after a run that reached the natural end of results for every search — a capped or time-limited run never emits EXPIRED rows, to avoid wrongly flagging a live listing as gone. Off by default.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names whose changes never mark a listing UPDATED in incremental mode. Ignored by default: age (the site's relative listed-time string) and the numberOfViews, numberOfReplies and numberOfOffers counters, which move on their own. Add top-level field names, or nested paths like seller.rating, seller.* or images[].",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send scraped results into apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item; the full record stays in the dataset. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}