Turo Scraper icon

Turo Scraper

Collect Turo vehicles by location and trip dates or listing URLs. Get make, model, year, ratings, photos, dated price estimates, vehicle details and…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Turo Scraper at a glance

Turo Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes id, url, title, make and model, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$1.80 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
27 options

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.

What Turo Scraper can do

  • Two ways in. Search by location, make and trip dates with filters and sorting, or paste direct links (vehicle, city, make, type or search pages).
  • Dated trip quotes. Each vehicle is joined to a Turo-estimated quote for your exact trip dates, not just the generic search-card daily average, so tripTotal and quotedDailyPrice reflect the dates you asked for.
  • Reviews, filters and sorting. Each row can carry its newest guest reviews (up to maxReviews), and you can narrow by make, year, rating, fuel type, vehicle type and price window, then sort by price or distance (Turo applies the sort across its whole result set).
  • Full details on demand. Switch on specifications, delivery options, owner information and the public host profile per run, and pay the detail surcharge only for records where a host profile was actually fetched.
  • Resume without repaying. Continue one interrupted run by its run ID and skip vehicles it already returned, instead of recollecting from scratch.
  • Built for recurring monitoring. Incremental mode returns only new and updated vehicles on repeat runs against the same search (and, with Emit expired listings on, vehicles that disappear or return), so scheduled comparisons don't reprocess everything each time.

Choose what to collect

These inputs let you configure Turo Scraper - Vehicle Search, Trip Quotes and Hosts. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredSearch locations or load individual vehicle links.

Choices: search, url

locationsarraySearch mode only. City, airport or place names.
makesarraySearch mode only. Vehicle make names, such as Tesla.
minYearintegerSearch mode only. Applied to returned vehicles before the output limit.
maxYearintegerSearch mode only. Applied to returned vehicles before the output limit.
minRatingnumberSearch mode only. Excludes unrated vehicles and applies before the output limit.
fuelTypearraySearch mode only. Keep only these engine types.
Show 20 more inputs
More input fields
InputWhat it controls
vehicleTypearraySearch mode only. Keep only these vehicle types.
minTotalPriceintegerSearch mode only. Drop vehicles whose quoted trip total (before taxes) is lower.
maxTotalPriceintegerSearch mode only. Drop vehicles whose quoted trip total (before taxes) is higher.
ageintegerRenter age, 18 to 55. Accepted for compatibility; Turo's search does not use it, so it does not change results.
sortBystringOrder 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).

Choices: relevance, daily_price_low_to_high, daily_price_high_to_low, distance_away

urlsarrayURL 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.
startDateTimestringBoth 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.
endDateTimestringBoth modes. Local ISO date and time after the start. Must be supplied with the trip start.
fetchDetailsbooleanReturn full specifications and public host profile. One detail-enrichment event is charged after each returned record with a successfully fetched host profile.
maxItemsintegerDefault 20. Zero removes the output limit. Turo can still cap each location at 200 vehicles; this does not imply exhaustive coverage.
maxReviewsintegerDefault 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.
resumeFromRunIdstringContinue an interrupted run with the same query, dates and detail settings. For recurring comparisons, use incrementalMode instead.
incrementalModebooleanRemember 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.
stateKeystringOptional baseline name. Use different keys for separate scopes and avoid overlapping runs with the same key.
emitUnchangedbooleanReturn and bill unchanged rows in incremental mode.
emitExpiredbooleanReturn and bill absent rows only after a complete nonempty scan in incremental mode. Capped and partial searches do not expire records.
ignoreFieldsForChangesarrayOutput 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.
mcpConnectorsarrayOptionally 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).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

idid (text)
urlurl (link)
titletitle (text)
makemake (text)
modelmodel (text)
yearyear (number)
vehicleTypevehicleType (text)
ratingrating (number)
completedTripscompletedTrips (number)
citycity (text)
statestate (text)
countrycountry (text)
Show 30 more fields
latitudelatitude (number)
longitudelongitude (number)
tripTotaltripTotal (number)
currencycurrency (text)
quotedDailyPricequotedDailyPrice (number)
quoteStatusquoteStatus (text)
startDateTimestartDateTime (text)
endDateTimeendDateTime (text)
detailStatusdetailStatus (text)
hostStatushostStatus (text)
changeTypechangeType (text)
descriptiondescription (text)
detaildetail (object)
basicCarDetailsbasicCarDetails (object)
ownerowner (object)
hosthost (object)
hostIdhostId (text)
imagesimages (array)
locationlocation (object)
coveragecoverage (object)
reviews.ratingreviews.rating (number)
reviews.textreviews.text (text)
reviews.datereviews.date (text)
reviews.reviewerreviews.reviewer (object)
reviews.hostReplyreviews.hostReply (object)
reviewsStatusreviewsStatus (text)
changedFieldschangedFields (array)
firstSeenAtfirstSeenAt (date)
lastSeenAtlastSeenAt (date)
scrapedAtscrapedAt (date)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "id": "101",
  "url": "https://turo.com/us/en/car-rental/united-states/los-angeles-ca/tesla/model-3/101",
  "title": "2020 Tesla Model 3",
  "make": "Tesla",
  "model": "Model 3",
  "year": 2020,
  "vehicleType": "CAR",
  "rating": 4.8,
  "completedTrips": 126,
  "hostId": 1101,
  "city": "Los Angeles",
  "state": "CA",
  "country": "US",
  "latitude": 34.0522,
  "longitude": -118.2437,
  "location": {
    "city": "Los Angeles",
    "country": "US",
    "latitude": 34.0522,
    "longitude": -118.2437,
    "precision": {
      "level": "APPROXIMATE"
    }
  },
  "images": [
    "https://images.turo.com/media/vehicle/images/sample1.jpg"
  ],
  "averageDailyPrice": {
    "amount": 35,
    "currency": "USD"
  },
  "tripTotal": 117,
  "currency": "USD",
  "quotedDailyPrice": 39,
  "quote": {
    "totalTripPrice": {
      "amount": 117,
      "currencyCode": "USD"
    },
    "vehicleDailyPriceAfterDiscount": {
      "amount": 39,
      "currencyCode": "USD"
    },
    "nonIncludedLineItems": [
      {
        "type": "PROTECTION"
      }
    ]
  },
  "quoteStatus": "complete",
  "startDateTime": "2026-11-10T10:00:00",
  "endDateTime": "2026-11-13T10:00:00",
  "detailStatus": "complete",
  "hostStatus": "complete",
  "basicCarDetails": {
    "numberOfSeats": 5
  },
  "owner": {
    "id": 1101,
    "name": "Public Host"
  },
  "host": {
    "driver": {
      "id": 1101
    },
    "bio": "Public biography",
    "verifications": {
      "emailVerified": true
    }
  },
  "coverage": {
    "query": "Los Angeles, California",
    "returned": 18,
    "totalHits": 18,
    "complete": true,
    "reason": "source_end"
  },
  "scopeId": "8f2a1c4d9b3e7f60a1c2d3e4",
  "scrapedAt": "2026-11-05T02:00:00+00:00"
}

Ways to use this data

  • Car-sharing market research: compare vehicle types, ratings and pricing by city or make to benchmark host supply against your own fleet.
  • Dynamic pricing analysis: pull dated quotes across many vehicles to build a competitor pricing baseline for a specific trip window.
  • Fleet and demand monitoring: schedule Incremental mode runs to catch new listings, price changes, or vehicles that disappear from a market.
  • Host outreach and lead lists: collect public host profiles and completed-trip counts to identify active hosts worth contacting.
  • Travel and rental comparison tools: feed live vehicle availability and dated pricing into your own booking or comparison app.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Turo Scraper return?

The documented output for Turo Scraper includes id, url, title, make, model, year, vehicletype and rating. Availability of each field depends on the source page and the selected mode.

How much does Turo Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I track new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated vehicles for the same search scope, and unchanged vehicles are not billed unless you opt in; with Emit expired listings also on and a clean complete scan, expired and reappeared vehicles are included too. Keep the trip dates fixed (don't leave them empty) so the scope stays the same run to run.

Why did my run return fewer vehicles than maxItems?

Turo caps each single search around 200 vehicles regardless of how many it reports in total; search mode adds per-vehicle-type searches when needed (see vehicleType) but a very large city can still be incomplete. makes, vehicleType and fuelType narrow the search at the source; minYear, maxYear and minRating are applied locally before maxItems, so a narrow filter can leave matching vehicles outside what was returned. Widen the filters or add more locations for broader coverage.

Why did my run fail instead of returning an empty dataset?

A run fails when any location search or pasted listing link can't be read, such as a removed vehicle link, or when the input itself is invalid (for example an unreadable Resume ID, or Resume combined with an existing Incremental baseline). A location with no matching address returns zero vehicles for that location normally, without failing the run. If only some per-vehicle detail or quote lookups fail partway through, you still get the base records that were found, with their status fields marked accordingly.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Turo Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.