Lead generation · Developer tools
ORCID Researcher Profiles Scraper
Search ORCID's public 20M+ researcher registry with real Lucene field queries (name, institution, email) and export flat, Pydantic-validated profile rows with optional per-researcher employment history enrichment — no API key.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
ORCID is the researcher-identity registry behind most of scholarly publishing — every ORCID iD carries a public profile with names, affiliations, and (optionally) employment history. The registry's own search API exposes a full Lucene query syntax, but no public tool surfaces it, and the pagination ceiling ORCID enforces for unauthenticated callers is easy to walk straight past without noticing. This Actor builds correct Lucene queries from plain fields, paginates honestly against ORCID's own limits, and — on request — fetches each researcher's employment history so a recruiting or research-ops list lands in one flat, ready-to-use dataset.
What we handle for you
- Builds correct ORCID Lucene queries from plain fields — no field-name guessing, no malformed clause syntax.
- Paginates
expanded-searchhonestly against ORCID's own documentedrows/startceilings, re-checkingnum-foundevery page instead of trusting a stale first read. - Retries transient
429/5xxresponses with backoff, and never retries a documented400— it surfaces ORCID's own error message instead.
Use cases
- Build a recruiting longlist of researchers at a target institution or department.
- Track a competitor lab's or department's current and former staff.
- Enrich a CRM or outreach list with verified ORCID iDs and public affiliation history.
- Compile an institutional or funder report of researchers matching a name/affiliation query.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
givenNames | string | no | Researcher's given (first) name(s). Builds a `given-names:` Lucene clause. |
familyNames | string | no | Researcher's family (last) name(s). Builds a `family-name:` Lucene clause. |
creditName | string | no | Published/credit name, if different from given+family name. Builds a `credit-name:` Lucene clause. |
affiliationOrgName | string | no | Any affiliation (past or present) organization name, e.g. MIT. Builds an `affiliation-org-name:` Lucene clause. |
currentInstitution | string | no | Current employer/institution name only. Builds a `current-institution-affiliation-name:` Lucene clause. |
email | string | no | Public email address on file. Builds an `email:` Lucene clause. |
freeText | string | no | Unprefixed broad-match search term, combined with any structured fields above. |
rawQuery | string | no | Advanced: a raw ORCID Lucene query string, e.g. family-name:Smith AND affiliation-org-name:MIT. When set, this overrides every other field above. |
maxResults | integer | no | Stop after this many researcher profiles. ORCID's unauthenticated API caps effective reach at index ~11 000. |
enrichEmployment | boolean | no | Fetch each researcher's `/employments` record (one extra HTTP call per row) to fill current institution/role and full employment history. Increases run time; billed at the same per-row price. |
{
"affiliationOrgName": "MIT",
"maxResults": 20,
"enrichEmployment": false,
"proxyConfiguration": {
"useApifyProxy": true
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
orcid_idgiven_namesfamily_namescredit_nameemailinstitutionscurrent_institutioncurrent_roleemployment_history
{
"orcid_id": "0000-0002-4392-0814",
"given_names": "Donald",
"family_names": "Smith",
"credit_name": null,
"email": null,
"institutions": [
"Guilford College",
"MIT",
"The University of Chicago"
],
"current_institution": "Guilford College",
"current_role": "Professor",
"employment_history": [
{
"organization_name": "Guilford College",
"city": "Greensboro",
"region": "NC",
"country": "US",
"role_title": "Professor",
"department_name": "Physics",
"start_date": "2005-08-01",
"end_date": null,
"is_current": true
}
]
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0030 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- Only public ORCID data is fetched — no OAuth-scoped or
/read-limitedfields are requested or inferred. - Unauthenticated ORCID reach is capped at
start<=10 000— a very broad query (e.g. a common surname with no other filter) may not reach every match.maxResultsis capped at 11 000 for the same reason. enrichEmploymentadds one HTTP call per row and increases run time; a researcher with no employment data on file simply returns empty enrichment fields, not an error.
FAQ
Do I need an API key?
/employments APIs are free and keyless.Why does a broad query sometimes return fewer rows than expected?
Can I write my own advanced query?
rawQuery to a raw ORCID Lucene query string (e.g. family-name:Smith AND affiliation-org-name:MIT) and it overrides every structured field.Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors