Docs / Search

search_linkedin_recruiter_people

Search candidates in Recruiter on your own seat, with each Recruiter filter as its own typed input.

This action only reads. It changes nothing, so it is safe to try.

What you give it

InputWhat it isWhere to get it
keywords
optional
Text. Words to search for. AND, OR and NOT may be used, e.g. developers AND product owners NOT managers.You write it.
locale
optional
One of: arabic, bangla, czech, danish, german, greek, english, spanish, persian, finnish, french, hindi, hungarian, indonesian, italian, hebrew, japanese, korean, marathi, malay, dutch, norwegian, punjabi, polish, portuguese, romanian, russian, swedish, telugu, thai, tagalog, turkish, ukrainian, vietnamese, chinese_simplified, chinese_traditional. The language your Recruiter is set to, when results look inconsistent.You write it.
savedSearch
optional
A search filter id. Run one of your saved searches; it replaces every other filter.
What goes inside
  • id (needed): text. An id from lookup_search_ids type SAVED_SEARCHES, service RECRUITER.
  • projectId (needed): text. The project that saved search belongs to, from lookup_search_ids type SAVED_SEARCHES, service RECRUITER.
  • newestResultsOnly (optional): true or false.
id: run lookup_search_ids with type SAVED_SEARCHES, and use matches[].id from its answer.projectId: run lookup_search_ids with type SAVED_SEARCHES, and use matches[].id from its answer.
savedFilter
optional
A search filter id. One of your saved filters: an id from lookup_search_ids type SAVED_FILTERS, service RECRUITER.run lookup_search_ids with type SAVED_FILTERS, and use matches[].id from its answer.
location
optional
A search filter id. Places. DOESNT_HAVE cannot be combined with locationWithinArea.
What goes inside
  • id (needed): text. An id from lookup_search_ids type LOCATION, service RECRUITER.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
  • scope (optional): one of: CURRENT, OPEN_TO_RELOCATE_ONLY, CURRENT_OR_OPEN_TO_RELOCATE.
  • title (optional): text. The title that came with the id in lookup_search_ids.
id: run lookup_search_ids with type LOCATION, and use matches[].id from its answer.
locationWithinArea
optional
A number. Miles around the location.You write it.
industry
optional
A search filter id. Industries to include and to leave out.
What goes inside
  • include (optional): a list (text). Ids from lookup_search_ids type INDUSTRY, service RECRUITER.
  • exclude (optional): a list (text). Ids from lookup_search_ids type INDUSTRY, service RECRUITER.
include: run lookup_search_ids with type INDUSTRY, and use matches[].id from its answer.exclude: run lookup_search_ids with type INDUSTRY, and use matches[].id from its answer.
role
optional
A search filter id. Job titles: each one by id or by keywords.
What goes inside
  • id (needed): text. An id from lookup_search_ids type JOB_TITLE, service RECRUITER.
  • isSelection (needed): true or false. true: only people with exactly this title. false: also similar titles.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
  • scope (optional): one of: CURRENT_OR_PAST, CURRENT, PAST, PAST_NOT_CURRENT, OPEN_TO_WORK.
  • keywords (needed): text.
id: run lookup_search_ids with type JOB_TITLE, and use matches[].id from its answer.
skills
optional
A search filter id. Skills: each one by id or by keywords.
What goes inside
  • id (needed): text. An id from lookup_search_ids type SKILL, service RECRUITER.
  • title (optional): text.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
  • keywords (needed): text.
id: run lookup_search_ids with type SKILL, and use matches[].id from its answer.
company
optional
A search filter id. Companies: each one by id or by keywords.
What goes inside
  • id (needed): text. An id from lookup_search_ids type COMPANY, service RECRUITER.
  • name (optional): text.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
  • scope (optional): one of: CURRENT_OR_PAST, CURRENT, PAST, PAST_NOT_CURRENT.
  • keywords (needed): text.
id: run lookup_search_ids with type COMPANY, and use matches[].id from its answer.
companyHeadcount
optional
A list (a group of fields). Company sizes, as LinkedIn's own bands, e.g. { min: 51, max: 200 }.
What goes inside
  • min (optional): one of: 1, 11, 51, 201, 501, 1001, 5001, 10001.
  • max (optional): one of: 1, 10, 50, 200, 500, 1000, 5000, 10000.
You write it.
currentCompany
optional
A search filter id. Current companies.
What goes inside
  • id (needed): text. An id from lookup_search_ids type COMPANY, service RECRUITER.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
id: run lookup_search_ids with type COMPANY, and use matches[].id from its answer.
pastCompany
optional
A search filter id. Past companies.
What goes inside
  • id (needed): text. An id from lookup_search_ids type COMPANY, service RECRUITER.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
id: run lookup_search_ids with type COMPANY, and use matches[].id from its answer.
school
optional
A search filter id. Schools.
What goes inside
  • id (needed): text. An id from lookup_search_ids type SCHOOL, service RECRUITER.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
id: run lookup_search_ids with type SCHOOL, and use matches[].id from its answer.
degree
optional
A search filter id. Degrees to include and to leave out.
What goes inside
  • include (optional): a list (text). Ids from lookup_search_ids type DEGREE, service RECRUITER.
  • exclude (optional): a list (text). Ids from lookup_search_ids type DEGREE, service RECRUITER.
include: run lookup_search_ids with type DEGREE, and use matches[].id from its answer.exclude: run lookup_search_ids with type DEGREE, and use matches[].id from its answer.
employmentType
optional
A list (one of: FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP). Employment types. Recruiter PRO contracts only.You write it.
groups
optional
A search filter id. LinkedIn groups: ids from lookup_search_ids type GROUPS, service RECRUITER.run lookup_search_ids with type GROUPS, and use matches[].id from its answer.
graduationYear
optional
A group of fields. Graduation years, from and to.
What goes inside
  • min (optional): a number, 1000 to 9999.
  • max (optional): a number, 1000 to 9999.
You write it.
tenure
optional
A group of fields. Years of experience, from and to.
What goes inside
  • min (optional): a number.
  • max (optional): a number.
You write it.
tenureInCompany
optional
A group of fields. Years in the current company, from and to.
What goes inside
  • min (optional): a number.
  • max (optional): a number.
You write it.
tenureInPosition
optional
A group of fields. Years in the current position, from and to.
What goes inside
  • min (optional): a number.
  • max (optional): a number.
You write it.
seniority
optional
A group of fields. Seniority levels to include and to leave out.
What goes inside
  • include (optional): a list (one of: owner, partner, cxo, vp, director, manager, senior, entry, training, unpaid).
  • exclude (optional): a list (one of: owner, partner, cxo, vp, director, manager, senior, entry, training, unpaid).
You write it.
function
optional
A search filter id. Job functions: ids from lookup_search_ids type DEPARTMENT, service RECRUITER.run lookup_search_ids with type DEPARTMENT, and use matches[].id from its answer.
networkDistance
optional
A list (one of: 1, 2, 3, or exactly: GROUP). Connection degrees from you (1, 2, 3) or "GROUP" for people in your groups.You write it.
spokenLanguages
optional
A list (a group of fields). Spoken languages and how well. Recruiter PRO contracts only.
What goes inside
  • language (needed): text.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
  • scope (optional): one of: ELEMENTARY, LIMITED_WORKING, PROFESSIONAL_WORKING, FULL_PROFESSIONAL, NATIVE_OR_BILINGUAL.
You write it.
hidePreviouslyViewed
optional
A group of fields. Leave out people you viewed within this many days.
What goes inside
  • timespan (needed): a number. Days back.
You write it.
profileLanguage
optional
A list (text, up to 2 characters). Profile languages, as two-letter codes such as "en".You write it.
recentlyJoined
optional
A list (a group of fields). Joined LinkedIn this many days ago, as LinkedIn's own bands.
What goes inside
  • min (optional): one of: 2, 8, 15, 31.
  • max (optional): one of: 1, 7, 14, 30, 90.
You write it.
spotlights
optional
A list (one of: OPEN_TO_WORK, ACTIVE_TALENT, REDISCOVERED_CANDIDATES, INTERNAL_CANDIDATES, INTERESTED_IN_YOUR_COMPANY, HAVE_COMPANY_CONNECTIONS). Spotlights. Advanced Recruiter subscriptions only.You write it.
firstName
optional
A list (text). First names.You write it.
lastName
optional
A list (text). Last names.You write it.
hasMilitaryBackground
optional
True or false. Only people with a US military background.You write it.
pastApplicants
optional
True or false. Only past applicants.You write it.
hiringProjects
optional
A search filter id. Your hiring projects to include and to leave out.
What goes inside
  • include (optional): a list (text). Ids from lookup_search_ids type HIRING_PROJECTS, service RECRUITER.
  • exclude (optional): a list (text). Ids from lookup_search_ids type HIRING_PROJECTS, service RECRUITER.
include: run lookup_search_ids with type HIRING_PROJECTS, and use matches[].id from its answer.exclude: run lookup_search_ids with type HIRING_PROJECTS, and use matches[].id from its answer.
recruitingActivity
optional
A list (a group of fields). People with, or without, this kind of activity from your team.
What goes inside
  • id (needed): one of: messages, tags, notes, projects, resumes, reviews.
  • priority (optional): one of: CAN_HAVE, MUST_HAVE, DOESNT_HAVE.
  • timespan (optional): a number. Days back.
You write it.
notes
optional
A list (text). Words in your team's notes on the person.You write it.
limit
optional
A number, 1 to 100. How many to return (1–100, default 10).You write it.
cursor
optional
A cursor. nextCursor from the previous call, to get the next page. Keep the other arguments the same.The nextCursor from the last answer of search_linkedin_recruiter_people.
connectionId
optional
A connection id. Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one.Run list_linkedin_accounts and use accounts[].id from its answer.
15 more places to get it

Call it

curl -X POST https://api.heyreagent.com/v1/actions/search_linkedin_recruiter_people \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"keywords":"software engineer"}'
The same call in JavaScript
const response = await fetch("https://api.heyreagent.com/v1/actions/search_linkedin_recruiter_people", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_KEY",
    "content-type": "application/json",
  },
  body: JSON.stringify({
    "keywords": "software engineer"
  }),
});
const answer = await response.json();
console.log(answer);
The same call in Python
import requests

response = requests.post(
    "https://api.heyreagent.com/v1/actions/search_linkedin_recruiter_people",
    headers={"Authorization": "Bearer YOUR_KEY"},
    json={
        "keywords": "software engineer",
    },
)
print(response.json())
The same call in n8n

Add an HTTP Request node and fill it in like this:

MethodPOST
URLhttps://api.heyreagent.com/v1/actions/search_linkedin_recruiter_people
Send HeadersOn. Name Authorization, Value Bearer YOUR_KEY
Send BodyOn. Body Content Type JSON, Specify Body Using JSON, then paste the body below
{
  "keywords": "software engineer"
}

Put your own key where it says YOUR_KEY. New here? Start with your first call.

What you get back

When it worked, the answer is { "ok": true, "result": { … } }. Inside result:

returnednumber
nextCursorA cursor. Other actions take it.
results[].typePEOPLE
results[].idA Recruiter id. Other actions take it.
results[].publicIdentifierstring or null
results[].publicProfileUrlstring or null
results[].profileUrlstring or null
results[].profilePictureUrlstring or null
results[].profilePictureUrlLargestring or null
results[].memberUrnstring or null
results[].namestring or null
results[].firstNamestring
results[].lastNamestring
results[].networkDistanceSELF | DISTANCE_1 | DISTANCE_2 | DISTANCE_3 | OUT_OF_NETWORK
results[].locationstring or null
results[].industrystring or null
results[].keywordsMatchstring
results[].headlinestring
results[].connectionsCountnumber
results[].followersCountnumber
results[].pendingInvitationboolean
results[].canSendInmailboolean
results[].hiddenCandidateboolean
results[].interestLikelihoodstring
results[].recruiterCandidateIdstring
results[].recruiterPipelineCategorystring
results[].premiumboolean
results[].verifiedboolean
results[].sharedConnectionsCountnumber
results[].recentPostsCountnumber
results[].recentlyHiredboolean
results[].mentionedInTheNewsboolean
results[].interestsstring

A field that does not apply to an answer is left out, or is null. There are 82 more fields nested inside these.

An example answer

A sample from the documentation of the API underneath, put in the shape this action returns it. Lists are cut to their first entry.

{
  "returned": 1,
  "nextCursor": "eyJhY2NvdW50X2lkIjoiOXE3bDFVZExUZGkwcEFod2xPUEVNdyIsImxpbWl0IjozLCJzdGFydCI6MywicGFyYW1zIjp7ImFwaSI6InJlY3J1aXRlciIsImNhdGVnb3J5IjoicGVvcGxlIiwibmV0d29ya19kaXN0YW5jZSI6WzEsMiwzLCJHUk9VUCJdLCJpbmR1c3RyeSI6eyJpbmNsdWRlIjpbIjQiXX0sInJvbGUiOlt7ImtleXdvcmRzIjoiZGV2ZWxvcGVyIE9SIGVuZ2luZWVyIiwicHJpb3JpdHkiOiJNVVNUX0hBVkUiLCJzY29wZSI6IkNVUlJFTlRfT1JfUEFTVCJ9XSwic2tpbGxzIjpbeyJpZCI6IjI2MSIsInByaW9yaXR5IjoiRE9FU05UX0hBVkUifSx7ImlkIjoiNTA1MTciLCJwcmlvcml0eSI6Ik1VU1RfSEFWRSJ9XX19",
  "total": 4433432,
  "results": [
    {
      "type": "PEOPLE",
      "id": "AEMAAAQMevMBKmy0KNdlNZA1bV_xR06DjBJ47bY",
      "headline": "Software Engineer at LinkedIn",
      "location": "New York, New York, United States",
      "memberUrn": null,
      "networkDistance": "OUT_OF_NETWORK",
      "canSendInmail": true,
      "recruiterCandidateId": "67926771",
      "name": null,
      "publicIdentifier": null,
      "publicProfileUrl": null,
      "profileUrl": null,
      "profilePictureUrl": null,
      "industry": null,
      "currentPositions": [
        {
          "company": "LinkedIn",
          "companyId": "1337",
          "description": "Sponsored Content",
          "location": null,
          "role": "Software Engineer",
          "start": {
            "month": 4,
            "year": 2019
          }
        }
      ]
    }
  ]
}

When it did not work, the answer is { "ok": false, "error": "…", "message": "…" }. What each error means.

Good to know

In Claude or ChatGPT

Once connected, ask in your own words. The assistant sees this action as a tool with the same name, search_linkedin_recruiter_people, and the same inputs.