> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agent-auth`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# HarvestAPI

<div class="grid grid-cols-5 gap-4 items-center">
 <div class="col-span-4">
  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.
 </div>
 <div class="flex justify-center">
  <img src="https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/harvestapi.svg" width="64" height="64" alt="HarvestAPI logo" />
 </div>
</div>

Supports authentication: API Key

## Set up the agent connector

<SetupHarvestapiSection />

## Usage

<UsageHarvestapiSection />

## Tool list

## `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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `apify_token` | string | Yes | Your Apify API token from https://console.apify.com/settings/integrations. |
| `find_email` | boolean | No | When true, attempts email discovery for all profiles. Costs $10 per 1,000 instead of $4. |
| `profile_urls` | `array<string>` | Yes | JSON array of LinkedIn profile URLs to scrape in bulk. |

## `harvestapi_get_ad`

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

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `ad_id` | string | No | The unique identifier of the LinkedIn Ad. |
| `url` | string | No | The URL of the LinkedIn Ad. |

## `harvestapi_get_comment_reactions`

Retrieve reactions on a specific LinkedIn comment by its URL.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `page` | integer | No | Page number for pagination (default: 1). |
| `url` | string | Yes | URL of the LinkedIn comment. |

## `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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `account_id` | string | Yes | Your 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `company` | string | No | LinkedIn company URL. Provide this or company_universal_name. |
| `company_universal_name` | string | No | LinkedIn company universal name (slug from company URL). |
| `page` | integer | No | Page 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `group_id` | string | No | LinkedIn group ID. Provide this or url. |
| `url` | string | No | LinkedIn 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | string | Yes | The LinkedIn post URL. |

## `harvestapi_get_post_comments`

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

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `post` | string | Yes | The 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `post` | string | Yes | The 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `page` | integer | No | Page number for pagination (default: 1). |
| `pagination_token` | string | No | Required for pages > 1. Use token from previous page response. |
| `posted_limit` | string | No | Filter by maximum posted date. Options: '24h', 'week', 'month'. |
| `profile` | string | No | URL of the LinkedIn profile. |
| `profile_id` | string | No | Profile 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `page` | integer | No | Page number for pagination (default: 1). |
| `profile` | string | No | LinkedIn profile URL. Provide this or profile_id. |
| `profile_id` | string | No | LinkedIn profile ID. Provide this or profile. |
| `profile_public_identifier` | string | No | LinkedIn public identifier (slug from profile URL). |

## `harvestapi_get_profile_reactions`

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

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `page` | integer | No | Page number for pagination (default: 1). |
| `pagination_token` | string | No | Required for pages > 1. Use token from previous page response. |
| `profile` | string | No | URL of the LinkedIn profile. |
| `profile_id` | string | No | Profile 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).

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `company_url` | string | No | Full LinkedIn company page URL. Provide this, universal_name, or search. |
| `search` | string | No | Company name to look up on LinkedIn. Returns the most relevant result. Provide this, company_url, or universal_name. |
| `universal_name` | string | No | Company 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `job_id` | string | No | LinkedIn numeric job ID from the posting URL. Provide this or job_url. |
| `job_url` | string | No | Full 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).

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `find_email` | boolean | No | When true, attempts to find the profile's email address via SMTP verification. Costs extra credits. |
| `include_about_profile` | boolean | No | When true, includes the 'About' section of the LinkedIn profile in the response. |
| `main` | boolean | No | When true, returns a simplified profile with fewer fields. Charges fewer credits than a full scrape. |
| `profile_id` | string | No | LinkedIn numeric profile ID. Can be used instead of profile_url or public_identifier. |
| `profile_url` | string | No | Full LinkedIn profile URL. Provide this or public_identifier or profile_id. |
| `public_identifier` | string | No | LinkedIn profile public identifier (the slug in the URL). Provide this or profile_url or profile_id. |
| `skip_smtp` | boolean | No | When 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `account_owner` | string | No | LinkedIn company URL of the advertiser. |
| `countries` | string | No | Country codes to filter ads by, comma-separated. e.g. 'US,GB'. |
| `date_option` | string | No | Predefined date filter option. |
| `enddate` | string | No | End date for ad search in YYYY-MM-DD format. |
| `keyword` | string | No | Keyword to search for in ads. |
| `startdate` | string | No | Start 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `company_size` | string | No | Company size range filter e.g. '1-10', '11-50', '51-200'. |
| `location` | string | No | Location to filter companies by. |
| `page` | integer | No | Page number for pagination (default: 1). |
| `search` | string | No | Keyword 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `search` | string | Yes | Location name to search for geo IDs. |

## `harvestapi_search_groups`

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

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `page` | integer | No | Page number for pagination (default: 1). |
| `search` | string | Yes | Keyword to search for groups. |

## `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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `company_id` | string | No | Filter by LinkedIn company ID(s), comma-separated. |
| `easy_apply` | boolean | No | When true, filter to jobs with LinkedIn Easy Apply only. |
| `employment_type` | string | No | Filter by employment type. Accepted values: full-time, part-time, contract, temporary, internship (comma-separated). |
| `experience_level` | string | No | Filter by experience level. Accepted values: internship, entry, associate, mid-senior, director, executive (comma-separated). |
| `location` | string | No | Filter by job location text (city, country, or region). |
| `page` | integer | No | Page number for pagination (default: 1). |
| `posted_limit` | string | No | Filter by recency of posting. Accepted values: 24h, week, month. |
| `salary` | string | No | Minimum salary filter. Accepted values: 40k+, 60k+, 80k+, 100k+, 120k+, 140k+, 160k+, 180k+, 200k+. |
| `search` | string | No | Job title or keyword to search for. |
| `sort_by` | string | No | Sort results by relevance or date. |
| `workplace_type` | string | No | Filter 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `company_headcount` | string | No | Filter by company size e.g. '1-10', '11-50', '51-200'. |
| `current_companies` | string | No | Filter by current company IDs or URLs (max 50, comma-separated). |
| `current_job_titles` | string | No | Filter by current job titles (max 70, comma-separated). |
| `first_names` | string | No | Filter by first names (max 70, comma-separated). |
| `geo_ids` | string | No | LinkedIn Geo IDs for location filtering. Overrides locations. |
| `industry_ids` | string | No | Filter by industry IDs (max 70, comma-separated). |
| `last_names` | string | No | Filter by last names (max 70, comma-separated). |
| `locations` | string | No | Location text filter (max 70, comma-separated). |
| `page` | integer | No | Page number for pagination (default: 1, max: 100). |
| `past_companies` | string | No | Filter by past company IDs or URLs (max 50, comma-separated). |
| `past_job_titles` | string | No | Filter by past job titles (max 70, comma-separated). |
| `recently_changed_jobs` | boolean | No | Filter for people who recently changed jobs. |
| `sales_nav_url` | string | No | LinkedIn Sales Navigator URL to use as search override. |
| `search` | string | No | Search query supporting LinkedIn operators. |
| `seniority_level_ids` | string | No | Filter by seniority level IDs (comma-separated). |
| `years_of_experience_ids` | string | No | Filter 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `company_headcount` | string | No | Company headcount range filter, comma-separated (e.g. '1-10,11-50'). |
| `current_companies` | string | No | Current company IDs or LinkedIn URLs, comma-separated (max 50). |
| `current_job_titles` | string | No | Current job titles, comma-separated (max 70). e.g. 'CTO,VP Engineering' |
| `first_names` | string | No | First names to filter by, comma-separated (max 70). |
| `industry_ids` | string | No | LinkedIn industry IDs, comma-separated (max 70). |
| `last_names` | string | No | Last names to filter by, comma-separated (max 70). |
| `locations` | string | No | Location text, comma-separated (max 70). e.g. 'San Francisco,New York' |
| `page` | integer | No | Page number for pagination (default: 1, max: 100). |
| `search` | string | No | Fuzzy keyword search across name, title, and company. Supports LinkedIn search operators. |
| `seniority_level_ids` | string | No | LinkedIn seniority level 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.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `authors_company` | string | No | Filter posts by the author's current company URL. |
| `company` | string | No | LinkedIn company URL to filter posts by. |
| `company_id` | string | No | LinkedIn company ID to filter posts by. |
| `group` | string | No | LinkedIn group URL to filter posts by. |
| `page` | integer | No | Page number for pagination (default: 1). |
| `posted_limit` | string | No | Filter by post age. e.g. 'past-24h', 'past-week', 'past-month'. |
| `profile` | string | No | LinkedIn profile URL to filter posts by. |
| `profile_id` | string | No | LinkedIn profile ID to filter posts by. |
| `search` | string | No | Keyword to search for in posts. |
| `sort_by` | string | No | Sort results by 'relevance' or 'date'. |

## `harvestapi_search_services`

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

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `geo_id` | string | No | Filter by LinkedIn Geo ID. Overrides the location parameter. |
| `location` | string | No | Filter by location text. |
| `page` | integer | No | Page number for pagination (default: 1). |
| `search` | string | Yes | Search profiles by service name or keyword. |

---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
