Travelstart Scraper - Flights, Hotels and Buses avatar

Travelstart Scraper - Flights, Hotels and Buses

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Travelstart Scraper - Flights, Hotels and Buses

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

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: flightsSearch supports return, one-way and multi-city trips with four cabin choices.
  • Locations: suggestions and its alias airportSuggest return airport/city matches.
  • Hotels: hotelsSearch, hotelDetails and hotelsRecommended return hotel rows. scrapeDetails adds available hotel details to search rows and is off by default.
  • Rooms: includeRooms adds separately billed room-offer rows from hotelDetails; it is off by default.
  • Buses: buses returns trips; busLocations returns 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

FieldDescriptionExample
amountItinerary fare returned by Travelstart.849
currencyCodeCurrency for that fare.ZAR
airlineNameAirline name, when supplied.FlySafair
directionOutbound, inbound or bundled itinerary.outbound
originFirst leg's starting airport.JNB
destinationFirst leg's endpoint, not necessarily the final airport.CPT
finalDestinationLast leg's endpoint.DUR
segmentsFlight numbers, airports and times across the legs.[]
durationMinutesFirst leg's duration in minutes.120
stopsConnection count; technical stops are separate.0

Hotel rows: hotel

FieldDescriptionExample
nameProperty name.Example Hotel
priceSearch price or lowest available room price in details.1250
currencyCurrency accompanying a price.ZAR
priceAvailableIndicates whether a price was returned.true
starsProperty star rating.4
addressStructured address, with missing parts left empty.{"locality":"Cape Town"}
phonesHotel's own phone, when available in details.[]
roomCountNumber of room offers before the row limit.3

Room-offer rows: room

FieldDescriptionExample
hotelIdParent hotel identifier.lp2a8f4
boardNameIncluded meal arrangement.Room only
priceOffer price; currency gives its currency.1250
cancellationCancellation-policy messages.[]

Bus-trip rows: bus_trip

FieldDescriptionExample
providerBus operator.Intercape
classTypeFare class; classes can be separate rows.Saver
departureDateTimeDeparture date and time.2026-12-10T18:00:00
availableSeatsSeats shown for the service.12
priceTrip fare; currency is usually ZAR.450

Bus-location rows: bus_location

FieldDescriptionExample
locationIdBus-location identifier.100
locationNameStop or city name.Johannesburg
stopsAssociated provider stops.[]

Airport/city suggestion rows

The source location type is retained in rowType, with location as the fallback.

FieldDescriptionExample
iataAirport or city code.JNB
airportAirport name, if applicable.O. R. Tambo International Airport
cityCity name.Johannesburg
locationIdTravelstart 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

  1. Open Travelstart Scraper in Apify Console.
  2. Fill the target fields for your mode using the guidance below.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and wait for completion.
  5. 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.

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.

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

FieldWhat to enterDefault
modeA mode described above.auto
queryAirport, hotel city or bus stop text.None; sample JNB
from, toFlight endpoints or bus cities.None
hotelIdsHotel identifiers from search rows.None
placeIdKnown hotel place identifier instead of query.None
countrySitetravelstart.com, travelstart.co.za, travelstart.com.ng, travelstart.co.ke, or a listed market code.travelstart.com
departureDate, returnDateDates as YYYY-MM-DD.Departure +24 days; flight return +7 days
tripTypereturn, oneway or multi.return
legsAt least two dated routes for multi-city flights.None
cabinECONOMY, PREMIUM, BUSINESS or FIRST.ECONOMY
adultsAdults; hotel guests per room or bus passengers.1
children, infants, youngAdultsAdditional flight traveller counts.0 each
checkin, checkoutHotel dates as YYYY-MM-DD.+24 days; one night
rooms, childrenAgesHotel room count and children's ages per room.1; []
currency, guestNationalityHotel currency and nationality codes.ZAR; ZA
scrapeDetailsAdd available details to hotel search rows.false
includeRoomsEmit room offers from hotel details.false
maxResultsRows 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 hotelIds in 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 planStart at 512 MBPrice per rowPrice 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 ApifyClient
client = 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

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.

More travel, hotel and flight scrapers from the same publisher:

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.