Travelstart Scraper - Flights, Hotels and Buses
Pricing
from $2.20 / 1,000 results
Travelstart Scraper - Flights, Hotels and Buses
Extract Travelstart flight fares, hotels, room offers, bus trips and airport suggestions. Choose African flight markets or the global site. Pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Travelstart Scraper
Extract Travelstart flight fares, hotels, bus trips and airport suggestions as rows you can export.
- Flight prices, airlines, segments, stops and baggage information.
- Hotel prices, ratings, addresses and optional room-offer rows.
- Bus services, departure times, fares and available seats.
- Airport and city identifiers for resolving travel destinations.
- $3.00 per 1,000 delivered rows on the Free plan, plus a small start fee.
What does Travelstart Scraper do?
Travelstart Scraper collects public travel search results without booking tickets or accessing private accounts. Flight markets include South Africa, Nigeria, Kenya and the global site, selected through countrySite. Hotel and bus availability depends on the selected mode, not just the flight market.
- Flights:
flightsSearchsupports return, one-way and multi-city trips with four cabin choices. - Locations:
suggestionsand its aliasairportSuggestreturn airport/city matches. - Hotels:
hotelsSearch,hotelDetailsandhotelsRecommendedreturn hotel rows.scrapeDetailsadds available hotel details to search rows and is off by default. - Rooms:
includeRoomsadds separately billed room-offer rows fromhotelDetails; it is off by default. - Buses:
busesreturns trips;busLocationsreturns stops. Providers include Intercape, Carma and Eldo.
carsSearch and packages are not available. This is an unofficial Actor, not affiliated with Travelstart.
What data can you extract from Travelstart?
Each row has a string id and a rowType. Use them together to identify rows within the results. Most travel rows also include mode, countrySite and capturedAt; room rows identify their parent through hotelId.
Flight rows: flight_itinerary
| Field | Description | Example |
|---|---|---|
amount | Itinerary fare returned by Travelstart. | 849 |
currencyCode | Currency for that fare. | ZAR |
airlineName | Airline name, when supplied. | FlySafair |
direction | Outbound, inbound or bundled itinerary. | outbound |
origin | First leg's starting airport. | JNB |
destination | First leg's endpoint, not necessarily the final airport. | CPT |
finalDestination | Last leg's endpoint. | DUR |
segments | Flight numbers, airports and times across the legs. | [] |
durationMinutes | First leg's duration in minutes. | 120 |
stops | Connection count; technical stops are separate. | 0 |
Hotel rows: hotel
| Field | Description | Example |
|---|---|---|
name | Property name. | Example Hotel |
price | Search price or lowest available room price in details. | 1250 |
currency | Currency accompanying a price. | ZAR |
priceAvailable | Indicates whether a price was returned. | true |
stars | Property star rating. | 4 |
address | Structured address, with missing parts left empty. | {"locality":"Cape Town"} |
phones | Hotel's own phone, when available in details. | [] |
roomCount | Number of room offers before the row limit. | 3 |
Room-offer rows: room
| Field | Description | Example |
|---|---|---|
hotelId | Parent hotel identifier. | lp2a8f4 |
boardName | Included meal arrangement. | Room only |
price | Offer price; currency gives its currency. | 1250 |
cancellation | Cancellation-policy messages. | [] |
Bus-trip rows: bus_trip
| Field | Description | Example |
|---|---|---|
provider | Bus operator. | Intercape |
classType | Fare class; classes can be separate rows. | Saver |
departureDateTime | Departure date and time. | 2026-12-10T18:00:00 |
availableSeats | Seats shown for the service. | 12 |
price | Trip fare; currency is usually ZAR. | 450 |
Bus-location rows: bus_location
| Field | Description | Example |
|---|---|---|
locationId | Bus-location identifier. | 100 |
locationName | Stop or city name. | Johannesburg |
stops | Associated provider stops. | [] |
Airport/city suggestion rows
The source location type is retained in rowType, with location as the fallback.
| Field | Description | Example |
|---|---|---|
iata | Airport or city code. | JNB |
airport | Airport name, if applicable. | O. R. Tambo International Airport |
city | City name. | Johannesburg |
locationId | Travelstart location identifier. | JNB |
Contact fields are not guaranteed. leadAbsences explains missing contact information; org identifies the relevant business, not Travelstart customer support.
How to scrape Travelstart
- Open Travelstart Scraper in Apify Console.
- Fill the target fields for your mode using the guidance below.
- Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Download the dataset or read its rows through the API.
Empty input starts the form's example: suggestions for JNB, limited to 1 row. Normal start and row charges apply. With mode: auto, hotelIds selects hotel details, placeId selects hotel search, query selects suggestions, and from plus to selects flights. That is also the target priority when fields conflict. Choose an explicit mode for hotel text searches or buses.
Flights
Fill from and to with IATA codes or city names. Omitted departure dates default to 24 days ahead; return flights default to seven days later. Multi-city trips need tripType: multi and at least two legs, each with from, to and departureDate.
Suggestions and airport suggestions
Use query for a city, airport name or IATA code. airportSuggest is an alias of suggestions, not a different dataset.
Hotel search
Choose hotelsSearch and enter a city in query, or use a known placeId. Optional scrapeDetails can add the hotel's phone, postal code and policies. It does not itself emit room rows.
Hotel details
Choose hotelDetails and supply hotelIds from a hotel search. Enable includeRooms for individual offers. Hotel and room rows share the same per-hotel limit; a small limit may leave no room rows after hotel rows.
Recommended hotels
Choose hotelsRecommended; no city or hotel identifier is required. These are recommendations, not a city search.
Bus trips
Choose buses, enter departure and arrival cities in from and to, and set departureDate. Use oneway for a single journey; supply returnDate for a return search.
Bus locations
Choose busLocations and put a stop or city name in query before searching trips.
What to fill in
| Field | What to enter | Default |
|---|---|---|
mode | A mode described above. | auto |
query | Airport, hotel city or bus stop text. | None; sample JNB |
from, to | Flight endpoints or bus cities. | None |
hotelIds | Hotel identifiers from search rows. | None |
placeId | Known hotel place identifier instead of query. | None |
countrySite | travelstart.com, travelstart.co.za, travelstart.com.ng, travelstart.co.ke, or a listed market code. | travelstart.com |
departureDate, returnDate | Dates as YYYY-MM-DD. | Departure +24 days; flight return +7 days |
tripType | return, oneway or multi. | return |
legs | At least two dated routes for multi-city flights. | None |
cabin | ECONOMY, PREMIUM, BUSINESS or FIRST. | ECONOMY |
adults | Adults; hotel guests per room or bus passengers. | 1 |
children, infants, youngAdults | Additional flight traveller counts. | 0 each |
checkin, checkout | Hotel dates as YYYY-MM-DD. | +24 days; one night |
rooms, childrenAges | Hotel room count and children's ages per room. | 1; [] |
currency, guestNationality | Hotel currency and nationality codes. | ZAR; ZA |
scrapeDetails | Add available details to hotel search rows. | false |
includeRooms | Emit room offers from hotel details. | false |
maxResults | Rows per search or hotel ID, from 1 to 1000. | 70; sample 1 |
Flights:
{"mode":"flightsSearch","from":"JNB","to":"CPT","tripType":"oneway","maxResults":3}
Suggestions:
{"mode":"suggestions","query":"Johannesburg","maxResults":3}
Airport-suggestion alias:
{"mode":"airportSuggest","query":"JNB","maxResults":3}
Hotel search:
{"mode":"hotelsSearch","query":"Cape Town","scrapeDetails":true,"maxResults":3}
Hotel details: replace the illustrative ID with one returned by your search.
{"mode":"hotelDetails","hotelIds":["lp2a8f4"],"includeRooms":true,"maxResults":3}
Recommended hotels:
{"mode":"hotelsRecommended","maxResults":3}
Bus trips:
{"mode":"buses","from":"Johannesburg","to":"Cape Town","tripType":"oneway","maxResults":3}
Bus locations:
{"mode":"busLocations","query":"Johannesburg","maxResults":3}
For target-based modes, maxItems and limit alias maxResults; origin, destination and hotelId alias from, to and hotelIds. Close field misspellings can be corrected; other unknown fields are ignored with a note. For hotelsRecommended, use exact field names, especially maxResults: alias correction is not applied.
INPUT_REPORT in the default key-value store records resolved input and warnings. Unrunnable target input can fail before collection with INVALID_INPUT: <field> — <how to fix>. Other validation errors may use shorter messages; unavailable modes are rejected directly. No rows are charged when none are delivered, but the start fee still applies. Omitted dates get future defaults; supplied dates are not automatically moved forward.
Output example
Illustrative suggestion row, not a live result:
{"id": "JNB","rowType": "location","type": "location","mode": "suggestions","iata": "JNB","code": "JNB","city": "Johannesburg","airport": "O. R. Tambo International Airport","country": "South Africa","countryIata": "ZA","countrySite": "travelstart.com","market": "GO","capturedAt": "2026-10-24T08:00:00+00:00"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY records delivered rows and warnings; ERROR_SUMMARY describes a failed run.
Why use this Travelstart scraper?
- Pay for delivered rows: unsuccessful searches do not create billable result rows.
- Keep delivered data: rows already written remain available after a stop; undelivered data is not guaranteed after a manual abort.
- Inspect missing values: unavailable fields remain empty rather than being invented.
- Compare travel options: use consistent fields for fares, routes and hotel offers.
- Several hotel inputs: pass multiple
hotelIdsin one details run. - No proxy setup: you do not need to set up proxies or provide a Travelstart account.
How much does it cost to scrape Travelstart?
Pricing is pay-per-event. At the default 512 MB memory, one start event costs $0.005. Start billing is one event per GB, with a minimum of one. Platform usage is included in these prices.
| Apify plan | Start at 512 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
maxResults applies per search or hotel ID: default 70, maximum 1000. Larger requests are collected in parts of up to 70 rows. Every row type, including optional rooms, uses that input's budget and costs the same.
Free Apify-plan runs are capped at 200 rows per run and 10 runs of this Actor. The whole run stops at Maximum cost per run (maxTotalChargeUsd in the API). Results can be fewer than requested because of availability or these limits.
Example: one search delivering 3 rows on the Free plan costs 3 × $0.003 + $0.005 = $0.014 at 512 MB.
What happens when the run timeout is too short
A search that needs longer can pause for automatic resumption instead of failing. Its status message says "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The run temporarily shows ABORTED.
When results are ready, the same run resumes, reports "Resumed: delivering N rows.", writes to the same dataset and finishes as SUCCEEDED. This resume process does not deliver or charge the same row twice. No action is needed for this specific queued status; it is not the same as every other aborted run.
This can happen at most 3 times per run. Keep the default timeout of 3600 seconds to reduce interruptions. Synchronous API endpoints (run-sync, run-sync-get-dataset-items) wait at most 300 seconds and may return no rows while the run is paused. For longer searches, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.
Use with AI agents and the API
Apify MCP server
Use this remote server in Claude, ChatGPT, Cursor or VS Code with an MCP-capable client:
https://mcp.apify.com?tools=lentic_clockss/travelstart-scraper
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; read rows with get-dataset-items. If remote servers are unavailable, run npx @apify/actors-mcp-server --tools lentic_clockss/travelstart-scraper with APIFY_TOKEN set.
Example prompt: "Find up to 3 Travelstart airport suggestions for Johannesburg and return their IATA codes."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/travelstart-scraper").call(run_input={"mode": "suggestions", "query": "JNB", "maxResults": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/travelstart-scraper').call({mode: 'suggestions', query: 'JNB', maxResults: 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For asynchronous HTTP calls, send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~travelstart-scraper/runs with your Bearer token. Read results using GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json after completion.
Integrations
Use the Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable or a webhook. Use Apify Schedules for recurring searches.
FAQ
Is it legal to scrape Travelstart?
This Actor collects public data. You are responsible for Travelstart's terms and applicable data-protection law. Processing personal data requires a lawful basis; public visibility alone does not establish one.
Why did my run end as ABORTED?
If the status says it will resume automatically, wait for the same run to continue. A manual abort or another error is different; check the status message before starting another run.
How many results can I get?
Request 1–1000 rows per input with maxResults. Actual availability, your spending limit and free-plan caps may reduce delivery. Airport suggestions have a maximum of 50 source matches.
Why are some fields empty?
Travelstart may omit prices, airline names or contacts. Hotel search can return unpriced inventory. An empty field is not a fabricated zero or a confirmed absence of inventory.
Can it book travel or access my account?
No. It collects search data and does not complete bookings or read private accounts.
How do I get room offers?
Use hotelDetails with valid hotelIds and includeRooms: true. Room rows cost the same as hotel rows and share the limit. Offers depend on dates and occupancy.
Why is my city query returning airports instead of hotels?
A query alone selects suggestions. Set mode: hotelsSearch explicitly for a hotel city search.
Are cars and packages supported?
No. carsSearch and packages are unavailable and fail with an explanatory message.
Limitations
- Prices and availability can change between collection and booking; rows are not reservations.
- Flight market choices do not imply worldwide bus or hotel coverage. Bus searches target South African services.
- No guaranteed number of matching rows, priced hotels or contact fields.
- Attribute lists are capped at 50 entries; hotel images are capped at 10.
- Use explicit future dates for repeatable comparisons. Defaults change with the day of the run.
Related scrapers
More travel, hotel and flight scrapers from the same publisher:
- Trip.com Scraper — Hotels Flights Trains Cars
- Traveloka Scraper
- Expedia Scraper
- Skyscanner Scraper
- Agoda Scraper — Hotels, Flights, Packages & More
- Despegar Scraper
- TripAdvisor Scraper — Hotels, Restaurants & More
- Airbnb Listings Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.