Skip to main content
5 credits per employee returned
You must have limit × 5 credits in your balance to run this function. Default limit is 100 (requires 500 credits). If you set limit to 200, you need 1,000 credits available.

When to Use

Use this endpoint to retrieve employees for ONE specific company from LinkedIn/Coresignal data. The company constraint is automatically applied based on the identifier you provide. This endpoint is for:
  • Getting LinkedIn-enriched employee profiles from a company
  • Filtering employees by department, seniority, location, skills, etc.
  • Finding current employees vs. all employees (past and present)
NOT for:

Method

services.company.getEmployeesFromLinkedin(params);

Input

Company Identifiers (at least one required)

ParameterTypeDescription
given_company_idnumberCoreSignal company ID (most efficient).
linkedinCompanyUrlstringLinkedIn company URL (e.g., "https://www.linkedin.com/company/acme-corp").

Optional Parameters

ParameterTypeDescription
filtersCleanEmployeeFilterSpecPowerful filtering (see FilterSpec API below).
options.limitnumberMax employees to return (default: 100, max: 500). Always start with limit=1 for new queries
options.afterstringPagination cursor from previous response

The FilterSpec API

FilterSpec provides a simple, declarative way to filter employees. The system automatically handles nested Elasticsearch paths.

Filter Types

Filter TypeDescriptionUse For
textAnyMatch ANY of the text terms (fuzzy/partial)Free-text fields like headlines, descriptions, skills
textAllMatch ALL text terms (fuzzy/partial)When all keywords must appear
termsAnyExact match ANY valueEnum fields (department, management_level, location_country)
termsAllExact match ALL valuesMulti-value requirements
rangeNumeric bounds (gte/lte)connections_count, experience duration
existsField must be presentEnsure data quality
notExistsField must be missing/nullCurrent employees (experience.date_to missing)

Critical: Filtering for Current Employees

The most common use case is filtering for current employees only. In Coresignal data, an employee is current if their experience.date_to field is null/missing (no end date).
// ✅ CORRECT: Current employees only
const currentEmployees = await services.company.getEmployeesFromLinkedin({
  linkedinCompanyUrl: "https://www.linkedin.com/company/acme-corp",
  filters: {
    notExists: [{ field: "experience.date_to" }],
  },
  options: { limit: 50 },
});
Without this filter, results may include former employees.

Location Filtering

⚠️ Important: Use location_country, NOT location_regions

The location_regions field is unreliable and should NOT be used. Instead:
  1. For US employees (most common): Use location_country with exact value "United States"
  2. For specific cities/states: Use textAny on location_raw_address
// ✅ CORRECT: Filter for United States employees
const usEmployees = await services.company.getEmployeesFromLinkedin({
  given_company_id: 12345,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [{ field: "location_country", values: ["United States"] }],
  },
  options: { limit: 100 },
});

// ✅ CORRECT: Filter for specific location using address text
const nyEmployees = await services.company.getEmployeesFromLinkedin({
  given_company_id: 12345,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    textAny: [{ field: "location_raw_address", terms: ["New York"] }],
  },
  options: { limit: 100 },
});

// ❌ WRONG: Do NOT use location_regions - it is unreliable
// termsAny: [{ field: "location_regions", values: ["Northern America"] }]

When you only have a company website, ALWAYS create a separate column to get the LinkedIn company URL first, then use that URL for employee lookups.

Multi-Column Pattern

Column A: Company Website (input)
Column B: LinkedIn Company URL (resolve first)
Column C: Employees (use LinkedIn URL from Column B)
// Column B: Get LinkedIn Company URL from website
const linkedinUrl = await services.company.linkedin.findUrl({
  website: row.companyWebsite,
});

return linkedinUrl;
// Column C: Get employees using the LinkedIn URL from Column B
const employees = await services.company.getEmployeesFromLinkedin({
  linkedinCompanyUrl: row.linkedinCompanyUrl, // from Column B
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [{ field: "department", values: ["Sales"] }],
  },
  options: { limit: 50 },
});

return employees;

When Company ID is Available (Most Efficient)

If you have the Coresignal company ID, use it for fastest lookups:
const employees = await services.company.getEmployeesFromLinkedin({
  given_company_id: row.coresignalCompanyId,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [{ field: "department", values: ["Engineering and Technical"] }],
  },
  options: { limit: 50 },
});

FilterSpec Examples

Example 1: Current Employees Only

const employees = await services.company.getEmployeesFromLinkedin({
  linkedinCompanyUrl: row.linkedinCompanyUrl,
  filters: {
    notExists: [{ field: "experience.date_to" }],
  },
  options: { limit: 100 },
});

Example 2: Current Employees in Engineering

const engineers = await services.company.getEmployeesFromLinkedin({
  linkedinCompanyUrl: row.linkedinCompanyUrl,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [{ field: "department", values: ["Engineering and Technical"] }],
  },
  options: { limit: 50 },
});

Example 3: Current Senior Leadership

const leadership = await services.company.getEmployeesFromLinkedin({
  given_company_id: row.coresignalCompanyId,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [
      {
        field: "management_level",
        values: [
          "C-Level",
          "Founder",
          "President/Vice President",
          "Director",
          "Head",
        ],
      },
    ],
  },
  options: { limit: 50 },
});

Example 4: Current Sales Team in the United States

const salesTeam = await services.company.getEmployeesFromLinkedin({
  linkedinCompanyUrl: row.linkedinCompanyUrl,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [
      { field: "department", values: ["Sales"] },
      { field: "location_country", values: ["United States"] },
    ],
  },
  options: { limit: 100 },
});

Example 5: Employees with Specific Skills

The skills field is a text array — use textAny for partial matching:
const pythonDevs = await services.company.getEmployeesFromLinkedin({
  given_company_id: row.coresignalCompanyId,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    textAny: [{ field: "skills", terms: ["python", "django", "flask"] }],
  },
  options: { limit: 50 },
});

Example 6: Decision Makers with High Connections in US

const decisionMakers = await services.company.getEmployeesFromLinkedin({
  linkedinCompanyUrl: row.linkedinCompanyUrl,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [
      { field: "is_decision_maker", values: [1] },
      { field: "location_country", values: ["United States"] },
    ],
    range: [{ field: "connections_count", gte: 200 }],
  },
  options: { limit: 50 },
});
connections_count is capped at 500 in Coresignal. Values above 500 won’t filter correctly.

Example 7: C-Suite & Founders Only

const executives = await services.company.getEmployeesFromLinkedin({
  given_company_id: row.coresignalCompanyId,
  filters: {
    notExists: [{ field: "experience.date_to" }],
    termsAny: [
      { field: "management_level", values: ["C-Level", "Founder"] },
      { field: "department", values: ["C-Suite"] },
    ],
  },
  options: { limit: 20 },
});

Valid Enum Values

Departments

C-Suite, Finance & Accounting, Human Resources, Legal, Administrative,
Engineering and Technical, Sales, Customer Service, Product, Project Management,
Marketing, Design, Operations, Research, Trades, Consulting, Medical,
Real Estate, Education, Other

Management Levels

C-Level, Founder, President/Vice President, Partner, Director, Head,
Manager, Senior, Specialist, Intern, Owner

Location Countries (common values for location_country)

United States, United Kingdom, Canada, Germany, France, Australia,
India, Netherlands, Singapore, Ireland, Spain, Italy, Sweden, Brazil,
Japan, China, South Korea, Israel, Switzerland, etc.
For US filtering, always use exact value "United States" (not “USA” or “US”).

Filterable Fields Reference

Top-Level Fields (keyword/exact match with termsAny)

FieldTypeNotes
departmentkeywordUse enum values
management_levelkeywordUse enum values
location_countrykeywordExact country name (e.g., “United States”)
is_decision_makerbyte0 or 1
is_workingbyte0 or 1

Top-Level Fields (text search with textAny/textAll)

FieldTypeNotes
headlinetextLinkedIn headline
generated_headlinetextAI-generated headline
job_titletextCurrent job title
job_descriptiontextJob description
descriptiontextProfile summary/about
skillstextSkills array (searchable as text)
location_raw_addresstextFull location string (city, state, etc.)

Top-Level Fields (numeric range with range)

FieldTypeNotes
connections_countintCapped at 500
follower_countlongLinkedIn followers
recommendations_countintNumber of recommendations
total_experience_duration_monthslongTotal career duration in months

Nested Experience Fields (use experience. prefix)

FieldTypeNotes
experience.date_todateUse notExists for current
experience.date_fromdateJob start date
experience.company_idlongCompany CoreSignal ID
experience.departmenttextDepartment at that job
experience.management_leveltextSeniority at that job
experience.titletextJob title at that role
experience.descriptiontextRole description
experience.company_nametextEmployer name
experience.company_industrytextCompany’s industry
experience.company_typekeywordCompany type enum
experience.duration_monthslongDuration at that role

Output Schema (CleanCoresignalEmployee)

Each employee returned has the following structure. Here’s a condensed real example:
{
  "id": 614123053,
  "full_name": "Kishan Sripada",
  "name_first": "Kishan",
  "name_last": "Sripada",
  "websites_linkedin": "https://www.linkedin.com/in/kishansripada",
  "picture_url": "https://media.licdn.com/dms/image/...",
  "headline": "Co-Founder at Orange Slice (YC S25)",
  "generated_headline": "Co-Founder at Orange Slice (YC S25)",
  "job_title": "Co-Founder, CTO",
  "department": "C-Suite",
  "management_level": "Founder",
  "company_id": 98418001,
  "is_decision_maker": 1,
  "is_working": 1,
  "location_country": "United States",
  "location_city": "Birmingham",
  "location_state": "Michigan",
  "location_raw_address": "Birmingham, Michigan, United States",
  "connections_count": 500,
  "follower_count": 2068,
  "skills": ["software", "engineering", "software engineering"],
  "total_experience_duration_months": 38,
  "experience": [
    {
      "title": "Co-Founder, CTO",
      "date_from": "2025-06-01",
      "date_to": null,
      "company_id": 98418001,
      "company_name": "Orange Slice",
      "department": "C-Suite",
      "management_level": "Founder",
      "location": "San Francisco Bay Area",
      "company_industry": "Technology, Information and Internet",
      "company_type": "Privately Held",
      "company_size_range": "1-10 employees",
      "company_website": "https://www.orangeslice.ai"
    }
  ],
  "education": [
    {
      "title": "University of Michigan",
      "major": "Bachelor of Science in Information - BS, User Experience Design (UX)",
      "date_from": 2021,
      "date_to": 2025,
      "institution_url": "https://www.linkedin.com/school/university-of-michigan"
    }
  ]
}

Core Identity

FieldTypeDescription
idnumberCoreSignal employee ID
full_namestringFull name
name_firststringFirst name
name_laststringLast name
name_middlestringMiddle name (often null)
websites_linkedinstringLinkedIn profile URL
picture_urlstringProfile picture URL
shorthand_namesstring[]LinkedIn URL slugs (e.g., ["kishansripada"])

Current Position

FieldTypeDescription
headlinestringLinkedIn headline
generated_headlinestringAI-generated headline
job_titlestringCurrent job title
job_descriptionstringCurrent job description
departmentstringCurrent department (enum value)
management_levelstringSeniority level (enum value)
company_idnumberCurrent employer’s CoreSignal ID
is_decision_maker0 | 1Decision maker flag
is_working0 | 1Currently employed flag

Location

FieldTypeDescription
location_countrystringCountry (e.g., "United States")
location_citystringCity (e.g., "Birmingham")
location_statestringState/Province (e.g., "Michigan")
location_raw_addressstringFull address (e.g., "Birmingham, Michigan, United States")
location_country_iso_2stringISO 2-letter code (e.g., "US")
location_country_iso_3stringISO 3-letter code (e.g., "USA")

Network & Skills

FieldTypeDescription
connections_countnumberLinkedIn connections (capped at 500)
follower_countnumberLinkedIn followers
skillsstring[]Skills as simple string array (e.g., ["python", "react"])

Experience History

FieldTypeDescription
experienceExperienceItem[]Array of work history entries
total_experience_durationstringHuman-readable (e.g., "3 years 2 months")
total_experience_duration_monthsnumberTotal career duration in months

Performance Tips

  1. Use given_company_id when available — it’s the fastest identifier (skips resolution step)
  2. Use linkedinCompanyUrl if you have it — faster than resolving from website
  3. Resolve LinkedIn URL first when only website is available — use services.company.linkedin.findUrl in a separate column
  4. Use notExists: [{ field: "experience.date_to" }] to filter out former employees
  5. Use location_country for country filtering (not location_regions)
  6. Combine filters to reduce result set size

Error Handling

  • Returns empty array if no employees match filters
  • Invalid FilterSpec values throw validation errors
  • Throws NonRetriableError if LinkedIn URL or company ID doesn’t exist in Coresignal