{
  "openapi": "3.0.1",
  "info": {
    "title": "Trade Me NZ Scraper - Marketplace, Property, Motors & Jobs",
    "description": "Scrape trademe.co.nz across all five sections: Marketplace goods and auctions, Property, Motors, Jobs and Services. Search or paste URLs, walk pagination, and enrich with full detail plus seller feedback (positive/negative counts and score).",
    "version": "1.0",
    "x-build-id": "1uBjl9OZz5R1Mw5pG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~trademe-co-nz-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-trademe-co-nz-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~trademe-co-nz-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-trademe-co-nz-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~trademe-co-nz-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-trademe-co-nz-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",
        "required": [
          "mode"
        ],
        "properties": {
          "vertical": {
            "title": "Section",
            "enum": [
              "marketplace",
              "property",
              "motors",
              "jobs",
              "services"
            ],
            "type": "string",
            "description": "Which Trade Me section to scrape: Marketplace (general goods and auctions), Property, Motors (vehicles), Jobs, or Services.",
            "default": "marketplace"
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode uses keywords and filters. URL mode scrapes category, search or individual listing links you paste.",
            "default": "search"
          },
          "queries": {
            "title": "Keyword searches",
            "type": "array",
            "description": "One or more keyword searches within the selected section (for example: iphone, mountain bike). Leave empty to browse the whole section or a category.",
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "Property listing type",
            "enum": [
              "residential-sale",
              "residential-rent",
              "commercial-sale",
              "lifestyle"
            ],
            "type": "string",
            "description": "Property section only. Which property market to search.",
            "default": "residential-sale"
          },
          "region": {
            "title": "Region",
            "type": "string",
            "description": "Property or Jobs section. Region name or id (for example: auckland, wellington, canterbury)."
          },
          "district": {
            "title": "District",
            "type": "string",
            "description": "Property or Jobs section. District within the region."
          },
          "suburb": {
            "title": "Suburb",
            "type": "string",
            "description": "Property section. Suburb within the district."
          },
          "propertyType": {
            "title": "Property type",
            "type": "string",
            "description": "Property section. For example: House, Apartment, Townhouse, Unit, Section, Lifestyle."
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Property section. Minimum number of bedrooms."
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Property section. Maximum number of bedrooms."
          },
          "minBathrooms": {
            "title": "Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Property section. Minimum number of bathrooms."
          },
          "minLandArea": {
            "title": "Min land area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Property section. Minimum land area in square metres."
          },
          "maxLandArea": {
            "title": "Max land area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Property section. Maximum land area in square metres."
          },
          "minFloorArea": {
            "title": "Min floor area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Property section. Minimum floor area in square metres."
          },
          "maxFloorArea": {
            "title": "Max floor area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Property section. Maximum floor area in square metres."
          },
          "petsOkay": {
            "title": "Pets okay",
            "type": "boolean",
            "description": "Property section (rentals). Only listings that allow pets.",
            "default": false
          },
          "make": {
            "title": "Vehicle make",
            "type": "string",
            "description": "Motors section. For example: Toyota, Ford, Mazda."
          },
          "model": {
            "title": "Vehicle model",
            "type": "string",
            "description": "Motors section. For example: Corolla, Ranger."
          },
          "minYear": {
            "title": "Min year",
            "minimum": 1900,
            "type": "integer",
            "description": "Motors section. Earliest manufacture year."
          },
          "maxYear": {
            "title": "Max year",
            "minimum": 1900,
            "type": "integer",
            "description": "Motors section. Latest manufacture year."
          },
          "minOdometer": {
            "title": "Min odometer (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Motors section. Minimum odometer reading."
          },
          "maxOdometer": {
            "title": "Max odometer (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Motors section. Maximum odometer reading."
          },
          "bodyStyle": {
            "title": "Body style",
            "type": "string",
            "description": "Motors section. For example: Hatchback, Sedan, SUV, Ute."
          },
          "transmission": {
            "title": "Transmission",
            "type": "string",
            "description": "Motors section. For example: Automatic, Manual."
          },
          "fuel": {
            "title": "Fuel type",
            "type": "string",
            "description": "Motors section. For example: Petrol, Diesel, Electric, Hybrid."
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "Marketplace, Jobs or Services section. Category id or slug to narrow the search."
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "",
              "New",
              "Used"
            ],
            "type": "string",
            "description": "Marketplace section. Item condition.",
            "default": ""
          },
          "buyNowOnly": {
            "title": "Buy Now only",
            "type": "boolean",
            "description": "Marketplace section. Only listings with a Buy Now price.",
            "default": false
          },
          "jobType": {
            "title": "Job type",
            "type": "string",
            "description": "Jobs section. For example: Full time, Part time, Contract."
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in NZD (or minimum salary for Jobs)."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in NZD (or maximum salary for Jobs)."
          },
          "startUrls": {
            "title": "URLs",
            "type": "array",
            "description": "Trade Me category, search-result or individual listing URLs. Results continue from the page number in the URL onward.",
            "default": [
              "https://www.trademe.co.nz/a/marketplace/search?search_string=iphone",
              "https://www.trademe.co.nz/a/marketplace/computers/laptops",
              "https://www.trademe.co.nz/a/property/residential/sale",
              "https://www.trademe.co.nz/a/property/residential/sale/auckland?page=2",
              "https://www.trademe.co.nz/a/motors/cars",
              "https://www.trademe.co.nz/a/jobs/search?search_string=nurse",
              "https://www.trademe.co.nz/a/services",
              "https://www.trademe.co.nz/a/marketplace/search?search_string=bike&sort_order=PriceAsc",
              "https://www.trademe.co.nz/a/motors/cars/toyota/aqua/listing/6177402562"
            ],
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "Default",
              "FeaturedFirst",
              "PriceAsc",
              "PriceDesc",
              "TitleAsc",
              "ExpiryAsc",
              "ExpiryDesc",
              "BidsMost",
              "BuyNowPrice",
              "BestMatch",
              "JobsLatestListingDesc",
              "HighestSalary",
              "LowestSalary",
              "ReviewsDesc"
            ],
            "type": "string",
            "description": "Result ordering. Applicability varies by section: Marketplace supports Default, FeaturedFirst, PriceAsc, PriceDesc, TitleAsc, ExpiryAsc, ExpiryDesc, BidsMost, BuyNowPrice; Jobs supports BestMatch, JobsLatestListingDesc, HighestSalary, LowestSalary; Services supports ReviewsDesc. Also orders a pasted category or search URL in URL mode, taking precedence over any ordering already encoded in that URL. Leave as Default if unsure.",
            "default": "Default"
          },
          "keyword": {
            "title": "Extra keyword filter",
            "type": "string",
            "description": "Optional free-text term applied on top of the section and filters. Also applies to a pasted URL in URL mode, but only when that URL does not already contain a search term of its own, in which case the URL's own term wins."
          },
          "fetchDetails": {
            "title": "Fetch full details + seller feedback",
            "type": "boolean",
            "description": "Fetch each listing's full detail page and the seller's member feedback (positive/negative counts and score). Slower and adds a per-item detail charge.",
            "default": false
          },
          "includeMemberFeedbackComments": {
            "title": "Include individual feedback comments",
            "type": "boolean",
            "description": "When full details are enabled, also collect the seller's individual feedback comments.",
            "default": false
          },
          "maxFeedbackComments": {
            "title": "Max feedback comments per seller",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "With feedback comments on, the most recent comments to collect for each seller (paged 25 at a time). Previously the actor always returned up to 25.",
            "default": 20
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of listings to return. This is the main limit. Set 0 for unlimited.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 0,
            "type": "integer",
            "description": "Limit on result pages to walk per search. Leave empty to walk every result page; the run still stops at Max items."
          },
          "proxy": {
            "title": "Connection",
            "type": "object",
            "description": "Connection configuration. The default is recommended.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (optional)",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue an interrupted or paginated walk. Listings already collected there (matched by listingId) are skipped, so this run only saves the new ones. Leave empty for a normal fresh run."
          },
          "incrementalMode": {
            "title": "Incremental mode (only push new or changed listings)",
            "type": "boolean",
            "description": "ON: the actor remembers the listings it saw for this exact search scope (keyed automatically, or use State key) and on each scheduled run marks every listing NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED, pushing only new and changed rows plus EXPIRED tombstones, and stamping each row with changeType, changedFields, firstSeenAt and lastSeenAt. COMPARED: every output field (title, prices, Buy Now, closing date, location, photos, category, seller and seller feedback, vehicle/property attributes). EXCLUDED from the comparison but still in the output: scrapedAt and viewCount (a page-view counter that moves on every visit), plus anything you list under Ignore fields. EXPIRED rows are only produced when the search ran to its natural end from page 1 (not for a capped, Max pages-limited, resumed or ?page=N>1 run). With Incremental mode ON, Max items limits the listings scanned. OFF (default): every run returns the full result set, unchanged.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Name of the incremental baseline when Incremental mode is ON. Leave empty to key it automatically on a hash of the search scope (recommended). Reuse the same key across runs to compare like with like; a different key starts a new baseline."
          },
          "emitUnchanged": {
            "title": "Also push unchanged rows",
            "type": "boolean",
            "description": "With Incremental mode ON, also push listings that did not change (changeType UNCHANGED). Default OFF: unchanged listings are remembered but not pushed, and not billed.",
            "default": false
          },
          "emitExpired": {
            "title": "Push EXPIRED tombstones",
            "type": "boolean",
            "description": "With Incremental mode ON, push a tombstone row (changeType EXPIRED, last known values) for listings the previous run saw that this run's search no longer returns - only when the search ran to completion. Default ON.",
            "default": true
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "With Incremental mode ON, output fields listed here never count as a change (they are excluded from changeType and changedFields while staying in the output). Use a field name (photoUrls) or a dotted path for a nested field (sellerFeedback.totalCount). Built-in defaults already cover scrapedAt and viewCount.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per item; other connectors get a best-effort write. Leave empty to skip. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}