- Allow users to set their commute preferences to locations they care about
- Enrich each result with the individual user's travel times and routes
- Increase conversions by showing more relevant information on each listing
- Capture user commute preferences to build a richer profile for relevant notifications and alerts
300% increase in conversions
More relevant results for users
Reduced agent churn with higher quality leads

Ben Amos
Senior Product Manager at Zoopla
“With TravelTime, we help users much earlier in their property search journey, providing a more personalised discovery process based on what they need to be near, how long they want to travel, and by what transport mode.”
Request type | POST |
Host | api.traveltimeapp.com |
Endpoint | /v4/time-filter |
Authentication | Application-Id Api-Key |
{
"locations": [
{
"id": "User Input Location",
"coords": {
"lat": 51.508930,
"lng": -0.131387
}
},
{
"id": "Listing Location",
"coords": {
"lat": 51.508824,
"lng": -0.167093
}
}
],
"arrival_searches": [
{
"id": "Route calculation",
"arrival_location_id": "Listing Location",
"departure_location_ids": [
"User Input Location"
],
"transportation": {
"type": "public_transport"
},
"travel_time": 7200,
"arrival_time": "2024-10-01T08:00:00",
"properties": [
"travel_time",
"route"
]
}
]
}
locations - an array containing the IDs and lat-long coordinates of the user's input location and the listing location
arrival_searches - will calculate a route from the user's input location to the listing location
arrival_time - this can either be filled automatically (e.g 9am next Monday), or through some user input (e.g with a 'peak' and 'off-peak' option)
travel_time - set a maximum commute time (up to 4 hours) - a lower value will deliver better performance through lower response times
transportation - taken from the user's chosen transport mode, typically Driving / Public_Transport / Walking / Cycling
properties - include travel_time to retrieve the total journey time, and route for the details of the journey
{
"results": [
{
"search_id": "Route calculation",
"locations": [
{
"id": "User Input Location",
"properties": [
{
"travel_time": 1764,
"route": {
"departure_time": "2024-10-01T08:30:36+01:00",
"arrival_time": "2024-10-01T08:58:39+01:00",
"parts": [
{
"id": 0,
"type": "start_end",
"mode": "walk",
"directions": "Start your journey 28 meters northeast",
"distance": 28,
"travel_time": 20,
"coords": [
{
"lat": 51.50893,
"lng": -0.131387
},
{
"lat": 51.50914960000015,
"lng": -0.13118650000000479
}
],
"direction": "northeast"
},
{
"id": 1,
"type": "road",
"mode": "walk",
"directions": "Walk 69 meters along Orange Street",
"distance": 69,
"travel_time": 59,
"coords": [
{
"lat": 51.50914960000015,
"lng": -0.13118650000000479
},
{
"lat": 51.508882400000005,
"lng": -0.13190779999999896
},
{
"lat": 51.50882940000015,
"lng": -0.1320508000000048
}
],
"road": "Orange Street"
},
travel_time - The total journey time
parts - The individual legs of the journey
npm i traveltime-api
This package comes with TypeScript support.
Before starting, the package needs to be configured with your account's application ID and Key, which can be found in the TravelTime Developer Portal Dashboard. To create an instance - you will need to create new TravelTimeClient class object with credentials you got from dashboard.
import { TravelTimeClient } from 'traveltime-api';
const travelTimeClient = new TravelTimeClient({
apiKey: 'YOUR_APP_KEY',
applicationId: 'YOUR_APP_ID',
});
travelTimeClient.timeFilter({
"locations": [
{
"id": "User Input Location",
"coords": {
"lat": 51.508930,
"lng": -0.131387
}
},
{
"id": "Listing Location",
"coords": {
"lat": 51.508824,
"lng": -0.167093
}
}
],
"arrival_searches": [
{
"id": "Route calculation",
"arrival_location_id": "Listing Location",
"departure_location_ids": [
"User Input Location"
],
"transportation": {
"type": "public_transport"
},
"travel_time": 7200,
"arrival_time": "2024-10-01T08:00:00",
"properties": [
"travel_time",
"route"
]
}
]
}).then((data) => console.log(data))
.catch((e) => console.error(e));
Install Travel Time Python SDK in a virtualenv
using pip
. virtualenv
is a tool to create isolated Python environments.
virtualenv
allows to install Travel Time Python SDK without needing system install permissions, and without clashing with the installed system dependencies.
pip3 install virtualenv
virtualenv <your-env>
source <your-env>/bin/activate
<your-env>/bin/pip install traveltimepy
pip install virtualenv
virtualenv <your-env>
<your-env>\Scripts\activate
<your-env>\Scripts\pip.exe install traveltimepy
In order to authenticate with Travel Time API, you will have to supply the Application Id and Api Key.
- app_id: str - Application Id
- api_key: str - Api Key
- limit_per_host: int - Number of simultaneous connections to one host.
- rate_limit: int - Number of searches which can be made in a time window.
- time_window: int - Duration, in seconds, of the time period in which to limit the rate.
- retry_attempts: int - Number of retries for failed requests.
- host: str - TravelTime host, default value is api.traveltimeapp.com.
- timeout: int - Maximum session time until timeout. Default value is 300 (5 minutes).
from traveltimepy import TravelTimeSdk
sdk = TravelTimeSdk(app_id="YOUR_APP_ID", api_key="YOUR_APP_KEY")
import asyncio
from traveltimepy import Location, Coordinates, PublicTransport, Property, TravelTimeSdk
async def main():
sdk = TravelTimeSdk("YOUR_APP_ID", "YOUR_APP_KEY")
locations = [
Location(id="User Input Location", coords=Coordinates(lat=51.508930, lng=-0.131387)),
Location(id="Listing Location", coords=Coordinates(lat=51.508824, lng=-0.167093)),
]
results = await sdk.time_filter_async(
locations=locations,
search_ids={
"User Input Location": ["Listing Location"],
},
departure_time="2024-10-01T08:00:00",
travel_time=7200,
transportation=PublicTransport(type="bus"),
properties=[Property.TRAVEL_TIME, Property.ROUTE],
)
print(results)
asyncio.run(main())
What is the performance like?
The average response time for a route is 500ms.
How accurate is your data?
How reliable is the service?
Where do you have coverage?
How much will this cost?
We never charge based on usage. Instead we offer unlimited usage licences for a fixed monthly fee. The only thing you need to decide is the maximum Requests Per Minute (RPM) you need.