Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

HarvestAPI connector

API KeyMarketingAnalytics

Connect to HarvestAPI to scrape LinkedIn profiles, companies, and job listings, and search for people and jobs using LinkedIn data. Enables AI agents to...

HarvestAPI connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Register your HarvestAPI credentials with Scalekit so it can authenticate requests on your behalf. You do this once per environment.

    Dashboard setup steps

    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 AgentKit > Connections > Create 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.

  4. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'harvestapi'
    const identifier = 'user_123'
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'harvestapi_get_ad',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Search leads, services, geo — Search LinkedIn for leads using advanced filters including company, job title, location, seniority, industry, and experience
  • Get profile reactions, profile comments, comment reactions — Retrieve reactions made by a LinkedIn profile
  • Profile scrape — Scrape a LinkedIn profile by URL or public identifier, returning contact details, employment history, education, skills, and more
  • Job scrape — Retrieve full job listing details from LinkedIn by job URL or job ID
  • Company scrape — Scrape a LinkedIn company page for overview, headcount, employee count range, follower count, locations, specialities, industries, and funding data
  • Profiles bulk scrape — Batch scrape multiple LinkedIn profiles in a single request using the HarvestAPI Apify scraper
Proxy API call
// Scrape a LinkedIn profile by URL
const profile = await actions.request({
connectionName: 'harvestapi',
identifier: 'user_123',
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: 'harvestapi',
identifier: 'user_123',
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: 'harvestapi',
identifier: 'user_123',
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: 'harvestapi',
identifier: 'user_123',
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: 'harvestapi',
identifier: 'user_123',
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: 'harvestapi',
identifier: 'user_123',
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);
Execute a tool
const result = await actions.executeTool({
connector: 'harvestapi',
identifier: 'user_123',
toolName: 'harvestapi_bulk_scrape_profiles',
toolInput: {},
});
console.log(result);

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

harvestapi_bulk_scrape_profiles#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.3 params

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_tokenstringrequiredYour Apify API token from https://console.apify.com/settings/integrations.
profile_urlsarrayrequiredJSON array of LinkedIn profile URLs to scrape in bulk.
find_emailbooleanoptionalWhen true, attempts email discovery for all profiles. Costs $10 per 1,000 instead of $4.
harvestapi_get_ad#Retrieve details of a specific LinkedIn ad by ad ID or URL.2 params

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

NameTypeRequiredDescription
ad_idstringoptionalThe unique identifier of the LinkedIn Ad.
urlstringoptionalThe URL of the LinkedIn Ad.
harvestapi_get_comment_reactions#Retrieve reactions on a specific LinkedIn comment by its URL.2 params

Retrieve reactions on a specific LinkedIn comment by its URL.

NameTypeRequiredDescription
urlstringrequiredURL of the LinkedIn comment.
pageintegeroptionalPage number for pagination (default: 1).
harvestapi_get_company#Retrieve the Harvest company (account) information for the authenticated user, including company name, base URI, plan type, clock format, currency, and weekly capacity settings.1 param

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_idstringrequiredYour Harvest account ID, returned during OAuth as the Harvest-Account-Id header.
harvestapi_get_company_posts#Retrieve posts published by a LinkedIn company page. Returns paginated post content, engagement metrics, and timestamps.3 params

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

NameTypeRequiredDescription
companystringoptionalLinkedIn company URL. Provide this or company_universal_name.
company_universal_namestringoptionalLinkedIn company universal name (slug from company URL).
pageintegeroptionalPage number for pagination (default: 1).
harvestapi_get_group#Retrieve details of a LinkedIn group including name, description, member count, and activity by URL or group ID.2 params

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

NameTypeRequiredDescription
group_idstringoptionalLinkedIn group ID. Provide this or url.
urlstringoptionalLinkedIn group URL. Provide this or group_id.
harvestapi_get_post#Retrieve a specific LinkedIn post by its URL. Returns full post content, author details, and engagement metrics.1 param

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

NameTypeRequiredDescription
urlstringrequiredThe LinkedIn post URL.
harvestapi_get_post_comments#Retrieve all comments on a LinkedIn post by its URL. Returns comment text, author details, and timestamps.1 param

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

NameTypeRequiredDescription
poststringrequiredThe LinkedIn post URL to retrieve comments for.
harvestapi_get_post_reactions#Retrieve all reactions on a LinkedIn post by its URL. Returns reaction type and reactor profile details.1 param

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

NameTypeRequiredDescription
poststringrequiredThe LinkedIn post URL to retrieve reactions for.
harvestapi_get_profile_comments#Retrieve comments made by a LinkedIn profile. Returns paginated results with comment content and timestamps.5 params

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

NameTypeRequiredDescription
pageintegeroptionalPage number for pagination (default: 1).
pagination_tokenstringoptionalRequired for pages > 1. Use token from previous page response.
posted_limitstringoptionalFilter by maximum posted date. Options: '24h', 'week', 'month'.
profilestringoptionalURL of the LinkedIn profile.
profile_idstringoptionalProfile ID of the LinkedIn profile. Faster than URL lookup.
harvestapi_get_profile_posts#Retrieve posts made by a specific LinkedIn profile. Returns paginated post content, engagement data, and timestamps.4 params

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

NameTypeRequiredDescription
pageintegeroptionalPage number for pagination (default: 1).
profilestringoptionalLinkedIn profile URL. Provide this or profile_id.
profile_idstringoptionalLinkedIn profile ID. Provide this or profile.
profile_public_identifierstringoptionalLinkedIn public identifier (slug from profile URL).
harvestapi_get_profile_reactions#Retrieve reactions made by a LinkedIn profile. Returns paginated results.4 params

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

NameTypeRequiredDescription
pageintegeroptionalPage number for pagination (default: 1).
pagination_tokenstringoptionalRequired for pages > 1. Use token from previous page response.
profilestringoptionalURL of the LinkedIn profile.
profile_idstringoptionalProfile ID of the LinkedIn profile. Faster than URL lookup.
harvestapi_scrape_company#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).3 params

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_urlstringoptionalFull LinkedIn company page URL. Provide this, universal_name, or search.
searchstringoptionalCompany name to look up on LinkedIn. Returns the most relevant result. Provide this, company_url, or universal_name.
universal_namestringoptionalCompany universal name from the LinkedIn URL slug. Provide this, company_url, or search.
harvestapi_scrape_job#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.2 params

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_idstringoptionalLinkedIn numeric job ID from the posting URL. Provide this or job_url.
job_urlstringoptionalFull LinkedIn job posting URL. Provide this or job_id.
harvestapi_scrape_profile#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).7 params

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_emailbooleanoptionalWhen true, attempts to find the profile's email address via SMTP verification. Costs extra credits.
include_about_profilebooleanoptionalWhen true, includes the 'About' section of the LinkedIn profile in the response.
mainbooleanoptionalWhen true, returns a simplified profile with fewer fields. Charges fewer credits than a full scrape.
profile_idstringoptionalLinkedIn numeric profile ID. Can be used instead of profile_url or public_identifier.
profile_urlstringoptionalFull LinkedIn profile URL. Provide this or public_identifier or profile_id.
public_identifierstringoptionalLinkedIn profile public identifier (the slug in the URL). Provide this or profile_url or profile_id.
skip_smtpbooleanoptionalWhen true, skips SMTP verification when finding email. Faster but less accurate.
harvestapi_search_ads#Search the LinkedIn Ad Library for ads by keyword, advertiser, country, and date range. Useful for competitive research and ad intelligence.6 params

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

NameTypeRequiredDescription
account_ownerstringoptionalLinkedIn company URL of the advertiser.
countriesstringoptionalCountry codes to filter ads by, comma-separated. e.g. 'US,GB'.
date_optionstringoptionalPredefined date filter option.
enddatestringoptionalEnd date for ad search in YYYY-MM-DD format.
keywordstringoptionalKeyword to search for in ads.
startdatestringoptionalStart date for ad search in YYYY-MM-DD format.
harvestapi_search_companies#Search LinkedIn for companies using keyword, location, and company size filters. Returns paginated results with company name, description, and LinkedIn URL.6 params

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

NameTypeRequiredDescription
company_sizestringoptionalCompany size range filter e.g. '1-10', '11-50', '51-200'.
geo_idstringoptionalLinkedIn Geo ID for location filtering. Overrides the location param. Use /linkedin/geo-id-search to find IDs.
industry_idstringoptionalLinkedIn industry ID(s), comma-separated. Full list at https://github.com/HarvestAPI/linkedin-industry-codes-v2.
locationstringoptionalLocation to filter companies by.
pageintegeroptionalPage number for pagination (default: 1).
searchstringoptionalKeyword to search for companies.
harvestapi_search_geo#Search for LinkedIn geo IDs by location name. Returns matching geographic location IDs used for filtering people and job searches by location.1 param

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

NameTypeRequiredDescription
searchstringrequiredLocation name to search for geo IDs.
harvestapi_search_groups#Search LinkedIn groups by keyword. Returns paginated results with group name, description, and member count.2 params

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

NameTypeRequiredDescription
searchstringrequiredKeyword to search for groups.
pageintegeroptionalPage number for pagination (default: 1).
harvestapi_search_jobs#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.11 params

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_idstringoptionalFilter by LinkedIn company ID(s), comma-separated.
easy_applybooleanoptionalWhen true, filter to jobs with LinkedIn Easy Apply only.
employment_typestringoptionalFilter by employment type. Accepted values: full-time, part-time, contract, temporary, internship (comma-separated).
experience_levelstringoptionalFilter by experience level. Accepted values: internship, entry, associate, mid-senior, director, executive (comma-separated).
locationstringoptionalFilter by job location text (city, country, or region).
pageintegeroptionalPage number for pagination (default: 1).
posted_limitstringoptionalFilter by recency of posting. Accepted values: 24h, week, month.
salarystringoptionalMinimum salary filter. Accepted values: 40k+, 60k+, 80k+, 100k+, 120k+, 140k+, 160k+, 180k+, 200k+.
searchstringoptionalJob title or keyword to search for.
sort_bystringoptionalSort results by relevance or date.
workplace_typestringoptionalFilter by workplace type. Accepted values: office, hybrid, remote (comma-separated).
harvestapi_search_leads#Search LinkedIn for leads using advanced filters including company, job title, location, seniority, industry, and experience. Supports LinkedIn Sales Navigator URLs.16 params

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

NameTypeRequiredDescription
company_headcountstringoptionalFilter by company size e.g. '1-10', '11-50', '51-200'.
current_companiesstringoptionalFilter by current company IDs or URLs (max 50, comma-separated).
current_job_titlesstringoptionalFilter by current job titles (max 70, comma-separated).
first_namesstringoptionalFilter by first names (max 70, comma-separated).
geo_idsstringoptionalLinkedIn Geo IDs for location filtering. Overrides locations.
industry_idsstringoptionalFilter by industry IDs (max 70, comma-separated).
last_namesstringoptionalFilter by last names (max 70, comma-separated).
locationsstringoptionalLocation text filter (max 70, comma-separated).
pageintegeroptionalPage number for pagination (default: 1, max: 100).
past_companiesstringoptionalFilter by past company IDs or URLs (max 50, comma-separated).
past_job_titlesstringoptionalFilter by past job titles (max 70, comma-separated).
recently_changed_jobsbooleanoptionalFilter for people who recently changed jobs.
sales_nav_urlstringoptionalLinkedIn Sales Navigator URL to use as search override.
searchstringoptionalSearch query supporting LinkedIn operators.
seniority_level_idsstringoptionalFilter by seniority level IDs (comma-separated).
years_of_experience_idsstringoptionalFilter by years of total experience IDs.
harvestapi_search_people#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.36 params

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_headcountstringoptionalCompany headcount range filter, comma-separated (e.g. '1-10,11-50').
company_headquarter_locationsstringoptionalCompany headquarter location text, comma-separated (max 70).
current_companiesstringoptionalCurrent company IDs or LinkedIn URLs, comma-separated (max 50).
current_job_titlesstringoptionalCurrent job titles, comma-separated (max 70). e.g. 'CTO,VP Engineering'
exclude_company_headquarter_locationsstringoptionalCompany headquarter locations to exclude, comma-separated (max 70).
exclude_current_companiesstringoptionalCurrent companies to exclude, comma-separated (max 50).
exclude_current_job_titlesstringoptionalCurrent job titles to exclude, comma-separated (max 70).
exclude_function_idsstringoptionalJob function IDs to exclude, comma-separated (max 30).
exclude_geo_idsstringoptionalLinkedIn Geo IDs to exclude, comma-separated (max 70).
exclude_industry_idsstringoptionalIndustry IDs to exclude, comma-separated (max 70).
exclude_locationsstringoptionalLocations to exclude, comma-separated (max 70).
exclude_past_companiesstringoptionalPast companies to exclude, comma-separated (max 50).
exclude_past_job_titlesstringoptionalPast job titles to exclude, comma-separated (max 70).
exclude_schoolsstringoptionalSchools to exclude, comma-separated (max 50).
exclude_seniority_level_idsstringoptionalSeniority level IDs to exclude, comma-separated (max 20).
first_namesstringoptionalFirst names to filter by, comma-separated (max 70).
function_idsstringoptionalJob function IDs, comma-separated.
geo_idsstringoptionalLinkedIn Geo IDs, comma-separated. Overrides the locations param. Use /linkedin/geo-id-search to look up IDs.
industry_idsstringoptionalLinkedIn industry IDs, comma-separated (max 70).
last_namesstringoptionalLast names to filter by, comma-separated (max 70).
locationsstringoptionalLocation text, comma-separated (max 70). e.g. 'San Francisco,New York'
pageintegeroptionalPage number for pagination (default: 1, max: 100).
past_companiesstringoptionalPast company IDs or LinkedIn URLs, comma-separated (max 50).
past_job_titlesstringoptionalPast job titles, comma-separated (max 70).
posted_on_linkedinbooleanoptionalWhen true, returns only profiles who posted on LinkedIn in the last 30 days.
profile_languagesstringoptionalProfile languages, comma-separated (e.g. 'en,de').
recently_changed_jobsbooleanoptionalWhen true, returns only profiles who changed jobs in the last 90 days.
required_account_idstringoptionalSpecify which private pool account to use for this request (if you have a private pool).
sales_nav_urlstringoptionalLinkedIn Sales Navigator search URL. Overrides all other search params except page.
schoolsstringoptionalSchool IDs or LinkedIn URLs, comma-separated (max 50).
searchstringoptionalFuzzy keyword search across name, title, and company. Supports LinkedIn search operators.
seniority_level_idsstringoptionalLinkedIn seniority level IDs, comma-separated.
session_idstringoptionalSession ID to ensure consistent results across paginated requests from the same resource.
use_private_poolbooleanoptionalWhen true, uses your private pool of resources (if available).
years_at_current_company_idsstringoptionalYears at current company filter IDs, comma-separated.
years_of_experience_idsstringoptionalYears of experience filter IDs, comma-separated.
harvestapi_search_posts#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.10 params

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_companystringoptionalFilter posts by the author's current company URL.
companystringoptionalLinkedIn company URL to filter posts by.
company_idstringoptionalLinkedIn company ID to filter posts by.
groupstringoptionalLinkedIn group URL to filter posts by.
pageintegeroptionalPage number for pagination (default: 1).
posted_limitstringoptionalFilter by post age. e.g. 'past-24h', 'past-week', 'past-month'.
profilestringoptionalLinkedIn profile URL to filter posts by.
profile_idstringoptionalLinkedIn profile ID to filter posts by.
searchstringoptionalKeyword to search for in posts.
sort_bystringoptionalSort results by 'relevance' or 'date'.
harvestapi_search_services#Search LinkedIn profiles offering services by name, location, or geo ID. Returns paginated results.4 params

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

NameTypeRequiredDescription
searchstringrequiredSearch profiles by service name or keyword.
geo_idstringoptionalFilter by LinkedIn Geo ID. Overrides the location parameter.
locationstringoptionalFilter by location text.
pageintegeroptionalPage number for pagination (default: 1).