{
  "openapi": "3.0.1",
  "info": {
    "title": "Turo Scraper - Vehicle Search, Trip Quotes and Hosts",
    "description": "Collect Turo vehicles by location and trip dates or listing URLs. Get make, model, year, ratings, photos, dated price estimates, vehicle details and public host profiles, with resume and recurring change detection.",
    "version": "1.0",
    "x-build-id": "fdOOuKkTYJLmclyX6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~turo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-turo-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~turo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-turo-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~turo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-turo-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search locations or load individual vehicle links.",
            "default": "search"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Search mode only. City, airport or place names.",
            "default": [
              "Los Angeles, California"
            ],
            "items": {
              "type": "string"
            }
          },
          "makes": {
            "title": "Makes",
            "type": "array",
            "description": "Search mode only. Vehicle make names, such as Tesla.",
            "items": {
              "type": "string"
            }
          },
          "minYear": {
            "title": "Minimum model year",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Search mode only. Applied to returned vehicles before the output limit."
          },
          "maxYear": {
            "title": "Maximum model year",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Search mode only. Applied to returned vehicles before the output limit."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Search mode only. Excludes unrated vehicles and applies before the output limit."
          },
          "fuelType": {
            "title": "Fuel type",
            "type": "array",
            "description": "Search mode only. Keep only these engine types.",
            "items": {
              "type": "string",
              "enum": [
                "GAS",
                "HYBRID",
                "ELECTRIC",
                "DIESEL"
              ]
            }
          },
          "vehicleType": {
            "title": "Vehicle type",
            "type": "array",
            "description": "Search mode only. Keep only these vehicle types.",
            "items": {
              "type": "string",
              "enum": [
                "CAR",
                "SUV",
                "MINIVAN",
                "TRUCK",
                "VAN",
                "CARGO_MINIVAN",
                "BOX_TRUCK"
              ]
            }
          },
          "minTotalPrice": {
            "title": "Minimum total trip price",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Drop vehicles whose quoted trip total (before taxes) is lower."
          },
          "maxTotalPrice": {
            "title": "Maximum total trip price",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Drop vehicles whose quoted trip total (before taxes) is higher."
          },
          "age": {
            "title": "Driver age",
            "minimum": 18,
            "maximum": 55,
            "type": "integer",
            "description": "Renter age, 18 to 55. Accepted for compatibility; Turo's search does not use it, so it does not change results.",
            "default": 30
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "daily_price_low_to_high",
              "daily_price_high_to_low",
              "distance_away"
            ],
            "type": "string",
            "description": "Order of the returned vehicles, applied by Turo across its whole result set: relevance, daily price (low to high or high to low) or distance away (nearest first).",
            "default": "relevance"
          },
          "urls": {
            "title": "Vehicle URLs",
            "type": "array",
            "description": "URL mode. Turo links to scrape; each is one source. United States pages only. Supported: a vehicle page (read directly), a city page, a city + make page, a vehicle-type page such as suv-rental, a country + make page, or a /search?location=... link. From a link the actor reads location, makes, types and startDate/endDate (+startTime/endTime) and applies them to that link; a link with any other filter parameter (for example sortType, fuelTypes, minYear, maxYear, features, transmission), an unknown make or type, or a single date is skipped with a warning. Listing pages return Turo's first page of results for your trip dates (at most 200 vehicles per page; country-wide pages are capped there). Links for other countries, unknown makes or unrecognisable slugs are skipped with a warning.",
            "default": [
              "https://turo.com/us/en/car-rental/united-states/los-angeles-ca",
              "https://turo.com/us/en/car-rental/united-states/los-angeles-ca/tesla",
              "https://turo.com/us/en/suv-rental/united-states/los-angeles-ca",
              "https://turo.com/us/en/car-rental/united-states/tesla",
              "https://turo.com/us/en/car-rental/united-states/los-angeles-ca/chevrolet/sonic/3864730"
            ],
            "items": {
              "type": "string"
            }
          },
          "startDateTime": {
            "title": "Trip start",
            "type": "string",
            "description": "Both modes. Local ISO date and time without a time zone. Set both dates, or omit both for a three-day trip beginning in seven days."
          },
          "endDateTime": {
            "title": "Trip end",
            "type": "string",
            "description": "Both modes. Local ISO date and time after the start. Must be supplied with the trip start."
          },
          "fetchDetails": {
            "title": "Full vehicle and host details",
            "type": "boolean",
            "description": "Return full specifications and public host profile. One detail-enrichment event is charged after each returned record with a successfully fetched host profile.",
            "default": true
          },
          "maxItems": {
            "title": "Maximum vehicles",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Default 20. Zero removes the output limit. Turo can still cap each location at 200 vehicles; this does not imply exhaustive coverage.",
            "default": 20
          },
          "maxReviews": {
            "title": "Maximum reviews per vehicle",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Default 20. Guest reviews returned on each vehicle row, newest first, with the host reply when there is one. Set 0 to skip reviews. At most 1000 are read per vehicle.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Default is the Residential proxy group; keep it or bring your own proxy URLs. If the chosen connection cannot be used, the run continues on a backup connection.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "resumeFromRunId": {
            "title": "Resume from run",
            "type": "string",
            "description": "Continue an interrupted run with the same query, dates and detail settings. For recurring comparisons, use incrementalMode instead."
          },
          "incrementalMode": {
            "title": "Incremental mode",
            "type": "boolean",
            "description": "Remember a baseline and return only changes: NEW, UPDATED (with changedFields), REAPPEARED, and optionally UNCHANGED/EXPIRED. UPDATED is driven by any change to the vehicle data (price, rating, trips, location, images, details, host), compared against the stored record; scrape timestamps, status flags and duplicate copies of the search card images and daily price are never compared. Use 'Ignore fields' to exclude more. Unlike resumeFromRunId, no prior run ID is required. Do not combine with resume when a baseline exists.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Optional baseline name. Use different keys for separate scopes and avoid overlapping runs with the same key."
          },
          "emitUnchanged": {
            "title": "Include unchanged vehicles",
            "type": "boolean",
            "description": "Return and bill unchanged rows in incremental mode.",
            "default": false
          },
          "emitExpired": {
            "title": "Include expired vehicles",
            "type": "boolean",
            "description": "Return and bill absent rows only after a complete nonempty scan in incremental mode. Capped and partial searches do not expire records.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Output field names (dotted paths such as host.name for nested keys) that never make a vehicle UPDATED or appear in changedFields. They stay in the output. Example: images, averageDailyPrice.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the 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 (title + key fields), not the full JSON; the complete record stays in the dataset. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}