Advanced work experience search
Filter people by the roles in their history — employer, title, function, specialty, and seniority — each condition matched against the same role.
Work experience search filters people on the roles they have held, not just their current title. It answers questions like "who was in Sales at Salesforce and is now in Engineering?" or "senior nurses at Mayo Clinic", with every condition matched against the same role.
There are two ways in:
jobsis the flexible, per-role path. Each entry describes one role (employer, title, function or specialty, seniority, or a combination) and carries its own tenure. It replaces the deprecatedpastJobsandcurrentJobs.- Top-level
jobCategoriesandseniorityare coarse filters scoped byjobStatus. Use them for a quick "any role in Marketing"; reach forjobswhen you need to pin an employer or a specific tenure.
The jobs filter
Each entry takes:
| Field | Matches |
|---|---|
company | One employer: a LinkedIn org ID, URL, slug, or domain |
jobTitle | The role's raw title, with the same match modes as the top-level title filter |
jobCategories | The role's function and/or specialty |
seniority | The role's seniority level |
status | The role's tenure. Required: current, past, or any |
Combine entries with allOf (every entry must match), anyOf (any), or
noneOf (exclude). Each entry needs at least one of the matching fields above,
plus its status.
{
"jobs": {
"allOf": [
{ "jobCategories": { "anyOf": [{ "type": "function", "value": "Sales" }] }, "status": "current" },
{ "jobCategories": { "anyOf": [{ "type": "function", "value": "Engineering" }] }, "status": "past" }
]
}
}That finds people who are in Sales now and were previously in Engineering.
Functions and specialties
Job categories come from a two-level tree:
- Function is one of 26 broad areas, plus
Other: Accounting, Administrative, Arts and Design, Business Development, Community and Social Services, Consulting, Education, Engineering, Entrepreneurship, Finance, Healthcare Services, Human Resources, Information Technology, Legal, Marketing, Media and Communication, Military and Protective Services, Operations, Product Management, Program and Project Management, Purchasing, Quality Assurance, Real Estate, Research, Sales, Customer Success and Support, and Other. - Specialty is a finer area inside exactly one function. Because every
specialty has a single parent function, naming the specialty implies the
function. Examples:
Software EngineeringandData & ML Engineeringunder Information Technology;Account ExecutiveandSales Developmentunder Sales;NursingandPhysicians & Advanced Practiceunder Healthcare Services.
An entry is tagged with its level:
{ "jobCategories": { "anyOf": [{ "type": "specialty", "value": "Sales Development" }] } }When you are unsure, pick the specialty first and let the function follow.
Each function has a General … specialty for titles that name the area but no
sub-area, and Other is the last resort for titles that are not a job. Values
are validated: an unknown function or specialty returns 400.
GET /v1/enums/job-categories returns the whole tree — every function with
its specialties nested underneath — plus the seniority values, for free. Fetch
it once and validate user input against it so a typo becomes a suggestion
instead of a silent zero-result search.
Seniority
Six levels, matching LinkedIn's taxonomy: Internship, Entry level,
Associate, Mid-Senior level, Director, and Executive.
Seniority comes from the qualifier in the title (Intern, Junior, Associate, Senior, Lead, Staff, Principal, Manager, Director, VP, Head, Chief, Founder), not from the domain word. Two cases are worth knowing:
- "Manager" is a job, not a level by itself. A bare "Product Manager" is
Mid-Senior level; only Director, VP, or Head-of titles reachDirectororExecutive. - "Owner" has two senses. A product or feature owner is an individual
contributor, ranked by its qualifier; a business owner (owner, proprietor)
is
Executive.
Experience industries
experienceIndustry filters people by the industries of the companies
they have worked at — current employer, past employers, or both. It uses the
same standard categories as company search (Healthcare, Finance,
Software), so the value lists you already use there apply here too.
{
"experienceIndustry": { "anyOf": ["Healthcare"] },
"jobStatus": { "status": "ever-employed" }
}jobStatus does the scoping, exactly as for the other work-experience
filters: omitted (or currently-employed) means the current employer,
previously-employed means past employers, ever-employed means either.
noneOf excludes industries the same way.
This is a different filter from the person's own industry
(industryV2): that matches the single industry written on someone's
profile; experienceIndustry matches any employer in their history. "A nurse
who has worked at hospitals" is experienceIndustry; "a person whose profile
says Healthcare" is industryV2. The full comparison is in
industry filtering.
What each role returns
A profile's experiences[] carries, per role:
| Field | What it tells you |
|---|---|
title | The raw title as it appears on the profile |
cleaned_title | The title cleaned up: taglines and company noise removed, abbreviations expanded, typos fixed, non-English translated. For example, "Marketing Team | UGC CREATOR" becomes "UGC Creator", and "Gerente de ventas minoristas" becomes "Retail Sales Manager" |
job_function | The function from the older list. Still returned; prefer job_function_v2 |
job_function_v2 | The function from the two-level tree |
job_specialty | The specialty within that function |
industry | The employer's industry for that role |
company_org_id | The employer's LinkedIn org ID. Reuse it to query the company |
company_linkedin_ids | Other LinkedIn company IDs the employer is known by |
is_current | Whether the role is current |
start_date / end_date | The role's tenure |
start_date_precision / end_date_precision | How exact each date is: "year" (LinkedIn showed only "2023") or "month" (LinkedIn showed "June 2023"). Check this before formatting — a "year" date is always the first of January |
jobTitle filters match the raw title; cleaned_title is the normalized
form returned for display.
Coverage
Functions, specialties, and seniority are populated on a growing share of profiles, and more often on current roles than past ones. A category or seniority filter therefore returns fewer people than the population it describes. Combine it with a company or title filter when you need maximum recall.
Related
- Job title matching: title match modes and combinations
- Industry filtering: person industry vs employer industries
- Search & discovery: the filters this builds on
- Reference lists: the other filter value sets