Idealist APIidealist.org ↗
Search and retrieve nonprofit jobs, internships, volunteer opportunities, and organizations from Idealist.org. 9 endpoints with filters for location, job type, and cause area.
What is the Idealist API?
The Idealist.org API covers 9 endpoints for searching and retrieving nonprofit jobs, volunteer opportunities, internships, and organizations from Idealist.org. search_jobs returns paginated job listings with fields like salaryMinimum, salaryMaximum, jobType, and locationType, while get_organization_listings pulls all active listings — jobs, internships, events, and volunteer opportunities — for a single organization in one call.
curl -X GET 'https://api.parse.bot/scraper/a6b511c9-8fb7-4db9-98f1-0e4aca5926e4/search_volunteer_opportunities?q=education&page=0&radius=500000&location=40.7128%2C-74.0060&cause_areas=EDUCATION&location_type=ONSITE' \ -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 idealist-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.
from parse_apis.Idealist_org_API import Idealist, LocationType, JobType, OrgType, ListingNotFound
idealist = Idealist()
# Search for remote volunteer opportunities about education
for volop in idealist.volunteer_opportunities.search(q="education", location_type=LocationType.REMOTE, limit=5):
print(volop.name, volop.org_name, volop.location_type)
# Search for full-time nonprofit jobs near NYC
for job in idealist.jobs.search(q="program manager", job_type=JobType.FULL_TIME, limit=3):
print(job.name, job.salary_minimum, job.city)
# Search organizations and drill into details + listings
org_summary = idealist.organization_summaries.search(q="education", org_type=OrgType.NONPROFIT, limit=1).first()
if org_summary:
org = org_summary.details()
print(org.name, org.job_count, org.volop_count, org.hiring)
listing = org.listings()
print(listing.organization_name, len(listing.jobs))
# Search for internships
for internship in idealist.internships.search(q="marketing", location_type=LocationType.ONSITE, limit=3):
print(internship.name, internship.org_name, internship.payment)
# Typed error handling
try:
org_summary_bad = idealist.organization_summaries.search(q="nonexistent_xyz_org_12345", org_type=OrgType.NONPROFIT, limit=1).first()
if org_summary_bad:
org_summary_bad.details()
except ListingNotFound as exc:
print(f"Listing not found: {exc}")
print("exercised: volunteer_opportunities.search / jobs.search / organization_summaries.search / .details / .listings / internships.search")
Full-text search over Idealist's volunteer opportunity index. Supports keyword queries, geographic filtering via lat/lng + radius, cause area filtering, and location type filtering. Returns paginated results (20 per page, up to 50 pages). Each hit contains summary fields (name, orgName, city, locationType, objectID) suitable for display or drill-down via get_volunteer_opportunity_detail.
| Param | Type | Description |
|---|---|---|
| q | string | Search query keyword |
| page | integer | Page number (0-indexed) |
| radius | integer | Search radius in meters from location |
| location | string | Latitude,longitude for geo search (e.g. '40.7128,-74.0060') |
| cause_areas | string | Comma-separated cause areas to filter by. Accepted values include: EDUCATION, HEALTH_MEDICINE, ENVIRONMENT, CHILDREN_YOUTH, ARTS_MUSIC, COMMUNITY_DEVELOPMENT, ANIMALS, HOUSING_HOMELESSNESS, HUMAN_RIGHTS_CIVIL_LIBERTIES, CLIMATE_CHANGE, VOLUNTEERING, SCIENCE_TECHNOLOGY |
| location_type | string | Location type filter: ONSITE, REMOTE, HYBRID |
{
"type": "object",
"fields": {
"hits": "array of volunteer opportunity objects with name, orgName, city, locationType, objectID, description, areasOfFocus, url",
"page": "integer, current page number",
"nbHits": "integer, total number of matching results",
"nbPages": "integer, total number of pages available",
"hitsPerPage": "integer, number of results per page"
},
"sample": {
"data": {
"hits": [
{
"city": null,
"name": "Education Coordinator Internship",
"type": "VOLOP",
"orgName": "YIDDISH ARTS AND ACADEMICS OF N AMERICA INC",
"objectID": "6231d1c3d62a48e5ab486a3196afb0a2",
"areasOfFocus": [
"ARTS_MUSIC",
"EDUCATION",
"SCIENCE_TECHNOLOGY"
],
"locationType": "REMOTE"
}
],
"page": 0,
"nbHits": 41158,
"nbPages": 50,
"hitsPerPage": 20
},
"status": "success"
}
}About the Idealist API
Search Endpoints
Four search endpoints — search_jobs, search_volunteer_opportunities, search_internships, and search_organizations — share a consistent pagination model. Each returns hits, page, nbHits, and nbPages. All support a keyword query via q and geographic filtering via location (a latitude,longitude string) combined with a radius in meters. search_jobs adds a job_type filter accepting FULL_TIME, PART_TIME, TEMPORARY, or CONTRACT. search_volunteer_opportunities accepts a cause_areas parameter for filtering by comma-separated values like EDUCATION or HEALTH_MEDICINE. search_organizations accepts an org_type filter covering NONPROFIT, SOCIAL_ENTERPRISE, and B_CORP.
Detail Endpoints
get_job_detail, get_volunteer_opportunity_detail, get_internship_detail, and get_organization_detail each accept an id (the objectID from the corresponding search results) and return a full data object. Job details include listingName, type, org, description, salary fields, and application info. Internship details include payment and benefits fields alongside standard description and application data. Note that get_job_detail may return listings that are no longer published if the ID was previously valid — callers should check listing status in the response before surfacing results.
Organization Listings
get_organization_listings is the only endpoint that aggregates across listing types. Pass an org_id and receive separate arrays for jobs, internships, volunteer_opportunities, and events, alongside organization_id and organization_name. This is useful for building an organization profile page without making four separate search queries filtered by org. get_organization_detail separately returns areasOfFocus, mission, address, and listing counts under jobs, volops, and interns.
Pagination and Identifiers
All search endpoints use 0-indexed pagination via the page parameter. Object IDs returned in objectID from any search result are the same IDs accepted by the corresponding detail endpoint. IDs are not interchangeable across types — a volunteer opportunity objectID cannot be passed to get_job_detail.
The Idealist API is a managed, monitored endpoint for idealist.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when idealist.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 idealist.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?+
- Aggregate nonprofit job boards filtered by location and job type using
search_jobswithlocation,radius, andjob_typeparameters - Build cause-specific volunteer opportunity finders using
cause_areasfilters likeEDUCATIONorHEALTH_MEDICINE - Pull all active listings for a given nonprofit in one call with
get_organization_listingsto populate organization profile pages - Surface remote internship listings for social impact platforms using
search_internshipswithlocation_type=REMOTE - Enrich nonprofit directory data by combining
search_organizationsresults withget_organization_detailfor mission statements and areas of focus - Build salary transparency tools for the nonprofit sector using
salaryMinimumandsalaryMaximumfields fromsearch_jobsresults - Filter volunteer opportunities by proximity for local community apps using
locationandradiusgeo parameters
| 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 Idealist.org have an official public developer API?+
What does `get_organization_listings` return compared to `get_organization_detail`?+
get_organization_listings returns arrays of active listings — jobs, internships, volunteer_opportunities, and events — associated with a given org_id. get_organization_detail returns the organization's profile fields: name, description, mission, address, areasOfFocus, and aggregate listing counts (jobs, volops, interns). The two endpoints complement each other; neither is a superset of the other.Can `get_job_detail` return listings that are no longer active?+
Does the API cover Idealist event listings as standalone searchable entities?+
events array returned by get_organization_listings — there is no dedicated search_events endpoint or get_event_detail endpoint. You can fork this API on Parse and revise it to add those endpoints.Can search results be filtered by cause area for jobs and internships, not just volunteer opportunities?+
search_volunteer_opportunities exposes a cause_areas filter. search_jobs and search_internships support keyword, location, and type filters but not cause area filtering. You can fork this API on Parse and revise it to add cause area parameters to the job and internship search endpoints if that filtering is available from the source.