Stay organized with collectionsSave and categorize content based on your preferences.
You can integrate Commute Search into your UI to allow job seekers to search for
jobs within a geographic area set by commute time. Commute Search estimates commute time based
on a user's selected transit mode and the time of day they plan to travel.
Implementing Commute Search
Before you can implement Commute Search, Cloud Talent Solution must be hooked up to your UI.
Follow thequickstartguides to set up Cloud Talent Solution.
Commute Search uses the address data that you uploaded with your jobs during CTS implementation to calculate commute time.
To enable this feature on your existing CTS UI, send ajobs.searchrequest and include aCommuteFilterobject in theJobQuery.commuteFilterfield.commuteMethod,travelDuration, andstartCoordinatesare required fields.
publicstaticvoidcommuteSearch(StringcompanyName)throwsIOException,InterruptedException{// Make sure to set the requestMetadata the same as the associated search requestRequestMetadatarequestMetadata=newRequestMetadata()// Make sure to hash your userID.setUserId("HashedUserId")// Make sure to hash the sessionID.setSessionId("HashedSessionID")// Domain of the website where the search is conducted.setDomain("www.google.com");JobQueryjobQuery=newJobQuery().setCommuteFilter(newCommuteFilter().setRoadTraffic("TRAFFIC_FREE").setCommuteMethod("TRANSIT").setTravelDuration("1000s").setStartCoordinates(newLatLng().setLatitude(37.422408).setLongitude(-122.085609)));if(companyName!=null){jobQuery.setCompanyNames(Arrays.asList(companyName));}SearchJobsRequestsearchJobsRequest=newSearchJobsRequest().setJobQuery(jobQuery).setRequestMetadata(requestMetadata).setJobView("JOB_VIEW_FULL").setRequirePreciseResultSize(true);SearchJobsResponseresponse=talentSolutionClient.projects().jobs().search(DEFAULT_PROJECT_ID,searchJobsRequest).execute();Thread.sleep(1000);System.out.printf("Search jobs for commute results: %s\n",response);}
// commuteSearch searches for jobs within commute filter.funccommuteSearch(wio.Writer,projectID,companyNamestring)(*talent.SearchJobsResponse,error){ctx:=context.Background()client,err:=google.DefaultClient(ctx,talent.CloudPlatformScope)iferr!=nil{returnnil,fmt.Errorf("google.DefaultClient: %w",err)}// Create the jobs service client.service,err:=talent.New(client)iferr!=nil{returnnil,fmt.Errorf("talent.New: %w",err)}jobQuery:=&talent.JobQuery{CommuteFilter:&talent.CommuteFilter{RoadTraffic:"TRAFFIC_FREE",CommuteMethod:"TRANSIT",TravelDuration:"1000s",StartCoordinates:&talent.LatLng{Latitude:37.422408,Longitude:-122.085609,},},}ifcompanyName!=""{jobQuery.CompanyNames=[]string{companyName}}parent:="projects/"+projectIDreq:=&talent.SearchJobsRequest{// Make sure to set the RequestMetadata the same as the associated// search request.RequestMetadata:&talent.RequestMetadata{// Make sure to hash your userID.UserId:"HashedUsrId",// Make sure to hash the sessionID.SessionId:"HashedSessionId",// Domain of the website where the search is conducted.Domain:"www.googlesample.com",},// Set the actual search term as defined in the jobQuery.JobQuery:jobQuery,// Set the search mode to a regular search.SearchMode:"JOB_SEARCH",RequirePreciseResultSize:true,}resp,err:=service.Projects.Jobs.Search(parent,req).Do()iferr!=nil{returnnil,fmt.Errorf("failed to search for jobs with commute filter: %w",err)}returnresp,nil}
# project_id = "Id of the project"# commute_method = "The method of transportation for which to calculate the commute time"# travel_duration = "The maximum travel time in seconds"# start_coordinates = "The latitude and longitude of the location from which to calculate the commute time"require"google/apis/jobs_v3"jobs=Google::Apis::JobsV3talent_solution_client=jobs::CloudTalentSolutionService.new# @see https://developers.google.com/identity/protocols/application-default-credentials#callingrubytalent_solution_client.authorization=Google::Auth.get_application_default("https://www.googleapis.com/auth/jobs")# Make sure to set the request_metadata the same as the associated search requestrequest_metadata=jobs::RequestMetadata.newuser_id:"HashedUserId",session_id:"HashedSessionId",domain:"www.google.com"# Set location filtercommute_filter=jobs::CommuteFilter.newroad_traffic:"TRAFFIC_FREE",commute_method:commute_method,travel_duration:travel_duration,start_coordinates:start_coordinates# Perform a search for analyst related jobssearch_jobs_request=jobs::SearchJobsRequest.newrequest_metadata:request_metadata,job_query:(jobs::JobQuery.newcommute_filter:commute_filter),job_view:"JOB_VIEW_FULL",require_precise_result_size:truesearch_jobs_response=talent_solution_client.search_jobsproject_id,search_jobs_requestputssearch_jobs_response.to_jsonsearch_jobs_response
Recommendations for your UI
Cloud Talent Solution doesn't allow searching by both distance (using the CTS location filter) AND commute time.
To allow job seekers to access both options, use a 2-tab approach or similar.
Modify the front-end of your application so that when a job seeker requests a commute search,
the back-end populates the relevant information in thecommute filterand calls the API as it would in a regular search request.
Include these newly added items in your UI:
An option to choose whether this is a distance search or commute search. For example,
your Search UI could look like the sample below:
A drop-down menu of commute method options.
An option to adjust traffic conditions.
The total travel time (the maximum supported travel time is 60 minutes).
Commute start time.
The commute time information returned from the API is then used to display information to the job seeker. Only relevant jobs
located within the designated commute time area are returned in the results list. See the Job searchBest Practicesdocumentation for a discussion of ways to adjust the order and number of jobs returned within this area.
Generating a map with commute information (Recommended)
You can leverage the Maps API to generate a map based on the commute time information returned from the CTS
API and embed it into the results returned to a job seeker. The Maps API suite has several options
for displaying the map. Some Maps API options are more effective than others. For example, theGoogle Maps JavaScript Heatmap visualizationpaired withmarker clusteringis a great way to visualize the relevant jobs returned to a job seeker inside the area determined by their set commute preferences. Conversely,Directions Modedoes not show
all jobs returned in a search request and is not a recommended option.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[],[],null,[]]