Climatebase APIclimatebase.org ↗
Search and retrieve climate job listings from Climatebase.org. Filter by location, remote, experience level, org type, and date. Full job details and employer data.
What is the Climatebase API?
The Climatebase API covers 6 endpoints for searching, filtering, and retrieving job listings from Climatebase.org, the dedicated platform for climate-sector careers. The search_jobs endpoint accepts free-text queries alongside filters for location, employment type, experience level, and organization size, returning paginated results with employer name, job types, and remote preferences. Companion endpoints expose full job details, employer profiles, and related listings.
curl -X GET 'https://api.parse.bot/scraper/bdf0c143-2779-4da9-b1da-d7a96d156156/search_jobs?date=month&page=0&limit=5&employment_type=Full+time+role&experience_level=Mid+Level&organization_size=5000+%2B&organization_type=Company&workplace_preference=In-person' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace climatebase-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Climatebase SDK walkthrough — search climate jobs, drill into details, explore similar roles."""
from parse_apis.climatebase_jobs_api import (
Climatebase, DatePosted, WorkplacePreference, ExperienceLevel, JobNotFound
)
client = Climatebase()
# Search for remote solar jobs — limit caps total items fetched across all pages.
for job in client.jobsummaries.search(q="solar", workplace_preference=WorkplacePreference.REMOTE, limit=5):
print(job.title, "|", job.name_of_employer, "|", job.activation_date)
# Drill into the first result for full details (separate network call).
summary = client.jobsummaries.search(q="engineer", date=DatePosted.WEEK, limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.how_to_apply, detail.employer_name)
# Walk similar jobs offered on the detail page.
for similar in detail.similar_jobs.list(limit=3):
print(similar.title, similar.employer_name)
# Fetch full employer info from the job detail.
employer = detail.get_employer()
print(employer.company_name, employer.website)
# List remote jobs posted today using convenience filter.
for remote_job in client.jobsummaries.list_remote(date=DatePosted.TODAY, limit=3):
print(remote_job.title, remote_job.remote_preferences)
# Typed error handling: catch JobNotFound for an invalid ID.
try:
bad_summary = client.jobsummaries.search(q="nonexistent_xyz_99999", limit=1).first()
if bad_summary:
bad_summary.details()
except JobNotFound as exc:
print(f"Job not found: {exc.job_id}")
print("exercised: search / details / similar_jobs.list / get_employer / list_remote / JobNotFound")
Full-text search over the Climatebase job board. Supports filtering by location, date posted, workplace preference, employment type, experience level, organization size, and organization type. Returns paginated results ordered by relevance. Each result contains summary-level fields (title, employer name, locations as strings, remote preferences); full job details require a separate get_job_detail call.
| Param | Type | Description |
|---|---|---|
| l | string | Location filter. Free-text location name (e.g. 'San Francisco') or 'Remote' to filter for remote jobs |
| q | string | Search query keyword matching job title and description |
| date | string | Date posted filter |
| page | integer | Page number (0-indexed) |
| limit | integer | Results per page (max 1000) |
| employment_type | string | Employment type filter |
| experience_level | string | Experience level filter |
| organization_size | string | Organization size filter |
| organization_type | string | Organization type filter |
| workplace_preference | string | Workplace preference filter |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects with id, title, description, locations, name_of_employer, remote_preferences, job_types, experience_levels, activation_date, sectors, categories, logo",
"pages": "integer total number of pages",
"total": "integer total number of matching jobs",
"current_page": "integer current page index (0-based)"
},
"sample": {
"data": {
"jobs": [
{
"id": 73616240,
"logo": "https://climatebaseuserstorage.s3-us-west-1.amazonaws.com/photos/316a6ad2-fe03-4452-a10f-ed23b5649889-res_group_logo.webp",
"title": "Field Service Technician I - Solar",
"sectors": [
"Energy"
],
"job_types": [
"Full time role"
],
"locations": [
"Kress, TX, US"
],
"categories": [
"Technician",
"Agriculture"
],
"activation_date": "2026-06-10T05:31:53.903Z",
"name_of_employer": "Renewable Energy Systems",
"experience_levels": [
"Early Career"
],
"remote_preferences": [
"In-person"
]
}
],
"pages": 334,
"total": 3827,
"current_page": 0
},
"status": "success"
}
}About the Climatebase API
Search and Filter Climate Jobs
The search_jobs endpoint is the primary entry point. Pass a keyword via q, a location string or 'Remote' via l, and narrow results with employment_type, experience_level, organization_size, or a date filter. Results are paginated (0-indexed via page, up to 1000 per page via limit) and each job summary includes id, title, description, locations, name_of_employer, remote_preferences, and job_types. The total and pages fields let you walk the full result set programmatically.
Full Job Details and Employer Data
get_job_detail takes a numeric job_id (from any search result's id field) and returns the complete listing: an HTML description, salary_from/salary_to bounds, how_to_apply (URL or email), activation_date, and an employer object containing company_name, company_description, logo, website, org_types, org_sizes, climate_solutions, and active_sectors. The similar_jobs array inside the response gives a quick starting point for related listings without a second request.
Focused Convenience Endpoints
get_similar_jobs returns related positions for a given job_id, useful for building recommendation flows. get_company_info_from_job surfaces the employer record independently — including climate_solutions and active_sectors arrays — which is useful when company context matters more than the job itself. list_jobs_by_date_posted accepts a required date value of 'today', 'week', or 'month' alongside optional q and l filters. list_jobs_remote is a dedicated filter that returns only remote-flagged listings and accepts the same optional q and date parameters.
The Climatebase API is a managed, monitored endpoint for climatebase.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when climatebase.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official climatebase.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a climate job alert system that polls
list_jobs_by_date_postedwithdate='today'and emails new listings. - Aggregate remote climate roles using
list_jobs_remotefiltered by keyword for a niche job board. - Extract employer
climate_solutionsandactive_sectorsfields viaget_company_info_from_jobto map which organizations are hiring across specific climate verticals. - Power a job recommendation widget using
get_similar_jobskeyed to a listing a user is currently viewing. - Analyze salary ranges by scraping
salary_from/salary_toacrosssearch_jobsresult pages segmented byexperience_level. - Index full HTML job descriptions from
get_job_detailinto a search engine with richer semantic matching than Climatebase's own filters. - Compile a company directory of climate employers from
employerobjects returned byget_job_detail, deduplicated bycompany_name.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Climatebase have an official developer API?+
What does `get_job_detail` return that `search_jobs` does not?+
search_jobs returns summary fields: id, title, description (truncated), locations, name_of_employer, remote_preferences, and job_types. get_job_detail adds the full HTML description, salary_from/salary_to, how_to_apply, activation_date, the full employer object (including climate_solutions, active_sectors, logo, website, org_types, org_sizes), and a similar_jobs array.What date filter values does `list_jobs_by_date_posted` accept?+
date parameter accepts exactly three values: 'today', 'week', or 'month'. It is a required field for that endpoint. The same date parameter is optional on search_jobs and list_jobs_remote.Does the API expose job applications or candidate profiles?+
How current are the job listings returned by the API?+
activation_date field on each job detail indicates when the listing went live. There is no historical archive endpoint — closed or expired listings are not retrievable once removed from the Climatebase site. You can fork the API on Parse and revise it to snapshot and store active listings over time.