{
  "openapi": "3.0.1",
  "info": {
    "title": "Cycle Trader Scraper: Motorcycle Listings & Filters",
    "description": "Scrape CycleTrader.com motorcycle listings with real search filters: zip/radius, make, price, year, mileage, condition, seller type, and keyword. Optional detail mode adds horsepower, days listed, views, saves, stock number, and photos. US residential proxy required.",
    "version": "0.0",
    "x-build-id": "soWkboFo2sdTDrEnj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~cycletrader-listings-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-cycletrader-listings-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/getascraper~cycletrader-listings-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-cycletrader-listings-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/getascraper~cycletrader-listings-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-cycletrader-listings-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional. Paste direct CycleTrader.com search or category page URLs to scrape exactly those pages. When set, this overrides every filter below, so leave it empty to use the structured filters instead.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "zipCode": {
            "title": "Zip Code",
            "type": "string",
            "description": "US zip code to search near. Maps directly to CycleTrader's own location filter. Leave empty to search nationwide.",
            "default": ""
          },
          "radius": {
            "title": "Radius (miles)",
            "minimum": 1,
            "maximum": 3000,
            "type": "integer",
            "description": "How far from the zip code to search, in miles. Only used when Zip Code is set. CycleTrader's own presets are 25, 50, 100, 200, and 500 miles.",
            "default": 100
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Free-text keyword search, matched the same way CycleTrader's own \"Keyword\" filter box works (e.g. a trim name or feature). Applied through CycleTrader's live filter panel at run time, so the run log will warn if the control can't be found rather than silently ignoring it. The incumbent CycleTrader scraper on Apify has no keyword filter at all, only a raw start-URL field.",
            "default": ""
          },
          "make": {
            "title": "Make",
            "type": "string",
            "description": "Motorcycle make to filter by, e.g. \"Honda\" or \"Harley-Davidson\". Matched live against CycleTrader's own current make list at run time (not a hardcoded list that can go stale), so use the exact name shown on cycletrader.com. Leave empty to include all makes.",
            "default": ""
          },
          "minPrice": {
            "title": "Minimum Price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings priced at or above this amount. Leave empty for no minimum.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum Price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings priced at or below this amount. Leave at 0 for no maximum.",
            "default": 0
          },
          "minYear": {
            "title": "Minimum Model Year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Only include motorcycles from this model year or newer. Leave at 0 for no minimum.",
            "default": 0
          },
          "maxYear": {
            "title": "Maximum Model Year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Only include motorcycles from this model year or older. Leave at 0 for no maximum.",
            "default": 0
          },
          "maxMileage": {
            "title": "Maximum Mileage",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings with at most this many miles on the odometer. Leave at 0 for no limit.",
            "default": 0
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "any",
              "new",
              "used"
            ],
            "type": "string",
            "description": "Filter by whether the listing is for a new or used motorcycle.",
            "default": "any"
          },
          "sellerType": {
            "title": "Seller Type",
            "enum": [
              "any",
              "dealer",
              "private"
            ],
            "type": "string",
            "description": "Filter by whether the listing comes from a dealer or a private seller.",
            "default": "any"
          },
          "scrapeDetails": {
            "title": "Scrape Detail Pages",
            "type": "boolean",
            "description": "Visit each listing's own detail page to also collect horsepower, days listed, page views, saves, stock number, listing code, primary color, full description, and photo URLs. Off by default because it roughly doubles requests per item; the search results page alone already gives you price, mileage, year, make, model, and dealer name.",
            "default": false
          },
          "maxItems": {
            "title": "Max Listings",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of motorcycle listings to scrape in this run. Keep this modest for a first test; raise it once you've checked the output looks right.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "CycleTrader.com is protected by DataDome bot detection. A datacenter proxy is blocked outright at the CDN level, and even a residential IP without a real browser only gets a DataDome challenge page instead of data (both confirmed by live testing). US residential proxy is required for reliable access.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}