Explore top Sustainability jobs with Hays
For sustainability professionals looking to make a difference, we’ve got the change-making jobs you’re after.
Organizations of all sizes—from startups to global corporations—are seeking sustainability professionals who can drive impact and deliver value at every level. At Hays, we specialize in connecting talent with purpose, helping you transition into or grow within the green economy.
With 13 offices across the U.S., our regional insights and expansive employer network unlock a wide range of sustainability-focused roles tailored to your expertise and ambitions.
We place professionals across key areas, including:
- Net Zero & Climate Change
- Environmental Social Governance (ESG)
- Sustainable Buildings
- Energy & Carbon Management
- Environmental Impact Assessment (EIA)
- Biodiversity & Air Quality
- Contaminated Land
- Water Management & Flood Risk
We partner with leading public and private sector organizations across industries such as:
- Manufacturing
- Professional Services
- Retail & FMCG
- Travel & Hospitality
- Education
- Technology & Infrastructure
Our reach spans major cities including New York, Los Angeles, Chicago, Orlando, Dallas, and more—giving you access to exciting sustainability opportunities nationwide.
[Explore sustainability jobs now] and discover opportunities that match your expertise and passion.
The following has evaluated to null or missing: ==> haysJobsLocalService.getjobs(keyword, null, null,"3", ucmLocale) [in template "20115#20151#T-HAYS-JOBS-BY-KEYWORD-WEB2" at line 26, column 36] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign jobsResults = haysJobsLocalSe... [in template "20115#20151#T-HAYS-JOBS-BY-KEYWORD-WEB2" at line 26, column 13] ----
1<div class="py-16">
2
3<#assign haysJobsLocalService = serviceLocator.findService("com.hays.jobs.service.HaysJobsService")>
4<#assign ucmLocaleKey = themeDisplay.getLocale()+"."+siteType+"."+"ucmLocale">
5<#assign mobileUrlKey = themeDisplay.getLocale()+"."+siteType+"."+"WEB2_Mobile_Hostname">
6<#assign jobURLKey = themeDisplay.getLocale()+"."+siteType+"."+"WEB2_JobSearch">
7<#assign jobSearchUrl = propsUtil.get(jobURLKey)!"">
8<#assign ucmLocale = propsUtil.get(ucmLocaleKey)!"">
9<#assign mobilePortalUrl = propsUtil.get(mobileUrlKey) !"">
10<#assign langId = themeDisplay.getLanguageId() />
11<#assign currency = staticUtil["java.util.Currency"]>
12<#assign textFormatter = staticUtil["java.net.URLEncoder"]>
13
14<#assign index = 3 />
15<#assign jobCardTitle = ""/>
16<#assign portalSearchURL = "" />
17<#assign jobFriendlyUrl = "" />
18<#assign jobCardSalaryDescription = ""/>
19<#assign jobCardLocationDescription = ""/>
20
21<#if JobsByKewords.getSiblings()?has_content>
22 <#list JobsByKewords.getSiblings() as cur_JobsByKeword>
23 <#assign keyword = cur_JobsByKeword.Keyword.getData()>
24 <#assign encodedKeyword = textFormatter.encode(keyword, "UTF-8")>
25 <#if keyword?? && keyword?has_content>
26 <#assign jobsResults = haysJobsLocalService.getjobs(keyword, null, null,"3", ucmLocale)>
27 <#assign portalSearchURL = mobilePortalUrl + "/" + jobSearchUrl + "?q=${encodedKeyword}" />
28
29 <#if !jobsResults.getJSONObject("result").isNull("jobs")>
30 <div>
31
32 <div class="d-flex justify-content-between align-items-end container-content flex-wrap mb-9">
33 <#if cur_JobsByKeword.Title.getData()?has_content>
34 <h2 class="text-brand-blue font-weight-light mb-0 fs-700 fs-lg-800 mb-0 section-heading">
35 ${cur_JobsByKeword.Title.getData()?keep_before(" ")}
36 <span class="font-weight-semibold">${cur_JobsByKeword.Title.getData()?keep_after(" ")}</span>
37 </h2>
38 </#if>
39 <#if cur_JobsByKeword.CTA.getData()?has_content>
40 <a class="button button--arrow button--no-style-teal-dark" href=${portalSearchURL}>${cur_JobsByKeword.CTA.getData()}</a>
41 </#if>
42 </div>
43
44 <#assign resultJobs = jobsResults.getJSONObject("result").getJSONArray("jobs")>
45 <#assign jobsResultsLength = resultJobs.length() />
46 <#assign index = (jobsResultsLength > 3)?then(3, jobsResultsLength) />
47
48 <div class="carousel">
49 <ul class="container-content grid grid-3 grid-gap-16 grid-gap-lg-32 grid-lg-3">
50 <#list 0..index-1 as i>
51 <#if jobsResultsLength != 0>
52 <#if resultJobs.getJSONObject(i).has("nonFilterableCustomFields")>
53 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("JobTitle")>
54 <#assign jobCardTitle = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("JobTitle").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
55 <#assign jobCardTitle = jobCardTitle?replace("\\\\u(....)", "&#x$1;", "r")/>
56 </#if>
57 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("xLocationDescription")>
58 <#assign jobCardLocationDescription = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xLocationDescription").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
59 <#assign jobCardLocationDescription = jobCardLocationDescription?replace("\\\\u(....)", "&#x$1;", "r")/>
60 </#if>
61 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("xSalaryDescription")>
62 <#assign jobCardSalaryDescription = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xSalaryDescription").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
63 <#assign jobCardSalaryDescription = jobCardSalaryDescription?replace("\\\\u(....)", "&#x$1;", "r")/>
64 </#if>
65 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("xLocaleRecordID")>
66 <#assign url = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xLocaleRecordID").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
67 <#assign jobUrl = url?keep_after("//")?keep_after("/") />
68 <#assign jobFriendlyUrl = mobilePortalUrl + "/" + jobUrl + "?jobSource=HaysGCJ" />
69 </#if>
70 </#if>
71 </#if>
72
73 <li class="carousel-slide">
74 <a href="${jobFriendlyUrl}" class="job-card job-card--grid-teal is-active d-block rounded-lg border border-borders py-7 pb-lg-6 pt-lg-5 px-6 d-flex">
75 <h4 class="text-black lh-title fs-500 fs-lg-600 font-weight-bold mb-4">
76 ${jobCardTitle}
77 </h4>
78 <ul class="font-weight-light mb-4 mb-lg-4 fs-400 fs-lg-400">
79 <li class="d-flex mb-3">
80 <svg class="feather-icon mr-3 mr-lg-5">
81 <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path>
82 <circle cx="12" cy="10" r="3"></circle>
83 </svg>
84 <span class="job-card-label font-weight-normal">${jobCardLocationDescription}</span>
85 </li>
86 <li class="d-flex align-items-start">
87 <div class="group-center mr-3 mr-lg-5">
88 <svg class="feather-icon">
89 <circle cx="12" cy="12" r="10"></circle>
90 </svg>
91 <span>
92 <#if langId == "en_AE" || langId == "en_CZ" || langId == "en_PL">
93 <svg class="feather-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="width:13px;height:13px">
94 <path d="M13 5C13 6.10457 10.5376 7 7.5 7C4.46243 7 2 6.10457 2 5M13 5C13 3.89543 10.5376 3 7.5 3C4.46243 3 2 3.89543 2 5M13 5V9.45715C11.7785 9.82398 11 10.3789 11 11M2 5V17C2 18.1046 4.46243 19 7.5 19C8.82963 19 10.0491 18.8284 11 18.5429V11M2 9C2 10.1046 4.46243 11 7.5 11C8.82963 11 10.0491 10.8284 11 10.5429M2 13C2 14.1046 4.46243 15 7.5 15C8.82963 15 10.0491 14.8284 11 14.5429M22 11C22 12.1046 19.5376 13 16.5 13C13.4624 13 11 12.1046 11 11M22 11C22 9.89543 19.5376 9 16.5 9C13.4624 9 11 9.89543 11 11M22 11V19C22 20.1046 19.5376 21 16.5 21C13.4624 21 11 20.1046 11 19V11M22 15C22 16.1046 19.5376 17 16.5 17C13.4624 17 11 16.1046 11 15" stroke="" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
95 </svg>
96 <#else>
97 ${currency.getInstance(themeDisplay.getLocale()).getSymbol(themeDisplay.getLocale())}
98 </#if>
99 </span>
100 </div>
101 <span class="job-card-label font-weight-normal">${jobCardSalaryDescription}</span>
102 </li>
103 </ul>
104
105 <div class="job-card__action">
106 <#if (JobDetailText.getData())??>
107 <button onClick="location.href='${jobFriendlyUrl}'" class="button button--small button--teal-dark button--arrow">
108 ${JobDetailText.getData()}
109 </button>
110 </#if>
111 </div>
112
113 </a>
114 </li>
115 </#list>
116 </ul>
117 </div>
118 </div>
119 <br/>
120 </#if>
121 </#if>
122 </#list>
123</#if>
124</div>
Discover experts' insights, salary guides, and career resources designed to help you grow and succeed in your professional journey.
Never miss a chance to grow your career.
Visit our Career Advice section for expert tips and guidance.
Use our Salary Checker to compare pay and stay competitive.
Isabela was the best recruiter that contacted me during my job search. In addition to being an extremely kind person, her presence made all the difference, and this constant contact was essential in identifying the best opportunities for me.
Sustainability jobs FAQs
There’s a growing number of career paths in sustainability. Many sustainability roles are in their infancy, but new dedicated positions are being created every day by organisations looking to become more sustainable.
Recognised jobs in sustainability include environmental consultants, environmental scientists, energy managers, ecologists, and urban planners.
Browse our live network to find the right sustainability role for you.
Depending on the job specification, you may not need a degree to work in sustainability. It’s entirely possible to attain a role in sustainability through your prior work experience, and many professionals transition to sustainability from other sectors.
However, as many roles seek to draw in specialists – such as those educated in environmental science, engineering, business, and economics – having a bachelor’s degree will open up more opportunities for you. Moreover, a relevant Master’s degree may unlock opportunities for more lucrative career progression.
It’s possible to apply for sustainability roles via an organisation’s website or job board, but competition can be high.
We’re deeply embedded in this emerging industry and can find you the top sustainability roles. We’ll marry your most valuable skills, connect you with unique opportunities, and offer industry insights.
Get in contact with one of our specialist consultants today to find a sustainability role that suits your skills, needs, and ambitions.
Upload your CV and we'll match you with opportunities.
Talk to our expert recruiters about your career path.