Sc Scrupp

LinkedIn API

Fetch LinkedIn data in bulk: profiles, jobs, posts, and search results. Most endpoints return data immediately (no async task).

Bulk api_key (legacy) limit_per_input
LinkedIn
v1 Stable
api_key in query is supported for legacy integrations. For new integrations, prefer Authorization: Bearer <token> when available on your account.
Auth
Legacy: api_key in query string. Prefer Bearer auth when enabled on your account.
Batching
Use limit_per_input to control how many results are returned per input item (when supported by the endpoint).
Input format
Most endpoints accept {"items": [...]}. Some accept [{ "url": "..." }] (see Posts).

Use cases

Common automations to pull LinkedIn data and push it into your outbound stack.

Automation
Make
Scheduled enrichment: profiles/jobs/posts β†’ Sheets/Airtable/CRM.
Flow
  1. 1) Scheduler
  2. 2) HTTP (POST) to a LinkedIn endpoint
  3. 3) Parse JSON
  4. 4) Map fields β†’ destination
Zapier
Trigger-based enrichment: new lead β†’ fetch profile/post β†’ append data to CRM.
Flow
  1. 1) Trigger (form/CRM row)
  2. 2) Webhooks by Zapier (POST)
  3. 3) Formatter / Code step (optional)
  4. 4) Create/Update in destination
Clay
Bulk enrichment inside Clay tables: profile URLs β†’ structured rows.
Flow
  1. 1) Import URLs into Clay
  2. 2) Add API enrichment step
  3. 3) Map response β†’ columns
  4. 4) Push to sequences/export
Group

Actions

Run LinkedIn actions via API: send invites, messages, and engage with posts. Use responsibly to avoid account restrictions.

rate limits apply requires active session
v1 Operational
Actions require a valid LinkedIn session (usually via the Chrome extension). Keep volumes low and add delays between requests.
POST
LinkedIn Action
/api/v1/linkedin/action
One endpoint, multiple action types. Choose action by type.
Actions
Request
Part Field Type Notes
Query api_key string Required (legacy)
Body type string invite | message | like | comment
Body payload object Depends on type
Response
{
  "ok": true,
  "type": "invite",
  "result": { "...": "..." }
}
Exact fields depend on LinkedIn response and availability.
Safety defaults
Recommended automation limits:
  • Invites: 10–30/day
  • Messages: 20–60/day (depending on account)
  • Likes/Comments: keep natural, add delays
  • Always add sleep 10–60s between actions
POST
Invite
type: invite
Up
Send a connection invite to a profile.
Body example
{
  "type": "invite",
  "payload": {
    "profile_url": "https://www.linkedin.com/in/username/",
    "message": "Hey! Quick question about your role at {company} β€” can I connect?"
  }
}
Notes
Keep invite notes short. If no message needed, omit message.
POST
Message
type: message
Up
Send a message to an existing connection (or thread, if supported by your setup).
Body example
{
  "type": "message",
  "payload": {
    "profile_url": "https://www.linkedin.com/in/username/",
    "text": "Hey {first_name} β€” saw your post about {topic}. Quick question: are you open to…"
  }
}
Notes
If messaging by thread is supported in your implementation, you can also accept a thread_id.
POST
Like
type: like
Up
Like a LinkedIn post by URL.
Body example
{
  "type": "like",
  "payload": {
    "post_url": "https://www.linkedin.com/posts/..."
  }
}
Notes
Keep engagement natural. Combine with comment only occasionally.
POST
Comment
type: comment
Up
Comment on a LinkedIn post by URL.
Body example
{
  "type": "comment",
  "payload": {
    "post_url": "https://www.linkedin.com/posts/...",
    "text": "This is solid β€” especially the point about {insight}. Curious: how do you measure {metric}?"
  }
}
Notes
Avoid repetitive templates. Short, contextual comments perform best.
Group

Profiles

Get structured profile data by LinkedIn profile URL or by name.

POST
Get Profile by LinkedIn URL
/linkedin/profile supports limit_per_input
Profiles
Request
Part Field Type Notes
Query api_key string Required (legacy)
Query limit_per_input number Default: 10
Body items string[] LinkedIn profile URLs
Body example
{
  "items": [
    "https://www.linkedin.com/in/satya-nadella",
    "https://www.linkedin.com/in/williamhgates"
  ]
}
Response (example)
[
  {
    "input": { "url": "https://www.linkedin.com/in/sundarpichai" },
    "id": "sundarpichai",
    "name": "Sundar Pichai",
    "city": "Mountain View, California, United States",
    "country_code": "US",
    "position": "CEO at Google",
    "about": "..."
  }
]
Response fields may vary depending on profile availability.
POST
Find Profile by Name
/linkedin/profile/name supports limit_per_input
Profiles
Request
Part Field Type Notes
Query api_key string Required (legacy)
Query limit_per_input number Default: 10
Body items object[] first_name + last_name
Body example
{
  "items": [
    { "first_name": "Satya", "last_name": "Nadella" },
    { "first_name": "Bill", "last_name": "Gates" }
  ]
}
Response
[
  {
    "input": { "first_name": "Satya", "last_name": "Nadella" },
    "results": [
      { "url": "https://www.linkedin.com/in/...", "name": "...", "title": "..." }
    ]
  }
]
Names can be ambiguous. Prefer URLs for accuracy.
Group

Jobs

Fetch job data by job URLs, search keywords, or search URLs.

POST
Get Jobs by URL
/linkedin/job
Body example
{
  "items": [
    "https://www.linkedin.com/jobs/view/4085995998",
    "https://www.linkedin.com/jobs/view/4096097717"
  ]
}
Notes
Returns structured job details for each URL.
POST
Search Jobs
/linkedin/job/keyword supports limit_per_input
Body example
{
  "items": [
    {
      "location": "New York",
      "keyword": "software engineer",
      "country": "US",
      "time_range": "Past month",
      "company": "Microsoft"
    }
  ]
}
Notes
Use limit_per_input to control how many jobs are returned per query object.
POST
Get Jobs by Search URL
/linkedin/job/url supports limit_per_input
Body example
{
  "items": [
    "https://www.linkedin.com/jobs/search?keywords=Software&location=New%20York",
    "https://www.linkedin.com/jobs/microsoft-jobs-worldwide?f_C=1035"
  ]
}
Notes
Provide LinkedIn job search URLs as input.
Group

Posts

Fetch post details and content from post URLs, authors, profiles, or companies.

POST
Get Posts
/linkedin/post
Body example
[
  { "url": "https://www.linkedin.com/posts/..." },
  { "url": "https://www.linkedin.com/posts/..." }
]
This endpoint expects an array of objects (not {"items": [...] }).
Notes
Returns structured post data (text, media, metadata) when available.
POST
Get Author's Articles
/linkedin/post/author supports limit_per_input
Body example
{
  "items": [
    "https://www.linkedin.com/today/author/satyanadella",
    "https://www.linkedin.com/today/author/billgates"
  ]
}
Notes
Useful for monitoring thought leaders and saving content for outreach context.
POST
Get Profile Posts
/linkedin/post/profile supports limit_per_input
Body example
{
  "items": [
    {
      "url": "https://www.linkedin.com/in/satyanadella",
      "start_date": "2024-01-01T00:00:00.000Z",
      "end_date": "2024-12-31T00:00:00.000Z"
    }
  ]
}
Notes
Use date ranges to limit output and speed up processing.
POST
Get Company Posts
/linkedin/post/company supports limit_per_input
Body example
{
  "items": [
    "https://www.linkedin.com/company/microsoft",
    "https://www.linkedin.com/company/apple"
  ]
}
Notes
Great for tracking hiring signals, announcements, and product updates.
POST
Get Post Likers
/list/search/create
Extract profiles from a LinkedIn post engagement list (likers), with optional enrichment fields.
Body example
{
  "url": "https://www.linkedin.com/posts/.../",
  "with_emails": true,
  "max": 100,
  "page": 1
}
Notes
Use page for pagination and max to limit results.