Devex Jobs Scraper — NGO & International Development Jobs avatar

Devex Jobs Scraper — NGO & International Development Jobs

Pricing

from $3.00 / 1,000 job results

Go to Apify Store
Devex Jobs Scraper — NGO & International Development Jobs

Devex Jobs Scraper — NGO & International Development Jobs

Scrape international-development, NGO, humanitarian and UN jobs from Devex.com — donor-funded programmes, consultancies, INGO and multilateral roles. An AI step (bring your own Anthropic or Mistral key) returns clean records: title, organisation, location, salary, deadline, URL.

Pricing

from $3.00 / 1,000 job results

Rating

0.0

(0)

Developer

Nomad Dev

Nomad Dev

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

11 days ago

Last modified

Categories

Share

Devex Jobs Scraper — Complete Source Descriptions

Discover public Devex job postings through Camoufox and Apify Residential and return only records with the exact canonical source-page narrative. The listing page supplies candidate URLs; no model, search engine, or API key is used for discovery or extraction.

The Actor reads unauthenticated public pages. It does not use a Devex login, paywall access, CAPTCHA bypass, or an authenticated Devex session.

Complete-description contract

A discovery record is emitted only when all of these checks pass:

  • description is exact live [data-partial="job-description"] innerText under one of two source-owned proofs: when a recognized top-level metadata child exists, it is the exact prefix ending immediately before that rendered label; when none exists, it is the entire selector-node innerText.
  • A recognized metadata child that cannot be located as a rendered line rejects the page. It never falls back to selector-node-end.
  • The section contains at least 500 characters and begins Job Description.
  • descriptionContractVersion is devex-complete-source-v3.
  • descriptionSourceUrl normalizes to the same canonical URL as url.
  • descriptionComplete is exactly true.
  • descriptionBoundaryFound is exactly true and the proof fields agree: top-level-source-metadata uses a recognized label plus descriptionMetadataChildFound=true and descriptionMetadataLabelLineFound=true; selector-node-end uses the stable END_OF_SELECTOR_NODE label with both booleans false. A selector-end body containing a standalone recognized metadata label is independently rejected by the caller even if its evidence fields claim otherwise.
  • descriptionTail exactly matches the final 80 source characters.
  • descriptionHash is the SHA-256 of the exact description string.
  • The description is not the listing-card snippet, does not end in an isolated dangling word fragment, and has no ellipsis, truncated, read more, or equivalent clipping marker at its end.
  • HTTP status/redirect, challenge title/body, Career Account paywall, or a missing source selector rejects the detail page.

FindJobs independently repeats these checks before mapping a record into a job. A failed contract becomes a source error, not a healthy empty result.

Input

{
"keyword": "migration policy",
"location": "remote",
"maxItems": 3,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

maxItems is capped at 3. Keyword and location are conservative filters over visible source listing-card text. The Actor harvests more than three candidate URLs so a blocked/paywalled detail does not starve later public records, then stops after three complete jobs. Supplying jobUrls switches to alive-check; only exact numeric-id detail URLs are accepted, while query and subpath URLs are rejected before navigation.

Alive status is independent of description completeness. An explicit visible Devex closed/expired message yields false even if an apply-looking control is also present. An independently visible enabled apply control yields true. When neither signal exists, isActive is null rather than guessed from page existence.

Output

{
"source": "devex",
"id": "1234567",
"title": "Policy Analyst",
"company": "Example Organization",
"location": "Remote",
"url": "https://www.devex.com/jobs/policy-analyst-1234567",
"description": "Complete canonical position narrative ending cleanly...",
"descriptionContractVersion": "devex-complete-source-v3",
"descriptionSourceUrl": "https://www.devex.com/jobs/policy-analyst-1234567",
"descriptionComplete": true,
"descriptionBoundaryFound": true,
"descriptionBoundaryLabel": "Seniority Level",
"descriptionBoundaryType": "top-level-source-metadata",
"descriptionMetadataChildFound": true,
"descriptionMetadataLabelLineFound": true,
"descriptionTail": "exact final 80 source characters of the complete body",
"descriptionHash": "sha256:...",
"snippet": "Visible source listing-card text",
"postedAt": null,
"deadline": null
}

Unknown dates, salary, contract type, workplace, and employer website remain null; they are never inferred from prose or location.

Diagnostics and charging

Unavailable Residential access exits before the Actor-start charge. Listing or detail transport failures emit a warning row with warning and docs. Job records are charged only after they pass the complete-description contract and are pushed. Callers must treat warning-only datasets as source failures rather than empty inventory.

Transport diagnostics are bounded and non-sensitive: they record whether an HTTP response existed, its status, the canonical/raw final-URL class, safe Devex host/path/query flags, and proxy scheme/hostname/port/username class plus password presence. Proxy passwords, session identifiers, and query contents are never logged or emitted.

No deployment, live canary, billing verification, or Store publication is implied by this repository version.