Search
The search commands run LinkedIn searches for people, companies, posts, and jobs — all as POST-body requests. Every search command supports --all for paginated NDJSON streaming and rejects --preview. All are account-scoped and require --account.
Changed in 0.15.0: the per-command
--urlnamed flag is removed fromsearch people|companies|posts|jobs. Running a pasted LinkedIn search URL directly is now the baresearch <url>form.
search <url>
Runs a pasted LinkedIn search, saved-search re-run, or lead-list URL directly — the CLI resolves which search it is and dispatches it for you.
# Run a pasted search URL directly (POST, paginated)
curviate search "<linkedin-search-url>" [--limit <n>] [--cursor <token>] [--all] [--max-pages <n>] --account <account_id>Named flags and the filter escape hatch
Each search command ships a set of curated named flags for the most common filters. For the full filter surface (35+ fields per command), pass the entire filter body as JSON via the escape hatch:
# Inline JSON
curviate search people --filters '{"network_distance":[1,2]}' --account acc_YOUR_ACCOUNT_ID
# From a file
curviate search people --filters-file filters.json --account acc_YOUR_ACCOUNT_ID
# From stdin
echo '{"network_distance":[1]}' | curviate search people --filters - --account acc_YOUR_ACCOUNT_IDNamed flags merge OVER the --filters base body, so you can mix both styles. For the complete filter field reference, see the API reference.
search people
# Search LinkedIn members (POST, paginated)
curviate search people \
[--keywords <k>] \
[--title <job-title-keyword>] \
[--industry <ids>] \
[--location <ids>] \
[--company <ids>] \
[--past-company <ids>] \
[--school <ids>] \
[--network-distance <1,2,3>] \
[--connections-of <member_id>] \
[--followers-of <member_id>] \
[--profile-language <codes>] \
[--filters '<json>'] \
[--filters-file <path>] \
[--limit <n>] [--cursor <token>] [--all] [--max-pages <n>] \
--account <account_id>Multi-value flags (--industry, --location, --company, --past-company, --school, --network-distance, --profile-language) accept comma-separated values. --title is a free-text job-title keyword filter (advanced_keywords.title). --connections-of / --followers-of take member id(s) — resolve one with curviate search parameters --type CONNECTIONS|PEOPLE --keywords "<name>". Use curviate search parameters to resolve human-readable terms to opaque IDs.
search companies
# Search LinkedIn companies (POST, paginated)
curviate search companies \
[--keywords <k>] \
[--industry <ids>] \
[--location <ids>] \
[--network-distance <1,2,3>] \
[--has-job-offers] \
[--headcount <ranges>] \
[--filters '<json>'] \
[--filters-file <path>] \
[--limit <n>] [--cursor <token>] [--all] [--max-pages <n>] \
--account <account_id>--headcount is comma-separated ranges: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ (10001+ not yet supported by the platform).
search posts
# Search LinkedIn posts (POST, paginated)
curviate search posts \
[--keywords <k>] \
[--sort-by <relevance|date>] \
[--date-posted <past-day|past-week|past-month>] \
[--content-type <videos|images|live_videos|collaborative_articles|documents>] \
[--posted-by-member <ids>] \
[--posted-by-company <ids>] \
[--posted-by-me] \
[--mentioning-member <ids>] \
[--mentioning-company <ids>] \
[--author-industry <ids>] \
[--author-company <ids>] \
[--author-keywords <k>] \
[--filters '<json>'] \
[--filters-file <path>] \
[--limit <n>] [--cursor <token>] [--all] [--max-pages <n>] \
--account <account_id>--posted-by-member, --posted-by-company, and --posted-by-me all merge into the same posted_by filter; --mentioning-member / --mentioning-company merge into mentioning; --author-industry / --author-company / --author-keywords merge into author. Resolve member/company/industry ids with search parameters --type PEOPLE|COMPANY|INDUSTRY.
search jobs
# Search LinkedIn jobs (POST, paginated)
curviate search jobs \
[--keywords <k>] \
[--location <id>] \
[--location-within-area <miles>] \
[--industry <ids>] \
[--seniority <executive|director|mid_senior|associate|entry|intern>] \
[--function <ids>] \
[--job-type <full_time|part_time|contract|temporary|volunteer|internship|other>] \
[--company <ids>] \
[--sort-by <relevance|recent>] \
[--date-posted <max-age-days>] \
[--title <ids>] \
[--presence <on_site|hybrid|remote>] \
[--benefits <ids>] \
[--commitments <ids>] \
[--has-verifications] \
[--under-10-applicants] \
[--in-your-network] \
[--fair-chance-employer] \
[--filters '<json>'] \
[--filters-file <path>] \
[--limit <n>] [--cursor <token>] [--all] [--max-pages <n>] \
--account <account_id>--location takes a single geo region id (resolve via search parameters --type LOCATION) and maps to the region filter; --location-within-area is a radius in miles and requires --location. --date-posted here is a maximum job age in days (a number, e.g. 7), unlike search posts --date-posted which is an enum window. --title is ID-based (resolve via search parameters --type JOB_TITLE) — unlike search people --title, which is free text. --seniority and --job-type are closed enums passed directly, not resolved through search parameters.
search parameters
Resolves human-readable terms (company names, locations, industries) to the opaque IDs the search commands expect. Not paginated — --all is not accepted.
# Resolve filter IDs by type and keyword (GET, not paginated)
curviate search parameters --type <TYPE> --keywords <k> [--limit <n>] --account <account_id>--type is one of LOCATION, PEOPLE, CONNECTIONS, COMPANY, SCHOOL, INDUSTRY, SERVICE, JOB_FUNCTION, JOB_TITLE, EMPLOYMENT_TYPE, SKILL. Both --type and --keywords are required for every type, including EMPLOYMENT_TYPE.
search groups
Keyword search for LinkedIn groups — the simplest search, keyword-only with no filter-id resolution step. A no-match search is an empty list, not an error.
# Keyword search for groups (paginated read)
# <keywords> is a positional — quote multi-word terms, e.g. "gtm engineering".
curviate search groups <keywords> [--limit <n>] [--cursor <token>] [--all] [--max-pages <n>] --account <account_id>search services
Searches the LinkedIn Services vertical (people who offer services), filtered by category, location, connection degree, and language. At least one of --keywords, --service-category, or --location is required.
# Search the Services vertical (POST, paginated)
# --service-category and --location take opaque ids from `search service-parameters`.
# --connections is a comma-separated degree filter: 1=1st, 2=2nd, 3=3rd+.
curviate search services \
[--keywords <k>] \
[--service-category <ids>] \
[--location <ids>] \
[--connections <1,2,3>] \
[--language <codes>] \
[--filters '<json>'] \
[--filters-file <path>] \
[--limit <n>] [--cursor <token>] [--all] [--max-pages <n>] \
--account <account_id>--service-category and --location accept comma-separated or repeated ids (resolve them with search service-parameters). --language takes ISO 639-1 codes (e.g. en,de). The --filters / --filters-file escape hatch works the same as the other search commands — named flags merge over it.
search service-parameters
Resolves a typed term into service-filter option ids for search services — the "Add a service category / Add a location" typeahead. Not paginated (--all is not accepted).
# Resolve a service-filter term to option ids (GET, not paginated)
# --type is service_category (default) or location; --keywords is required.
curviate search service-parameters --keywords <k> [--type service_category|location] --account <account_id>Examples
Find people by keyword and location
# Get the location ID first
curviate search parameters --type LOCATION --keywords "Berlin" --account acc_YOUR_ACCOUNT_ID
# Search people using that ID
curviate search people --keywords "AI engineer" --location 106967730 --account acc_YOUR_ACCOUNT_IDRun a pasted search URL directly
curviate search "https://www.linkedin.com/search/results/people/?keywords=ai%20engineer" --account acc_YOUR_ACCOUNT_IDStream all results as NDJSON
curviate search people \
--keywords "machine learning" \
--location 90009551 \
--network-distance 2 \
--all \
--account acc_YOUR_ACCOUNT_IDSearch companies with the filter escape hatch
curviate search companies \
--filters '{"follower_count_range":{"min":500,"max":5000}}' \
--location 106967730 \
--account acc_YOUR_ACCOUNT_IDFind recent AI posts from your network
curviate search posts \
--keywords "large language models" \
--sort-by date \
--date-posted past-week \
--account acc_YOUR_ACCOUNT_IDSearch jobs posted in the last week, remote only
curviate search jobs \
--keywords "prompt engineer" \
--location 90009551 \
--job-type full_time \
--presence remote \
--date-posted 7 \
--all \
--account acc_YOUR_ACCOUNT_IDFind groups by keyword
curviate search groups "gtm engineering" --account acc_YOUR_ACCOUNT_IDSearch the Services vertical
# Resolve a service category first, then search
curviate search service-parameters --type service_category --keywords "marketing" --account acc_YOUR_ACCOUNT_ID
curviate search services --service-category 100 --location 106967730 --connections 1,2 --account acc_YOUR_ACCOUNT_ID