Skip to content
Talk to an Engineer Dashboard

HarvestAPI

Connect to HarvestAPI to scrape LinkedIn profiles, companies, and job listings, and search for people and jobs using LinkedIn data. Enables AI agents to access real-time LinkedIn data for recruiting, sales prospecting, and market research. Pay-as-you-go credit model.

Connect to HarvestAPI to scrape LinkedIn profiles, companies, and job listings, and search for people and jobs using LinkedIn data. Enables AI agents to access real-time LinkedIn data for recruiting, sales prospecting, and market research. Pay-as-you-go credit model.

HarvestAPI logo

Supports authentication: API Key

Register your HarvestAPI key with Scalekit so it can authenticate LinkedIn data requests on your behalf. You’ll need an API key from your HarvestAPI dashboard.

  1. Generate an API key

    • Sign in to your HarvestAPI dashboard.

    • Click Create API key, give it a descriptive name (e.g., My Agent), and click Create.

    • Copy the generated API key. It is shown only once — store it securely before navigating away.

  2. Create a connection in Scalekit

    In Scalekit dashboard, go to Agent AuthCreate Connection. Find HarvestAPI and click Create.

  3. Add a connected account

    Open the connection you just created and click the Connected Accounts tab → Add account. Fill in the required fields:

    • Your User’s ID — a unique identifier for the user in your system
    • API Key — the key you copied in step 1

    Click Save.

Once a connected account is set up, call LinkedIn data tools on behalf of any user — Scalekit injects the stored API key into every request automatically.

You can interact with Harvest API in two ways — via direct proxy API calls or via Scalekit optimized tool calls. Scroll down to see the list of available Scalekit tools.

Proxy API Calls

import { ScalekitClient } from '@scalekit-sdk/node';
import 'dotenv/config';
const connectionName = 'harvestapi'; // connection name from Scalekit dashboard
const identifier = 'user_123'; // must match the identifier used when adding the connected account
// Get credentials from app.scalekit.com → Developers → API Credentials
const scalekit = new ScalekitClient(
process.env.SCALEKIT_ENV_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;
// Scrape a LinkedIn profile by URL
const profile = await actions.request({
connectionName,
identifier,
path: '/linkedin/profile',
method: 'GET',
queryParams: { url: 'https://www.linkedin.com/in/satyanadella' },
});
console.log(profile.data);
// Search LinkedIn for people by title and location
const people = await actions.request({
connectionName,
identifier,
path: '/linkedin/lead-search',
method: 'GET',
queryParams: { title: 'VP of Engineering', location: 'San Francisco, CA' },
});
console.log(people.data);
// Scrape a LinkedIn company page
const company = await actions.request({
connectionName,
identifier,
path: '/linkedin/company',
method: 'GET',
queryParams: { url: 'https://www.linkedin.com/company/openai' },
});
console.log(company.data);
// Search LinkedIn job listings by keyword and location
const jobs = await actions.request({
connectionName,
identifier,
path: '/linkedin/job-search',
method: 'GET',
queryParams: { keywords: 'machine learning engineer', location: 'New York, NY' },
});
console.log(jobs.data);
// Scrape a single job listing by URL
const job = await actions.request({
connectionName,
identifier,
path: '/linkedin/job',
method: 'GET',
queryParams: { url: 'https://www.linkedin.com/jobs/view/1234567890' },
});
console.log(job.data);
// Bulk scrape multiple LinkedIn profiles in one request
const bulk = await actions.request({
connectionName,
identifier,
path: '/v2/acts/harvestapi~linkedin-profile-scraper/run-sync-get-dataset-items',
method: 'POST',
body: {
urls: [
'https://www.linkedin.com/in/satyanadella',
'https://www.linkedin.com/in/jeffweiner08',
'https://www.linkedin.com/in/reidhoffman',
],
},
});
console.log(bulk.data);

Scalekit Tools

Batch scrape multiple LinkedIn profiles in a single request using the HarvestAPI Apify scraper. Accepts a JSON array of LinkedIn profile URLs. Pricing: $4 per 1,000 profiles, $10 per 1,000 with email. Requires an Apify API token from https://console.apify.com/settings/integrations.

NameTypeRequiredDescription
apify_tokenstringYesYour Apify API token from https://console.apify.com/settings/integrations.
find_emailbooleanNoWhen true, attempts email discovery for all profiles. Costs $10 per 1,000 instead of $4.
profile_urlsarray<string>YesJSON array of LinkedIn profile URLs to scrape in bulk.

Retrieve details of a specific LinkedIn ad by ad ID or URL.

NameTypeRequiredDescription
ad_idstringNoThe unique identifier of the LinkedIn Ad.
urlstringNoThe URL of the LinkedIn Ad.

Retrieve reactions on a specific LinkedIn comment by its URL.

NameTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1).
urlstringYesURL of the LinkedIn comment.

Retrieve the Harvest company (account) information for the authenticated user, including company name, base URI, plan type, clock format, currency, and weekly capacity settings.

NameTypeRequiredDescription
account_idstringYesYour Harvest account ID, returned during OAuth as the Harvest-Account-Id header.

Retrieve posts published by a LinkedIn company page. Returns paginated post content, engagement metrics, and timestamps.

NameTypeRequiredDescription
companystringNoLinkedIn company URL. Provide this or company_universal_name.
company_universal_namestringNoLinkedIn company universal name (slug from company URL).
pageintegerNoPage number for pagination (default: 1).

Retrieve details of a LinkedIn group including name, description, member count, and activity by URL or group ID.

NameTypeRequiredDescription
group_idstringNoLinkedIn group ID. Provide this or url.
urlstringNoLinkedIn group URL. Provide this or group_id.

Retrieve a specific LinkedIn post by its URL. Returns full post content, author details, and engagement metrics.

NameTypeRequiredDescription
urlstringYesThe LinkedIn post URL.

Retrieve all comments on a LinkedIn post by its URL. Returns comment text, author details, and timestamps.

NameTypeRequiredDescription
poststringYesThe LinkedIn post URL to retrieve comments for.

Retrieve all reactions on a LinkedIn post by its URL. Returns reaction type and reactor profile details.

NameTypeRequiredDescription
poststringYesThe LinkedIn post URL to retrieve reactions for.

Retrieve comments made by a LinkedIn profile. Returns paginated results with comment content and timestamps.

NameTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1).
pagination_tokenstringNoRequired for pages > 1. Use token from previous page response.
posted_limitstringNoFilter by maximum posted date. Options: ‘24h’, ‘week’, ‘month’.
profilestringNoURL of the LinkedIn profile.
profile_idstringNoProfile ID of the LinkedIn profile. Faster than URL lookup.

Retrieve posts made by a specific LinkedIn profile. Returns paginated post content, engagement data, and timestamps.

NameTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1).
profilestringNoLinkedIn profile URL. Provide this or profile_id.
profile_idstringNoLinkedIn profile ID. Provide this or profile.
profile_public_identifierstringNoLinkedIn public identifier (slug from profile URL).

Retrieve reactions made by a LinkedIn profile. Returns paginated results.

NameTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1).
pagination_tokenstringNoRequired for pages > 1. Use token from previous page response.
profilestringNoURL of the LinkedIn profile.
profile_idstringNoProfile ID of the LinkedIn profile. Faster than URL lookup.

Scrape a LinkedIn company page for overview, headcount, employee count range, follower count, locations, specialities, industries, and funding data. Provide one of: company_url, universal_name, or search (company name).

NameTypeRequiredDescription
company_urlstringNoFull LinkedIn company page URL. Provide this, universal_name, or search.
searchstringNoCompany name to look up on LinkedIn. Returns the most relevant result. Provide this, company_url, or universal_name.
universal_namestringNoCompany universal name from the LinkedIn URL slug. Provide this, company_url, or search.

Retrieve full job listing details from LinkedIn by job URL or job ID. Returns title, company, description, requirements, salary, location, workplace type, employment type, applicant count, and application details. Provide one of: job_url or job_id.

NameTypeRequiredDescription
job_idstringNoLinkedIn numeric job ID from the posting URL. Provide this or job_url.
job_urlstringNoFull LinkedIn job posting URL. Provide this or job_id.

Scrape a LinkedIn profile by URL or public identifier, returning contact details, employment history, education, skills, and more. Provide either profile_url or public_identifier. Use main=true for a simplified profile at fewer credits. Optionally find email with find_email=true (costs extra credits). Processing time ~2.6s (main) or ~4.9s (full).

NameTypeRequiredDescription
find_emailbooleanNoWhen true, attempts to find the profile’s email address via SMTP verification. Costs extra credits.
include_about_profilebooleanNoWhen true, includes the ‘About’ section of the LinkedIn profile in the response.
mainbooleanNoWhen true, returns a simplified profile with fewer fields. Charges fewer credits than a full scrape.
profile_idstringNoLinkedIn numeric profile ID. Can be used instead of profile_url or public_identifier.
profile_urlstringNoFull LinkedIn profile URL. Provide this or public_identifier or profile_id.
public_identifierstringNoLinkedIn profile public identifier (the slug in the URL). Provide this or profile_url or profile_id.
skip_smtpbooleanNoWhen true, skips SMTP verification when finding email. Faster but less accurate.

Search the LinkedIn Ad Library for ads by keyword, advertiser, country, and date range. Useful for competitive research and ad intelligence.

NameTypeRequiredDescription
account_ownerstringNoLinkedIn company URL of the advertiser.
countriesstringNoCountry codes to filter ads by, comma-separated. e.g. ‘US,GB’.
date_optionstringNoPredefined date filter option.
enddatestringNoEnd date for ad search in YYYY-MM-DD format.
keywordstringNoKeyword to search for in ads.
startdatestringNoStart date for ad search in YYYY-MM-DD format.

Search LinkedIn for companies using keyword, location, and company size filters. Returns paginated results with company name, description, and LinkedIn URL.

NameTypeRequiredDescription
company_sizestringNoCompany size range filter e.g. ‘1-10’, ‘11-50’, ‘51-200’.
locationstringNoLocation to filter companies by.
pageintegerNoPage number for pagination (default: 1).
searchstringNoKeyword to search for companies.

Search for LinkedIn geo IDs by location name. Returns matching geographic location IDs used for filtering people and job searches by location.

NameTypeRequiredDescription
searchstringYesLocation name to search for geo IDs.

Search LinkedIn groups by keyword. Returns paginated results with group name, description, and member count.

NameTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1).
searchstringYesKeyword to search for groups.

Search LinkedIn job listings by keyword, location, company, workplace type, employment type, experience level, and salary. Returns paginated job listings with title, company, location, and LinkedIn URL.

NameTypeRequiredDescription
company_idstringNoFilter by LinkedIn company ID(s), comma-separated.
easy_applybooleanNoWhen true, filter to jobs with LinkedIn Easy Apply only.
employment_typestringNoFilter by employment type. Accepted values: full-time, part-time, contract, temporary, internship (comma-separated).
experience_levelstringNoFilter by experience level. Accepted values: internship, entry, associate, mid-senior, director, executive (comma-separated).
locationstringNoFilter by job location text (city, country, or region).
pageintegerNoPage number for pagination (default: 1).
posted_limitstringNoFilter by recency of posting. Accepted values: 24h, week, month.
salarystringNoMinimum salary filter. Accepted values: 40k+, 60k+, 80k+, 100k+, 120k+, 140k+, 160k+, 180k+, 200k+.
searchstringNoJob title or keyword to search for.
sort_bystringNoSort results by relevance or date.
workplace_typestringNoFilter by workplace type. Accepted values: office, hybrid, remote (comma-separated).

Search LinkedIn for leads using advanced filters including company, job title, location, seniority, industry, and experience. Supports LinkedIn Sales Navigator URLs.

NameTypeRequiredDescription
company_headcountstringNoFilter by company size e.g. ‘1-10’, ‘11-50’, ‘51-200’.
current_companiesstringNoFilter by current company IDs or URLs (max 50, comma-separated).
current_job_titlesstringNoFilter by current job titles (max 70, comma-separated).
first_namesstringNoFilter by first names (max 70, comma-separated).
geo_idsstringNoLinkedIn Geo IDs for location filtering. Overrides locations.
industry_idsstringNoFilter by industry IDs (max 70, comma-separated).
last_namesstringNoFilter by last names (max 70, comma-separated).
locationsstringNoLocation text filter (max 70, comma-separated).
pageintegerNoPage number for pagination (default: 1, max: 100).
past_companiesstringNoFilter by past company IDs or URLs (max 50, comma-separated).
past_job_titlesstringNoFilter by past job titles (max 70, comma-separated).
recently_changed_jobsbooleanNoFilter for people who recently changed jobs.
sales_nav_urlstringNoLinkedIn Sales Navigator URL to use as search override.
searchstringNoSearch query supporting LinkedIn operators.
seniority_level_idsstringNoFilter by seniority level IDs (comma-separated).
years_of_experience_idsstringNoFilter by years of total experience IDs.

Search LinkedIn for people using filters such as job title, current company, location, and industry. Uses LinkedIn Lead Search for unmasked results. Returns paginated profiles with name, title, location, and LinkedIn URL. All parameters are optional and comma-separated for multiple values.

NameTypeRequiredDescription
company_headcountstringNoCompany headcount range filter, comma-separated (e.g. ‘1-10,11-50’).
current_companiesstringNoCurrent company IDs or LinkedIn URLs, comma-separated (max 50).
current_job_titlesstringNoCurrent job titles, comma-separated (max 70). e.g. ‘CTO,VP Engineering’
first_namesstringNoFirst names to filter by, comma-separated (max 70).
industry_idsstringNoLinkedIn industry IDs, comma-separated (max 70).
last_namesstringNoLast names to filter by, comma-separated (max 70).
locationsstringNoLocation text, comma-separated (max 70). e.g. ‘San Francisco,New York’
pageintegerNoPage number for pagination (default: 1, max: 100).
searchstringNoFuzzy keyword search across name, title, and company. Supports LinkedIn search operators.
seniority_level_idsstringNoLinkedIn seniority level IDs, comma-separated.

Search LinkedIn posts by keyword, company, profile, or group. Supports filtering by post age and sorting. Returns paginated results with post content, author, and engagement data.

NameTypeRequiredDescription
authors_companystringNoFilter posts by the author’s current company URL.
companystringNoLinkedIn company URL to filter posts by.
company_idstringNoLinkedIn company ID to filter posts by.
groupstringNoLinkedIn group URL to filter posts by.
pageintegerNoPage number for pagination (default: 1).
posted_limitstringNoFilter by post age. e.g. ‘past-24h’, ‘past-week’, ‘past-month’.
profilestringNoLinkedIn profile URL to filter posts by.
profile_idstringNoLinkedIn profile ID to filter posts by.
searchstringNoKeyword to search for in posts.
sort_bystringNoSort results by ‘relevance’ or ‘date’.

Search LinkedIn profiles offering services by name, location, or geo ID. Returns paginated results.

NameTypeRequiredDescription
geo_idstringNoFilter by LinkedIn Geo ID. Overrides the location parameter.
locationstringNoFilter by location text.
pageintegerNoPage number for pagination (default: 1).
searchstringYesSearch profiles by service name or keyword.