Idealist Search Scraper avatar

Idealist Search Scraper

Pricing

from $2.99 / 1,000 idealist job records

Go to Apify Store
Idealist Search Scraper

Idealist Search Scraper

Scrape job listings from Idealist.org, the leading job board for nonprofit and social impact careers. Extract job titles, organizations, locations, cause areas, and descriptions for social impact recruitment.

Pricing

from $2.99 / 1,000 idealist job records

Rating

0.0

(0)

Developer

Jobs API

Jobs API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

What does Idealist Search Scraper do?

This Apify Actor collects publicly listed nonprofit and social-impact jobs from Idealist.org. It follows a bounded set of official detail pages and emits one enriched dataset record per complete job. It uses ordinary direct access only; it does not access candidate accounts, submit applications, fetch application destinations, or bypass access controls.

Why use Idealist Search Scraper?

Use it to collect a bounded set of public job facts in one dataset, including organization, location, employment details, dates, descriptions, and public application links when Idealist exposes them. Search pages and detail candidates are capped, and browser requests are processed sequentially. The public input has no proxy setting: schema-valid runs use direct access to Idealist pages.

What data can Idealist Search Scraper extract?

The dataset schema describes more than 20 useful fields that may be populated from the public listing, detail page, or embedded JobPosting data. Job facts come from those public surfaces; the table marks normalized and Actor-generated metadata separately. Optional source-dependent fields are omitted when Idealist does not publish them. This field inventory is not a promise that every Idealist posting publishes every value.

FieldTypeMeaning
jobIdstringIdealist identifier, or the canonical job URL when no identifier is available.
resultIndexintegerSearch-candidate order assigned by the Actor.
titlestringPublic job title.
organizationstring or nullOrganization name.
organizationUrlURL or nullPublic Idealist organization page, when present.
organizationLogoURL or nullPublished organization logo URL, when present.
listingTypestringListing category inferred from the official Idealist job URL path.
contractTypestring or nullPublic employment-type label.
employmentTypesstring arrayEmployment-type values retained from public JobPosting data.
experienceLevelstring or nullPublished experience-level text.
educationstring or nullPublished education requirement.
compensationstring or nullPublic salary or compensation text.
listingCompensationstringCompensation text specifically from the listing card.
detailCompensationstringCompensation text specifically from the labeled job detail.
salaryobject, string, or numberPublic salary data retained in the form supplied by JobPosting content.
salaryMinnumberMinimum salary value parsed from published salary data.
salaryMaxnumberMaximum salary value parsed from published salary data.
salaryCurrencystringPublished currency when available.
salaryUnitstringPublished salary period normalized to year, month, or hour.
locationstring, object, or nullPublic location text or structured address.
fullAddressstring or nullReadable address normalized from public location fields.
locationCitystringCity/locality from public location data.
locationRegionstringState, province, or region from public location data.
locationCountrystringCountry from public structured location data.
postalCodestringPostal code from public structured location data.
locationModestring or nullPublic remote, hybrid, or on-site wording when available.
locationSentencestring or nullLocation sentence supplied by the page extractor.
isRemotebooleanDerived only when public location mode explicitly indicates remote or on-site work; omitted when ambiguous (for example, hybrid).
causeAreasstring arrayPublic cause-area labels, when available.
postedDatestring or nullPublic posted date or label.
startDatestringPublished job start date from the detail page or JobPosting data.
publishedDatestring or nullDate portion normalized from the posted-date value.
publishedSincestring or nullRelative posting-age label from the listing card.
closingDatestring or nullPublished application deadline or JobPosting valid-through date.
descriptionstringReadable public job description.
descriptionHtmlstring or nullHTML for the public description section.
descriptionFieldsobjectPublic description headings and labeled facts extracted from the page.
sectionsobjectRelevant public detail-page sections keyed by normalized heading; related-job/footer content is excluded.
benefitsstringVisible benefits text when published.
responsibilitiesstringVisible responsibilities text when published.
qualificationsstringVisible qualifications text when published.
educationRequirementsstringPublished education requirement text.
experienceRequirementsstringPublished experience requirement text.
languageRequirementsstringPublished language requirements or preferences.
programAreasstring arrayProgram/project areas explicitly named in the public description.
scheduleRequirementsstringPublished schedule or evening/weekend requirements.
transportRequirementsstringPublished travel or transportation requirements.
programScopestringVisible program-scope section, when present.
leadershipstringVisible leadership section, when present.
educationExpertisestringVisible education-expertise section, when present.
applicationInstructionsstringVisible How to Apply instructions.
industrystringIndustry from public JobPosting data, when present.
occupationalCategorystringOccupational category from public JobPosting data, when present.
jobCategorystringPublic detail-page or JobPosting category, when present.
workHoursstringPublished work-hours value, when present.
skillsstring arraySkill labels when supplied by the page extractor.
applicationobjectPublic application metadata such as a visible external application link and label.
directApplybooleanIncluded only when Idealist or JobPosting data publishes an explicit boolean.
applyUrlURL or nullPublic application URL when found; the destination is not fetched.
applicationHoststringHostname parsed from the public application URL.
jobUrlURLCanonical public Idealist job-detail page.
listingUrlURLPublic search/listing page from which the card was collected.
sourcestringFixed source label, idealist.org.
searchDataobjectListing-card text and visible labels retained for context.
sourceDataobjectPublic JobPosting data and labeled detail fields retained by the mapper.
scrapedAtdate-timeActor-generated record timestamp.

Most job facts come directly from Idealist's public page content. isRemote and publishedDate are normalized from public values; resultIndex and scrapedAt are Actor metadata. Listing and detail compensation are kept separately when both are published. A location phrase is passed to Idealist, but the Actor does not independently filter geographic results; the site may return a broader or differently ranked result set than a separate browser view. The raw description is kept separately from the structured sections and sourceData fields.

How to scrape Idealist jobs

  1. Open the Actor's Input tab.
  2. Enter a required job query. Optionally set a location phrase, result cap, search-page cap, timeout, or an official Idealist /en/jobs URL override.
  3. Start the run and review the dataset. OUTPUT contains counts, diagnostics, and bounded direct-request receipts; RUN_HEALTH contains the compact run status.

How much will it cost to scrape Idealist?

Apify charges depend on the account plan and the resources used during a run; this Actor does not set a fixed price. Browser navigation, the number of search pages, and opening detail pages affect runtime. Raising maxItems can inspect up to five extra detail candidates beyond the requested record count when a public detail is incomplete. Requests are sequential and have no retries; a transport failure stops further navigation and records DEFERRED.

Inputs

See the Input tab for the complete configuration. query is required; startUrl, when supplied, replaces the search URL generated from query and location.

  • query: required search terms, 1–200 characters, default program manager
  • location: optional location phrase, default United States, at most 200 characters; passed to Idealist when startUrl is omitted, but not independently enforced by the Actor
  • maxItems: maximum enriched records, 1–100, default 3
  • maxDetailPages: maximum official search pages, 1–5, default 2
  • timeoutSecs: navigation timeout, 20–120 seconds, default 60; the handler timeout is derived from this value
  • startUrl: optional HTTPS https://www.idealist.org/en/jobs or https://idealist.org/en/jobs URL override; it replaces the generated search URL

The public schema does not expose proxyConfiguration. Search and detail pages are accessed directly.

Quick search:

{
"query": "program manager",
"location": "United States",
"maxItems": 3,
"maxDetailPages": 2,
"timeoutSecs": 60
}

Search with a public Idealist URL override:

{
"query": "program manager",
"location": "United States",
"startUrl": "https://www.idealist.org/en/jobs?q=program+manager&l=United+States",
"maxItems": 5,
"maxDetailPages": 3,
"timeoutSecs": 60
}

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Each dataset record contains the job ID, title, organization, official job URL, location, contract and compensation fields where available, description, structured sections, application information, source data, and scrape timestamp. Required fields are jobId, title, description, jobUrl, source, and scrapedAt.

Representative abbreviated record emitted by the Actor (description shortened; optional source fields omitted). The run's United States location phrase did not match its India-based result cards, so this example demonstrates the record shape only; location relevance remains unqualified.

{
"jobId": "ffc768cc03b84f5dbe277cb3f921f2ae",
"title": "ET Admin Manager + Secretary",
"organization": "Empower Tamizhagam",
"contractType": "Full Time",
"employmentTypes": ["FULL_TIME"],
"location": {
"@type": "PostalAddress",
"addressLocality": "Chennai",
"addressRegion": "TN",
"addressCountry": "IN"
},
"locationMode": "On-site",
"isRemote": false,
"experienceRequirements": "2-7 years of experience",
"programAreas": ["Small Business & Startups", "Public Policy", "CSR Funding", "Project Mgmt"],
"description": "ONLY CANDIDATES CURRENTLY BASED IN CHENNAI, INDIA ...",
"jobUrl": "https://www.idealist.org/en/nonprofit-job/ffc768cc03b84f5dbe277cb3f921f2ae-et-admin-manager-secretary-empower-tamizhagam-chennai",
"listingUrl": "https://www.idealist.org/en/jobs?q=program+manager&l=United+States",
"source": "idealist.org",
"scrapedAt": "2026-09-23T04:57:28.523Z"
}

The following abbreviated OUTPUT excerpt illustrates the current status contract; it is not a rewrite of the preserved 2026-09-23 run summary, which predates resultStatus:

{
"status": "SUCCEEDED",
"resultStatus": "COMPLETE",
"requestedItems": 3,
"items": 3,
"searchCandidates": 8,
"searchPagesProcessed": 1,
"queuedDetails": 3,
"detailAttempts": 3,
"detailSuccesses": 3,
"detailFailures": 0,
"requestFailures": 0,
"searchesRequested": 1,
"emptySearchesConfirmed": 0,
"blocked": false,
"accessMode": "direct",
"proxyUsed": false,
"diagnostics": []
}

The default key-value store exposes OUTPUT (platform status, separate resultStatus, requested and emitted counts, search/detail counters, accessMode: "direct", proxyUsed: false, bounded diagnostics, and request receipts) and RUN_HEALTH (the same status split plus compact health fields). Platform status is only SUCCEEDED or FAILED; resultStatus is COMPLETE, LIMITED, SKIPPED, DEFERRED, NO_DATA, or FAILED. An access boundary is SKIPPED only when its final response/page is confirmed on the official Idealist origin; requests stop and buffered records are discarded. A denial or challenge after an off-origin redirect is DEFERRED, not attributed to Idealist. Generic transport, ambiguous empty-page, and unverified parse outcomes are SUCCEEDED / DEFERRED when no records were stored. Genuine rows stored before a later error or access boundary remain SUCCEEDED / LIMITED. NO_DATA requires affirmative official empty-result text and zero visible job cards for every requested search, recorded in the search receipts and the searchesRequested / emptySearchesConfirmed counters. A fatal zero-row failure is FAILED / FAILED and uses the Actor failure lifecycle. Diagnostics and request receipts are written only to the key-value store, never as dataset rows.

Tips and advanced options

  • Increase maxDetailPages to inspect more search pages, or increase maxItems to request more enriched records. Both settings increase browser work.
  • maxDetailPages caps search pagination; detail requests are separately bounded by the requested item count plus a small candidate allowance.
  • Use startUrl when you already have a public Idealist search URL. The URL must use HTTPS and the /en/jobs path.
  • The Actor's public input supports direct access only and has no proxy option. Do not change routes, identities, cookies, or browser fingerprints to continue after an access barrier.
  • Records omit optional values that Idealist does not publish. Missing values are not inferred as facts about the job.

FAQ, support, and responsible use

What if the result has no jobs? NO_DATA is used only when every requested search explicitly reports an empty result on the successful official Idealist page. Missing cards, unrecognized empty pages, and incomplete detail parsing are DEFERRED; check the search evidence, counters, and diagnostics in OUTPUT.

What if Idealist displays a CAPTCHA, human check, or access-denial page? The Actor stops requests, discards buffered rows, and records the run as SKIPPED with an access-boundary diagnostic. Do not try another identity, proxy, cookie set, or route to get around it.

What if a request times out or the browser cannot load a page? The Actor stops further requests and records DEFERRED with a request receipt; it does not retry or switch routes/browsers.

Where can I report an issue? Use the Actor's Issues tab and include the run ID and a short description of the behavior. The API tab provides programmatic access to the Actor and its stored output.

This Actor is not affiliated with Idealist. Collect only public job information. Respect Idealist.org terms, robots directives, rate limits, and applicable law. Do not collect candidate data, access authenticated pages, solve CAPTCHAs, or bypass paywalls and access controls. Public job pages can still contain personal information; use a lawful basis and consult qualified counsel if unsure.

Local run

For a local run from PowerShell, start in the repository root and use a new actor-relative storage directory. The command below checks that the path does not already exist, uses --resurrect, and avoids purging or reusing a prior dataset:

Set-Location .\idealist-jobs-search-scraper
$storagePath = 'storage-idealist-local-run'
if (Test-Path -LiteralPath $storagePath) {
throw "Choose a new storage path; $storagePath already exists."
}
$env:APIFY_LOCAL_STORAGE_DIR = $storagePath
try {
apify run --resurrect --input-file .actor/input.json
} finally {
Remove-Item Env:APIFY_LOCAL_STORAGE_DIR -ErrorAction SilentlyContinue
}