> ## Documentation Index
> Fetch the complete documentation index at: https://deepline.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Use HarvestAPI in Deepline

> Use the resource-specific lookup and search actions. Preserve pagination tokens or session IDs when the selected endpoint returns them.

[Human guide: work with your agent →](https://deepline.com/docs/human/providers/harvestapi/guide.md)
Inspect one HarvestAPI action before starting provider-backed work. Your first result is a verified input and output contract.

## Provider-specific requirements

Choose the action for the LinkedIn resource you need. Use `harvestapi_get_*` for a known profile, company, job, post, group, ad, or engagement target. Use `harvestapi_search_*` for discovery. HarvestAPI interaction actions that send messages or manage connections are intentionally unavailable.

For employee searches, use `harvestapi_search_leads` with LinkedIn company URLs or identifiers in `currentCompanies`. HarvestAPI matches this filter by company name. Discard results whose `currentPositions.companyId` does not match the intended company. Generate a random `sessionId` and reuse it on later pages. For other paginated actions, preserve `paginationToken` when the input supports it. In profile posts, comments, and reactions, `pagination.totalPages: 0` means unknown. Totals can be inaccurate even when results exist. Use a returned `paginationToken` to continue because it guarantees another page.

For profile posts, `postedLimit` may return posts outside the requested duration. Prefer `scrapePostedLimit` when a date cutoff is required, but its enforcement has not been live-verified. HarvestAPI documents no numeric result-limit parameter for this endpoint. request page 1 and truncate `elements` client-side when a fixed count is needed.

Use `harvestapi_get_profile` with `main: "true"` when the smaller main-profile response is sufficient. Set `findEmail: "true"` only when email discovery is needed because it costs more. Set `skipSmtp: "true"` only when a non-SMTP email lookup is acceptable.

`main: "true"` abbreviates profile sections. It does not mean current employer only. `element.websites` and `element.companyWebsites` are optional, including in full mode. Distinguish absent keys from explicit nulls and empty arrays. A website value does not prove the current employer's domain. If that domain is required but missing, resolve the company from `currentPosition`. Check the returned company identity. Retrying full mode does not guarantee a website.

HarvestAPI plan limits are concurrent-request limits, not per-minute quotas. Deepline uses its Business subscription's 40-request concurrency limit and applies shared retry/backoff handling for transient failures.

An empty response can still consume managed Deepline credits. Paginated tools are priced per requested page, not per returned record. A successful `elements: []` response is charged when HarvestAPI reports billable usage. if that empty list reports no billable usage or omits usage, Deepline charges zero credits. Recognized missing-profile and missing-ad outcomes marked `no_result` are unbilled. Empty lists can have status `completed`. A completed status, null record, or body-level error alone does not guarantee a free call. Check the returned Deepline billing details for the actual charge.

Treat `recentlyChangedJobs: true` as the provider's recent-job-change filter,
not proof of a particular current role or role start date. Check the returned
current-position dates against your own eligibility window when those dates
are present. If dates or timestamps are absent, retain the row as unverified
rather than inventing dates or silently counting it as a verified change.
A provider error envelope, including numeric `status` and plural `errors`, is
a failed request even if its transport status is HTTP 200.

## Find an applicable action

Confirm your effective workspace, then search the live catalog:

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline auth status --json
deepline search "HarvestAPI" --type tools --json
```

Search returns candidates. Check the returned provider and operation rather than selecting a similar title automatically.

## Inspect the selected contract

Replace `<returned-tool-id>` with the identifier returned by discovery:

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline describe <returned-tool-id> --json
```

These commands do not execute the selected provider action. Read its required inputs, supported access mode, pricing unit, outputs, and limits.

A connection does not establish that every action supports BYOK. Follow the provider-specific requirements above and the live action contract.

## Prepare one reviewed input

Use one authorized record that matches the inspected schema. Preserve its source identity and define the result you will accept.

Open the action reference for its payload and response shape. Provider-backed execution can incur usage or external effects.

For reusable logic, follow [Write Plays](https://deepline.com/docs/sdk-v2/plays.md). For direct-call recovery, use [Tool execution recovery](https://deepline.com/docs/sdk-v2/tool-execution-recovery.md).

> [!TIP]
>
> Continue only when the workspace, provider, required fields, acceptance rule, and applicable price are understood. Keep unavailable access separate from no-result evidence.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.