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.
| Input | What it controls |
|---|---|
modestring · required | Search locations or load individual vehicle links. |
locationsarray | Search mode only. City, airport or place names. |
makesarray | Search mode only. Vehicle make names, such as Tesla. |
minYearinteger | Search mode only. Applied to returned vehicles before the output limit. |
maxYearinteger | Search mode only. Applied to returned vehicles before the output limit. |
minRatingnumber | Search mode only. Excludes unrated vehicles and applies before the output limit. |
fuelTypearray | Search mode only. Keep only these engine types. |
Show 20 more inputs
| Input | What it controls |
|---|---|
vehicleTypearray | Search mode only. Keep only these vehicle types. |
minTotalPriceinteger | Search mode only. Drop vehicles whose quoted trip total (before taxes) is lower. |
maxTotalPriceinteger | Search mode only. Drop vehicles whose quoted trip total (before taxes) is higher. |
ageinteger | Renter age, 18 to 55. Accepted for compatibility; Turo's search does not use it, so it does not change results. |
sortBystring | 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). |
urlsarray | 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. |
startDateTimestring | 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. |
endDateTimestring | Both modes. Local ISO date and time after the start. Must be supplied with the trip start. |
fetchDetailsboolean | Return full specifications and public host profile. One detail-enrichment event is charged after each returned record with a successfully fetched host profile. |
maxItemsinteger | Default 20. Zero removes the output limit. Turo can still cap each location at 200 vehicles; this does not imply exhaustive coverage. |
maxReviewsinteger | 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. |
resumeFromRunIdstring | Continue an interrupted run with the same query, dates and detail settings. For recurring comparisons, use incrementalMode instead. |
incrementalModeboolean | 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. |
stateKeystring | Optional baseline name. Use different keys for separate scopes and avoid overlapping runs with the same key. |
emitUnchangedboolean | Return and bill unchanged rows in incremental mode. |
emitExpiredboolean | Return and bill absent rows only after a complete nonempty scan in incremental mode. Capped and partial searches do not expire records. |
ignoreFieldsForChangesarray | 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. |
mcpConnectorsarray | 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). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap 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.
