{
  "openapi": "3.0.1",
  "info": {
    "title": "RVTrader Scraper: Extract RV Listings, Prices & Dealers",
    "description": "Scrape RV listings from RVTrader.com by search URL or by filters (type, make, model, price, year, mileage, ZIP radius). Returns 55+ fields per listing: price and full price-drop history, VIN, mileage, length, dealer name, phone, website, GPS coordinates and every photo URL.",
    "version": "0.1",
    "x-build-id": "bLMbLMyVBaIpVkvEw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fayoussef~rvtrader-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fayoussef-rvtrader-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/fayoussef~rvtrader-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fayoussef-rvtrader-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/fayoussef~rvtrader-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fayoussef-rvtrader-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": {
          "searchUrls": {
            "title": "RVTrader search URLs",
            "type": "array",
            "description": "Paste any rvtrader.com search or browse URL and every filter already in it is carried over, so what you see on the site is what you get. Add as many as you like. This is the main input: when it is set, the filter fields below are ignored and the URLs alone decide what is scraped. Leave it empty to use those filters instead. URLs must be on www.rvtrader.com.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many listings, counted across every URL or filter combination in the run. This is what you are billed for, so it is the safest cost control.",
            "default": 1000
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Free-text search over everything RVTrader indexes for a listing, which includes the title and description but also floorplan and feature names, so matches are broader than a plain text search. All words must match, so keep it to one or two, for example bunkhouse."
          },
          "rvClasses": {
            "title": "RV type",
            "type": "array",
            "description": "Leave empty for every type.",
            "items": {
              "type": "string",
              "enum": [
                "Travel Trailer",
                "Fifth Wheel",
                "Class A",
                "Class B",
                "Class C",
                "Toy Hauler",
                "Truck Camper",
                "Pop Up Camper",
                "Destination Trailer",
                "Park Model",
                "Teardrop Trailer",
                "Fish House"
              ]
            }
          },
          "makes": {
            "title": "Makes",
            "type": "array",
            "description": "Brand names as RVTrader spells them, for example Winnebago, Jayco, Forest River. Leave empty for every make.",
            "items": {
              "type": "string"
            }
          },
          "models": {
            "title": "Models",
            "type": "array",
            "description": "Model names, for example Sunseeker or View 24K. Each model is scraped as its own query, so adding several multiplies the run time.",
            "items": {
              "type": "string"
            }
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "Any",
              "New",
              "Used"
            ],
            "type": "string",
            "description": "New, Used, or both.",
            "default": "Any"
          },
          "zipCode": {
            "title": "ZIP code",
            "type": "string",
            "description": "Search around this ZIP code. Leave empty to search the whole country."
          },
          "radius": {
            "title": "Search radius (miles)",
            "enum": [
              "25",
              "50",
              "75",
              "100",
              "150",
              "200",
              "500",
              "any"
            ],
            "type": "string",
            "description": "Only used when a ZIP code is set.",
            "default": "200"
          },
          "states": {
            "title": "States",
            "type": "array",
            "description": "Restrict to these states or provinces. Each one is scraped as its own query, which also helps when a result set is very large.",
            "items": {
              "type": "string",
              "enum": [
                "AL",
                "AK",
                "AZ",
                "AR",
                "CA",
                "CO",
                "CT",
                "DE",
                "DC",
                "FL",
                "GA",
                "HI",
                "ID",
                "IL",
                "IN",
                "IA",
                "KS",
                "KY",
                "LA",
                "ME",
                "MD",
                "MA",
                "MI",
                "MN",
                "MS",
                "MO",
                "MT",
                "NE",
                "NV",
                "NH",
                "NJ",
                "NM",
                "NY",
                "NC",
                "ND",
                "OH",
                "OK",
                "OR",
                "PA",
                "RI",
                "SC",
                "SD",
                "TN",
                "TX",
                "UT",
                "VT",
                "VA",
                "WA",
                "WV",
                "WI",
                "WY",
                "BC"
              ],
              "enumTitles": [
                "Alabama",
                "Alaska",
                "Arizona",
                "Arkansas",
                "California",
                "Colorado",
                "Connecticut",
                "Delaware",
                "District of Columbia",
                "Florida",
                "Georgia",
                "Hawaii",
                "Idaho",
                "Illinois",
                "Indiana",
                "Iowa",
                "Kansas",
                "Kentucky",
                "Louisiana",
                "Maine",
                "Maryland",
                "Massachusetts",
                "Michigan",
                "Minnesota",
                "Mississippi",
                "Missouri",
                "Montana",
                "Nebraska",
                "Nevada",
                "New Hampshire",
                "New Jersey",
                "New Mexico",
                "New York",
                "North Carolina",
                "North Dakota",
                "Ohio",
                "Oklahoma",
                "Oregon",
                "Pennsylvania",
                "Rhode Island",
                "South Carolina",
                "South Dakota",
                "Tennessee",
                "Texas",
                "Utah",
                "Vermont",
                "Virginia",
                "Washington",
                "West Virginia",
                "Wisconsin",
                "Wyoming",
                "British Columbia"
              ]
            }
          },
          "priceMin": {
            "title": "Min price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Listings priced below this are skipped. Listings with no price are treated as 0."
          },
          "priceMax": {
            "title": "Max price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Listings priced above this are skipped."
          },
          "yearMin": {
            "title": "Min year",
            "minimum": 1900,
            "type": "integer",
            "description": "Oldest model year to include."
          },
          "yearMax": {
            "title": "Max year",
            "minimum": 1900,
            "type": "integer",
            "description": "Newest model year to include."
          },
          "mileageMax": {
            "title": "Max mileage",
            "minimum": 0,
            "type": "integer",
            "description": "Motorised RVs only; towables carry no mileage."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "",
              "price:asc",
              "price:desc",
              "year:desc",
              "year:asc",
              "mileage:asc",
              "create_date:desc",
              "distance:asc",
              "relevance:desc"
            ],
            "type": "string",
            "description": "Leave empty to collect the whole result set. Picking a sort order means the newest or cheapest listings come first, but RVTrader caps any sorted query at 420 listings, so a sorted run cannot return more than that per query. Applies to filter searches only: a pasted URL keeps whatever sort the URL itself carries."
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "Any",
              "Dealer",
              "Private"
            ],
            "type": "string",
            "description": "Limit to dealer inventory or to private sellers.",
            "default": "Any"
          },
          "fuelTypes": {
            "title": "Fuel type",
            "type": "array",
            "description": "Motorised RVs only. Leave empty for every fuel type.",
            "items": {
              "type": "string",
              "enum": [
                "Gasoline",
                "Diesel",
                "Hybrid Electric",
                "Flex Fuel",
                "Natural Gas",
                "BioDiesel"
              ]
            }
          },
          "rvCategories": {
            "title": "Sub-type",
            "type": "array",
            "description": "Narrower body styles that sit under the main RV types.",
            "items": {
              "type": "string",
              "enum": [
                "Class A Diesel Motorhome - Diesel Pusher",
                "Class B+",
                "Super C",
                "Conversion Van",
                "Skoolie",
                "Motorhome Toy Hauler",
                "Fifth Wheel Toy Hauler",
                "Travel Trailer Toy Hauler",
                "Horse/Livestock Trailer"
              ]
            }
          },
          "badges": {
            "title": "Only listings badged",
            "type": "array",
            "description": "Keep only listings carrying one of these RVTrader badges.",
            "items": {
              "type": "string",
              "enum": [
                "price_reduced",
                "newly_listed",
                "willing_to_negotiate",
                "history_report"
              ],
              "enumTitles": [
                "Price reduced",
                "Newly listed",
                "Willing to negotiate",
                "Has history report"
              ]
            }
          },
          "trims": {
            "title": "Trims",
            "type": "array",
            "description": "Trim or floorplan codes, for example 24K. Each trim is scraped as its own query.",
            "items": {
              "type": "string"
            }
          },
          "lengthMin": {
            "title": "Min length (feet)",
            "minimum": 0,
            "type": "integer",
            "description": "Shortest overall length to include, in feet."
          },
          "lengthMax": {
            "title": "Max length (feet)",
            "minimum": 0,
            "type": "integer",
            "description": "Longest overall length to include, in feet."
          },
          "sleepsMin": {
            "title": "Sleeps at least",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Minimum sleeping capacity."
          },
          "slideoutsMin": {
            "title": "Slide-outs at least",
            "minimum": 0,
            "maximum": 6,
            "type": "integer",
            "description": "Minimum number of slide-outs."
          },
          "dealerId": {
            "title": "Dealer ID",
            "type": "string",
            "description": "Scrape one dealer's whole inventory. The ID is in the dealerId field of any listing this actor returns."
          },
          "dealerName": {
            "title": "Dealer name",
            "type": "string",
            "description": "Exact dealer name, for example Pop RVs."
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Exact city name, for example Newburgh."
          },
          "deepPagination": {
            "title": "Collect more than 420 listings per query",
            "type": "boolean",
            "description": "RVTrader hard-caps every search at 420 listings. With this on, the actor reopens the search on a rising price cursor until the whole result set is collected. Turn it off to stop at the first 420.",
            "default": true
          },
          "includeRawEndpointFields": {
            "title": "Include raw endpoint fields",
            "type": "boolean",
            "description": "Adds dealerFeatures (88 internal dealer entitlement flags) and endpointFields (the complete untouched RVTrader row) to every item. Useful for auditing, but it roughly triples dataset size and slows the run.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Parallel connections",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many searches run in parallel. Connections are opened only as the work needs them, so a small search still opens just one. 4 is a good balance.",
            "default": 4
          },
          "customProxyUrls": {
            "title": "Custom proxy URLs",
            "type": "array",
            "description": "Optional. Bring your own residential proxies, one URL per line as http://user:pass@host:port. Paid plans already include proxies, so leave this empty unless you have a reason. Free runs go through Apify Proxy residential on your own account, so setting your own here avoids that. Proxies must be sticky, meaning one URL keeps one exit IP for several minutes, and only US and Canadian exits reach RVTrader at all.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}